Skip to content
Snippets Groups Projects
Commit aa59ea87 authored by Laurent Lecluse's avatar Laurent Lecluse
Browse files

Ajout des connecteurs dans le dépôt

parent 195302c6
No related branches found
No related tags found
No related merge requests found
File added
--
-- CREATION ET INITIALISATION DES TABLES POUR IMPORTATION DANS OSE
-- Auteur : Bruno Bernard bruno.bernard@unicaen.fr
--
--
-- Groupes de types de formations a distinguer dans OSE
-- Ce sont ces regroupements de types de formations qui serviront de filtres dans les interfaces utilisateurs
--
create table ose_groupe_type_formation (
libelle_long varchar2(60) not null,
libelle_court varchar2(20) not null,
ordre number(2) default 99 not null, -- Ordre de classement des groupes de types de formation dans les interfaces utilisateurs
pertinence_niveau number(1) default 0 not null, -- Est-il pertinent de suffixer le libelle court par le niveau relatif de la VET dans le diplome?
source_code varchar2(20) not null,
check (pertinence_niveau in (0, 1)),
primary key (source_code)
)
;
grant select on ose_groupe_type_formation to ose
;
create public synonym ose_groupe_type_formation for apogee.ose_groupe_type_formation
;
--
-- Types de formations
-- Table de correspondance entre les types de formations Apogee et les groupes de types de formations dans OSE
--
create table ose_type_formation (
libelle_long varchar2(40) not null,
libelle_court varchar2(20) not null,
z_groupe_id varchar2(20) not null,
source_code varchar2(2) not null,
primary key (source_code),
constraint ose_tyf_fk_groupe_type_form foreign key (z_groupe_id) references ose_groupe_type_formation (source_code),
constraint ose_tyf_fk_typ_diplome foreign key (source_code) references typ_diplome (cod_tpd_etb)
)
;
grant select on ose_type_formation to ose
;
create public synonym ose_type_formation for apogee.ose_type_formation
;
--
-- Etapes
-- Une etape OSE est assimilable a une VET Apogee
--
create table ose_etape (
annee_id varchar2(4) not null,
libelle varchar2(120) not null,
libelle_court varchar2(25) not null,
z_type_formation_id varchar2(20) not null,
niveau number(2),
z_structure_id varchar2(20) not null,
source_code varchar2(20) not null,
specifique_echanges number(1) default 0 not null, -- Cette etape est-elle dediee aux echanges?
domaine_fonctionnel varchar2(20) not null,
FI number(1) default 1 not null,
FA number(1) default 0 not null,
FC number(1) default 0 not null,
cod_etp varchar2(6) not null,
cod_vrs_vet number(3) not null,
id varchar2(20) not null,
check (specifique_echanges in (0, 1)),
check (FI + FA + FC > 0),
primary key (id),
constraint ose_etp_fk_annee foreign key (annee_id) references annee_uni (cod_anu),
constraint ose_etp_fk_type_formation foreign key (z_type_formation_id) references ose_type_formation (source_code)
)
;
grant select on ose_etape to ose
;
create public synonym ose_etape for apogee.ose_etape
;
--
-- Chemins pedagogiques
-- Relations entre les etapes et les elements pedagogiques les plus fins
--
create table ose_chemin_pedagogique (
annee_id varchar2(4) not null,
z_element_pedagogique_id varchar2(20) not null,
z_etape_id varchar2(20) not null,
source_code varchar2(40) not null,
z_periode_id varchar2(20),
taux_foad number(1) default 0 not null,
id varchar2(40) not null,
check (z_periode_id in ('S1', 'S2')),
check (taux_foad in (0, 1)),
primary key (id),
constraint ose_chp_fk_annee foreign key (annee_id) references annee_uni (cod_anu)
)
;
grant select on ose_chemin_pedagogique to ose
;
create public synonym ose_chemin_pedagogique for apogee.ose_chemin_pedagogique
;
--
-- Elements pedagogiques
-- Un element pedagogique OSE est assimilable a un element pedagogique feuille d une structure d enseignements Apogee
--
create table ose_element_pedagogique (
annee_id varchar2(4) not null,
libelle varchar2(60) not null,
z_etape_id varchar2(20) not null,
z_structure_id varchar2(20) not null,
z_periode_id varchar2(20),
taux_foad number(1) default 0 not null,
source_code varchar2(20) not null,
z_discipline_id varchar2(4),
FI number(1) default 0 not null,
FA number(1) default 0 not null,
FC number(1) default 0 not null,
id varchar2(20) not null,
check (z_periode_id in ('S1', 'S2')),
check (taux_foad in (0, 1)),
check (FI in (0, 1)),
check (FA in (0, 1)),
check (FC in (0, 1)),
primary key (id),
constraint ose_elp_fk_annee foreign key (annee_id) references annee_uni (cod_anu)
)
;
grant select on ose_element_pedagogique to ose
;
create public synonym ose_element_pedagogique for apogee.ose_element_pedagogique
;
--
-- Effectifs par annee par element pedagogique et par regime d inscription
--
create table ose_element_effectifs (
z_element_pedagogique_id varchar2(20) not null,
annee_id varchar2(4) not null,
effectif_FI number(5) default 0 not null,
effectif_FA number(5) default 0 not null,
effectif_FC number(5) default 0 not null,
primary key (z_element_pedagogique_id, annee_id),
constraint ose_eff_fk_annee foreign key (annee_id) references annee_uni (cod_anu)
)
;
grant select on ose_element_effectifs to ose
;
create public synonym ose_element_effectifs for apogee.ose_element_effectifs
;
--
-- Table recursive de l offre de formation
--
create table ose_offre_de_formation (
annee_id varchar2(4) not null,
noeud_sup_id varchar2(20),
structure_sup_id varchar2(20),
choix_minimum number(2),
choix_maximum number(2),
liste_id varchar2(20),
libelle_liste varchar2(120),
libelle_court_liste varchar2(25),
noeud_inf_id varchar2(20) not null,
structure_inf_id varchar2(20),
libelle varchar2(120) not null,
libelle_court varchar2(25) not null,
nature varchar2(20) not null,
periode varchar2(20),
taux_foad number(1) default 0 not null,
check (periode in ('S1', 'S2')),
check (taux_foad in (0, 1)),
constraint ose_odf_uk unique (annee_id, noeud_inf_id, liste_id, noeud_sup_id),
constraint ose_odf_fk_annee foreign key (annee_id) references annee_uni (cod_anu)
)
;
grant select on ose_offre_de_formation to ose
;
create public synonym ose_offre_de_formation for apogee.ose_offre_de_formation
;
--
-- Noeuds de l arbre offre de formation
--
create view ose_noeud as
select
annee_id,
libelle,
libelle_court,
noeud_inf_id as code,
0 as liste,
case when nature = 'etape' then noeud_inf_id else null end as z_etape_id,
case when nature = 'etape' then null else noeud_inf_id end as z_element_pedagogique_id,
annee_id || '_' || noeud_inf_id as z_source_code,
structure_inf_id as z_structure_id
from ose_offre_de_formation
union
select
annee_id,
libelle_liste as libelle,
libelle_court_liste as libelle_court,
liste_id as code,
1 as liste,
null as z_etape_id,
null as z_element_pedagogique_id,
annee_id || '_' || liste_id as z_source_code,
min ( structure_sup_id ) as z_structure_id
from ose_offre_de_formation
where liste_id is not null
group by
annee_id,
libelle_liste,
libelle_court_liste,
liste_id
;
grant select on ose_noeud to ose
;
create public synonym ose_noeud for apogee.ose_noeud
;
--
-- Liens entre les noeuds de l arbre offre de formation
--
create view ose_lien as
select
annee_id,
annee_id || '_' || noeud_sup_id as noeud_sup_id,
annee_id || '_' || liste_id as noeud_inf_id,
choix_minimum,
choix_maximum,
annee_id || '_' || noeud_sup_id || '_' || liste_id as z_source_code,
structure_sup_id as z_structure_id
from ose_offre_de_formation
where liste_id is not null
union
select
annee_id,
annee_id || '_' || liste_id as noeud_sup_id,
annee_id || '_' || noeud_inf_id as noeud_inf_id,
null as choix_minimum,
null as choix_maximum,
annee_id || '_' || liste_id || '_' || noeud_inf_id as z_source_code,
min ( structure_sup_id ) as z_structure_id
from ose_offre_de_formation
where liste_id is not null
group by
annee_id,
liste_id,
noeud_inf_id
;
grant select on ose_lien to ose
;
create public synonym ose_lien for apogee.ose_lien
;
--
-- Volumes horaires et nombre de groupes ouverts pour enseignement, par type de groupe
--
create table ose_volume_horaire_ens (
annee_id varchar2(4) not null,
z_element_pedagogique_id varchar2(20) not null,
z_type_intervention_id varchar2(20) not null,
heures number(6,2),
source_code varchar2(20) not null,
id varchar2(20) not null,
groupes number(6),
primary key (id),
constraint ose_ovh_fk_annee foreign key (annee_id) references annee_uni (cod_anu)
)
;
grant select on ose_volume_horaire_ens to ose
;
create public synonym ose_volume_horaire_ens for apogee.ose_volume_horaire_ens
;
--
-- ALIMENTATION DES TABLES EXPLOITEES PAR LA SYNCHRONISATION APOGEE -> OSE
-- Auteur : Bruno Bernard bruno.bernard@unicaen.fr
--
-- Reinitialisation des tables
--
delete from ose_volume_horaire_ens
;
delete from ose_element_pedagogique
;
delete from ose_chemin_pedagogique
;
delete from ose_offre_de_formation
;
delete from ose_etape
;
delete from ose_type_formation
;
delete from ose_groupe_type_formation
;
--
-- Groupes de types de formations a distinguer dans OSE
-- Ce sont ces regroupements de types de formations qui serviront de filtres dans les interfaces utilisateurs
--
-- A : Libelle long
-- B : Le libelle court, eventuellement suffixe par le niveau relatif de la VET, servira a filtrer les formations (exemples L1 L2 L3 LPro ...)
-- C : Ordre de classement des groupes de types de formation dans les interfaces utilisateurs
-- D : Est-il pertinent de suffixer le libelle court par le niveau relatif de la VET dans le diplome? (0/1)
-- E : Identifiant du groupe de types de formations
-- A B C D E
insert into ose_groupe_type_formation values ('Diplôme Universitaire de Technologie','DUT' ,10,1,'DUT' );
insert into ose_groupe_type_formation values ('PACES' ,'PACES' ,21,0,'PACES' );
insert into ose_groupe_type_formation values ('Etudes de Santé' ,'Santé' ,22,1,'SANTE' );
insert into ose_groupe_type_formation values ('DES' ,'DES' ,25,0,'DES' );
insert into ose_groupe_type_formation values ('DESC' ,'DESC' ,26,0,'DESC' );
insert into ose_groupe_type_formation values ('Licence' ,'L' ,30,1,'L' );
insert into ose_groupe_type_formation values ('Licence professionnelle' ,'LPro' ,35,0,'LP' );
insert into ose_groupe_type_formation values ('Master' ,'M' ,40,1,'M' );
insert into ose_groupe_type_formation values ('Diplôme d''ingénieur' ,'Ingénieur' ,45,1,'ING' );
insert into ose_groupe_type_formation values ('Diplôme d''université' ,'DU' ,60,0,'DU' );
insert into ose_groupe_type_formation values ('Capacité' ,'Capacité' ,70,0,'CAPA' );
insert into ose_groupe_type_formation values ('Orthophonie' ,'Orthophonie' ,71,0,'ORTHO' );
insert into ose_groupe_type_formation values ('Maïeutique' ,'Maïeutique' ,72,0,'MAIEUTIQUE');
insert into ose_groupe_type_formation values ('Autre formation' ,'Autre' ,99,0,'AUTRE' );
--
-- Types de formations
-- Table de correspondance entre les types de formations Apogee et les groupes de types de formations dans OSE
--
insert into ose_type_formation
with tpd as (
select
lib_tpd as libelle_long, -- Libelle long Apogee
lic_tpd as libelle_court, -- Libelle court Apogee
case cod_tpd_etb
when '15' then 'DUT'
when '16' then 'DUT'
when 'M1' then 'PACES'
when 'M2' then 'SANTE'
when '87' then 'SANTE'
when '88' then 'SANTE'
when '43' then 'SANTE'
when '57' then 'DES'
when '55' then 'DES'
when '65' then 'DESC'
when '23' then 'L'
when 'AL' then 'L'
when 'DL' then 'L'
when 'CP' then 'L'
when '22' then 'LP'
when '37' then 'M'
when '94' then 'M'
when 'MA' then 'M'
when 'DM' then 'M'
when '33' then 'ING'
when '68' then 'CAPA'
when '93' then 'ORTHO'
when '92' then 'MAIEUTIQUE'
else case when cod_tpd_sis between 'UA' and 'UF' then 'DU'
else 'AUTRE'
end
end as z_groupe_id, -- Id du groupe de types de formations
cod_tpd_etb as source_code -- Code type de diplome Apogee
from typ_diplome
where tem_en_sve_tpd = 'O'
and eta_ths_hdr_drt is null -- Exclusion des theses et HDR (formations sans enseignement)
and cod_tpd_etb not in ('03') -- Exclusion des auditeurs libres
)
select tpd.*
from tpd
join ose_groupe_type_formation gtf on gtf.source_code = tpd.z_groupe_id
;
--
-- Etapes
-- Une etape OSE est assimilable a une VET Apogee
--
insert into ose_etape
with
tmp as (
select
anu.cod_anu as annee_id,
nvl ( vet.lib_web_vet, etp.lib_etp ) as libelle,
etp.lic_etp as libelle_court,
min ( dip.cod_tpd_etb ) keep ( dense_rank first order by anu.cod_anu, vde.cod_etp, vde.cod_vrs_vet ) as z_type_formation_id,
-- Determiner si la notion de niveau a du sens pour le type de formation
min (
case gtf.pertinence_niveau
when 0 then null
else vde.cod_sis_daa_min
end
) keep ( dense_rank first order by anu.cod_anu, vde.cod_etp, vde.cod_vrs_vet ) as niveau,
-- Identifiant de la structure dans le referentiel de l etablissement
str.cod_str as z_structure_id,
-- Reperer les formations dediees aux echanges
min (
case when dip.cod_tpd_etb in ( 'AL', 'DL', 'DM', 'MA', '83' ) then 1 else 0 end
) keep ( dense_rank first order by anu.cod_anu, vde.cod_etp, vde.cod_vrs_vet ) as specifique_echanges,
-- Determiner le domaine fonctionnel en fonction du type de diplome ou du niveau de la formation
min (
case
when tpd.cod_tpd_sis in ( 'CY', 'CZ' ) then 'D101'
when tpd.cod_tpd_sis in ( 'IC', 'FK' ) then 'D102'
when tpd.cod_nif in ( 0, 7, 8, 9 ) then 'D101'
when tpd.cod_nif in ( 6 ) then 'D103'
else case tpd.cod_nif - nvl ( vdi.dur_ann_vdi, least ( vde.cod_sis_daa_min, tpd.cod_nif ) ) + least ( vde.cod_sis_daa_min, tpd.cod_nif )
when 1 then 'D101'
when 2 then 'D101'
when 3 then 'D101'
when 4 then 'D102'
when 5 then 'D102'
else 'D101'
end
end
) keep ( dense_rank first order by anu.cod_anu, vde.cod_etp, vde.cod_vrs_vet ) as domaine_fonctionnel,
vde.cod_etp,
vde.cod_vrs_vet
from annee_uni anu
join vdi_fractionner_vet vde on anu.cod_anu between vde.daa_deb_rct_vet and vde.daa_fin_rct_vet
join etape etp on etp.cod_etp = vde.cod_etp
join diplome dip on dip.cod_dip = vde.cod_dip
join typ_diplome tpd on tpd.cod_tpd_etb = dip.cod_tpd_etb
join version_diplome vdi on vdi.cod_dip = vde.cod_dip and vdi.cod_vrs_vdi = vde.cod_vrs_vdi
join version_etape vet on vet.cod_etp = vde.cod_etp and vet.cod_vrs_vet = vde.cod_vrs_vet
join composante cmp on cmp.cod_cmp = vet.cod_cmp
join ucbn_composante_ldap str on str.cod_cmp = cmp.cod_cmp -- Recherche du code structure dans le referentiel des structures de l etablissement
join ose_type_formation tyf on tyf.source_code = dip.cod_tpd_etb
join ose_groupe_type_formation gtf on gtf.source_code = tyf.z_groupe_id
where anu.cod_anu >= to_char ( add_months ( sysdate, -6 ), 'YYYY' ) -- Par convention l annee debute le 1er juillet
and cmp.cod_tpc! = 'EXT' -- Exclusion des structures exterieures (IFSI, etc.)
group by
anu.cod_anu,
nvl ( vet.lib_web_vet, etp.lib_etp ),
etp.lic_etp,
str.cod_str,
vde.cod_etp,
vde.cod_vrs_vet
)
select
tmp.annee_id,
tmp.libelle,
tmp.libelle_court,
tmp.z_type_formation_id,
tmp.niveau,
tmp.z_structure_id,
tmp.cod_etp || '_' || tmp.cod_vrs_vet as source_code,
least ( tmp.specifique_echanges, 1 ) as specifique_echanges,
min ( tmp.domaine_fonctionnel ) as domaine_fonctionnel,
-- Determiner en fonction des regimes d inscription si la VET est ouverte en FI, en FC et/ou en apprentissage
max ( case when rve.cod_rgi in ( '1', '3' ) then 1 else 0 end ) as FI,
max ( case when rve.cod_rgi in ( '4' ) then 1 else 0 end ) as FA,
max ( case when rve.cod_rgi in ( '2', '5', '6' ) then 1 else 0 end ) as FC,
tmp.cod_etp,
tmp.cod_vrs_vet,
tmp.annee_id || '_' || tmp.cod_etp || '_' || tmp.cod_vrs_vet as id
from tmp
join rgi_autoriser_vet rve on rve.cod_etp = tmp.cod_etp and rve.cod_vrs_vet = tmp.cod_vrs_vet
where rve.tem_en_sve_rve='O'
group by
tmp.annee_id,
tmp.libelle,
tmp.libelle_court,
tmp.z_type_formation_id,
tmp.niveau,
tmp.z_structure_id,
tmp.cod_etp,
tmp.cod_vrs_vet,
tmp.specifique_echanges
;
--
-- Table recursive de l offre de formation
-- L offre de formation est reconstituee sous forme d arbre :
-- en ignorant les elements feuilles de nature technique (elements miroirs, elements utiles uniquement pour le calcul de notes...)
-- en remplacant les elements portes par les elements porteurs
-- en recherchant dans la branche la periode ou le temoin A DISTANCE s il n est pas renseigne au niveau de l element pedagogique le plus fin
--
insert into ose_offre_de_formation
with
annee as (
select distinct
etp.annee_id
from ose_etape etp
),
-- Les elements portes sont ignores au benefice des elements porteurs
elements_portes as (
select
anu.annee_id,
epo.cod_elp_porte,
epo.cod_elp_porteur
from annee anu
join elp_porteur_porte epo on epo.cod_anu = anu.annee_id
),
relations as (
select
etp.annee_id,
null as noeud_sup_id,
null as structure_sup_id,
null as choix_minimum,
null as choix_maximum,
null as liste_id,
null as type_choix,
null as libelle_liste,
null as libelle_court_liste,
etp.cod_etp || '_' || etp.cod_vrs_vet as noeud_inf_id,
etp.z_structure_id as structure_inf_id,
etp.libelle,
etp.libelle_court,
'etape' as nature,
null as cod_pel,
null as tem_a_dis_elp
from ose_etape etp
union select
etp.annee_id,
etp.cod_etp || '_' || etp.cod_vrs_vet as noeud_sup_id,
etp.z_structure_id as structure_sup_id,
vrl.nbr_min_elp_obl_chx_vet as choix_minimum,
vrl.nbr_max_elp_obl_chx_vet as choix_maximum,
'{}' || vrl.cod_lse as liste_id,
lse.cod_typ_lse as type_choix,
lse.lib_lse as libelle_liste,
lse.lic_lse as libelle_court_liste,
elp.cod_elp as noeud_inf_id,
str.cod_str as structure_inf_id,
elp.lib_elp as libelle,
elp.lic_elp as libelle_court,
elp.cod_nel as nature,
-- Determiner les periodes qui relevent du semestre 1, du semestre 2, ou qui sont annuelles
case
when elp.cod_pel in ( 'S1', 'S3', 'S5', 'S7', 'S9' ) then 'S1'
when elp.cod_pel in ( 'S2', 'S4', 'S6', 'S8', '10' ) then 'S2'
else null
end as cod_pel,
case
when elp.tem_a_dis_elp = 'O' then '1'
else null
end as tem_a_dis_elp
from ose_etape etp
join vet_regroupe_lse vrl on vrl.cod_etp = etp.cod_etp and vrl.cod_vrs_vet = etp.cod_vrs_vet
join liste_elp lse on lse.cod_lse = vrl.cod_lse
join lse_regroupe_elp lre on lre.cod_lse = lse.cod_lse
left join elements_portes epo on epo.annee_id = etp.annee_id and epo.cod_elp_porte = lre.cod_elp
join element_pedagogi elp on elp.cod_elp = nvl ( epo.cod_elp_porteur, lre.cod_elp )
join composante cmp on cmp.cod_cmp = elp.cod_cmp
join ucbn_composante_ldap str on str.cod_cmp = cmp.cod_cmp -- Recherche du code structure dans le referentiel des structures de l etablissement
where sysdate between nvl ( vrl.dat_cre_rel_lse_vet, sysdate - 1 ) and nvl ( vrl.dat_frm_rel_lse_vet, sysdate + 1 )
and lse.eta_lse = 'O'
and elp.eta_elp = 'O'
and elp.tem_sus_elp = 'N'
union select
anu.annee_id,
erl.cod_elp as noeud_sup_id,
st1.cod_str as structure_sup_id,
erl.nbr_min_elp_obl_chx as choix_minimum,
erl.nbr_max_elp_obl_chx as choix_maximum,
'{}' || erl.cod_lse as liste_id,
lse.cod_typ_lse as type_choix,
lse.lib_lse as libelle_liste,
lse.lic_lse as libelle_court_liste,
elp.cod_elp as noeud_inf_id,
str.cod_str as structure_inf_id,
elp.lib_elp as libelle,
elp.lic_elp as libelle_court,
elp.cod_nel as nature,
case
when elp.cod_pel in ( 'S1', 'S3', 'S5', 'S7', 'S9' ) then 'S1'
when elp.cod_pel in ( 'S2', 'S4', 'S6', 'S8', '10' ) then 'S2'
else null
end as cod_pel,
case
when elp.tem_a_dis_elp = 'O' then '1'
else null
end as tem_a_dis_elp
from annee anu
cross join elp_regroupe_lse erl
join element_pedagogi el1 on el1.cod_elp = erl.cod_elp
join composante cm1 on cm1.cod_cmp = el1.cod_cmp
join ucbn_composante_ldap st1 on st1.cod_cmp = cm1.cod_cmp
join liste_elp lse on lse.cod_lse = erl.cod_lse
join lse_regroupe_elp lre on lre.cod_lse = lse.cod_lse
left join elements_portes epo on epo.annee_id = anu.annee_id and epo.cod_elp_porte = lre.cod_elp
join element_pedagogi elp on elp.cod_elp = nvl ( epo.cod_elp_porteur, lre.cod_elp )
join composante cmp on cmp.cod_cmp = elp.cod_cmp
join ucbn_composante_ldap str on str.cod_cmp = cmp.cod_cmp
where sysdate between nvl ( erl.dat_cre_rel_lse_elp, sysdate - 1 ) and nvl ( erl.dat_frm_rel_lse_elp, sysdate + 1 )
and lse.eta_lse = 'O'
and elp.eta_elp = 'O'
and elp.tem_sus_elp = 'N'
),
arbre_offre_de_formation as (
select
connect_by_root rel.annee_id as annee_id,
rel.noeud_sup_id,
rel.structure_sup_id,
rel.choix_minimum,
rel.choix_maximum,
rel.liste_id,
rel.type_choix,
rel.libelle_liste,
rel.libelle_court_liste,
rel.noeud_inf_id,
rel.structure_inf_id,
rel.libelle,
rel.libelle_court,
rel.nature,
rtrim ( sys_connect_by_path ( case when rel.nature in ( 'CAL', 'MIR' ) then null else rel.noeud_inf_id end, '>' ), '>' ) as chemin_noeud_inf_id,
rtrim ( sys_connect_by_path ( rel.cod_pel, '>' ), '>' ) as chemin_periode,
rtrim ( sys_connect_by_path ( rel.tem_a_dis_elp, '>' ), '>' ) as chemin_taux_foad,
connect_by_isleaf as isleaf
from relations rel
start with rel.noeud_sup_id is null
connect by prior rel.annee_id = rel.annee_id and prior rel.noeud_inf_id = rel.noeud_sup_id
),
branches_inutiles as (
select distinct
arb.annee_id,
arb.noeud_inf_id
from arbre_offre_de_formation arb
join arbre_offre_de_formation inu on inu.annee_id = arb.annee_id and inu.chemin_noeud_inf_id = arb.chemin_noeud_inf_id
where arb.nature in ( 'MIR', 'CAL' ) -- Exclusion des elements techniques (elements miroirs, elements utiles uniquement pour le calcul de notes...)
and arb.isleaf = 1
and inu.nature in ( 'MIR', 'CAL' )
),
arbre_elague as (
select
arb.annee_id,
arb.noeud_sup_id,
arb.structure_sup_id,
arb.choix_minimum,
arb.choix_maximum,
arb.liste_id,
arb.type_choix,
arb.libelle_liste,
arb.libelle_court_liste,
arb.noeud_inf_id,
arb.structure_inf_id,
arb.libelle,
arb.libelle_court,
arb.nature,
substr ( arb.chemin_periode, instr ( arb.chemin_periode, '>', -1 ) + 1 ) as periode,
substr ( arb.chemin_taux_foad, instr ( arb.chemin_taux_foad, '>', -1 ) + 1 ) as taux_foad
from arbre_offre_de_formation arb
left join branches_inutiles inu on inu.annee_id = arb.annee_id and inu.noeud_inf_id = arb.noeud_inf_id
where inu.noeud_inf_id is null
),
noeud_unique as (
select
arb.annee_id,
arb.noeud_inf_id,
arb.nature,
min ( arb.periode ) as periode_min,
max ( arb.periode ) as periode_max,
max ( to_number ( nvl ( arb.taux_foad, '0') ) ) as taux_foad
from arbre_elague arb
group by
arb.annee_id,
arb.noeud_inf_id,
arb.nature
)
select distinct
arb.annee_id,
arb.noeud_sup_id,
arb.structure_sup_id,
case arb.type_choix
when 'O' then null
when 'F' then 0
when 'X' then arb.choix_minimum
end as choix_minimum,
case arb.type_choix
when 'O' then null
when 'F' then arb.choix_maximum
when 'X' then arb.choix_maximum
end as choix_maximum,
arb.liste_id,
arb.libelle_liste,
arb.libelle_court_liste,
arb.noeud_inf_id,
arb.structure_inf_id,
arb.libelle,
arb.libelle_court,
arb.nature,
case when uno.periode_min = uno.periode_max
then uno.periode_min
else null
end as periode,
uno.taux_foad
from arbre_elague arb
join noeud_unique uno on uno.annee_id = arb.annee_id and uno.noeud_inf_id = arb.noeud_inf_id
order by 1, 2, 6, 9
;
--
-- Chemins pedagogiques
-- Relations entre les etapes (racines) et les elements pedagogiques les plus fins (feuilles)
--
insert into ose_chemin_pedagogique
with etape_enseignement as (
select distinct
connect_by_root annee_id as annee_id,
connect_by_root odf.noeud_sup_id as noeud_sup_id,
odf.noeud_inf_id,
odf.periode,
odf.taux_foad
from ose_offre_de_formation odf
where connect_by_isleaf = 1
start with ( odf.annee_id, odf.noeud_sup_id ) in ( select annee_id, source_code from ose_etape )
connect by prior odf.annee_id = odf.annee_id and prior odf.noeud_inf_id = odf.noeud_sup_id
)
select
annee_id,
noeud_inf_id as z_element_pedagogique_id,
noeud_sup_id as z_etape_id,
noeud_sup_id || '_' || noeud_inf_id as source_code,
periode as z_periode_id,
max ( taux_foad ) as taux_foad,
annee_id || '_' || noeud_sup_id || '_' || noeud_inf_id as id
from etape_enseignement
group by
annee_id,
noeud_sup_id,
noeud_inf_id,
periode
;
--
-- Elements pedagogiques
-- Un element pedagogique OSE est assimilable a un element pedagogique feuille d une structure d enseignements Apogee
-- Si un element est commun a plusieurs etapes il sera ici associe a une etape de reference
--
insert into ose_element_pedagogique
select
odf.annee_id,
odf.libelle,
-- Si un element est commun a plusieurs etapes il sera ici associe a une etape de reference en fonction des criteres suivants
-- critere 1 : prise en compte de la VET porteuse definie dans Apogee
-- critere 2 : les etapes dediees aux echanges sont non prioritaires
-- critere 3 : ordre alphabetique du code etape
min ( chp.z_etape_id ) keep ( dense_rank first order by
case when chp.z_etape_id = ece.cod_etp_porteuse || '_' || ece.cod_vrs_vet_porteuse then 0 else 1 end,
etp.specifique_echanges,
chp.z_etape_id
) as z_etape_id,
odf.structure_inf_id as z_structure_id,
chp.z_periode_id,
chp.taux_foad,
chp.z_element_pedagogique_id as source_code,
ece.cod_scc as z_discipline_id,
max ( etp.FI ) as FI,
max ( etp.FA ) as FA,
max ( etp.FC ) as FC,
odf.annee_id || '_' || chp.z_element_pedagogique_id as id
from ose_offre_de_formation odf
join ose_chemin_pedagogique chp on chp.annee_id = odf.annee_id and chp.z_element_pedagogique_id = odf.noeud_inf_id
join ose_etape etp on etp.annee_id = chp.annee_id and etp.source_code = chp.z_etape_id
left outer join elp_charge_ens ece on ece.cod_anu = odf.annee_id and ece.cod_elp = odf.noeud_inf_id
group by
odf.annee_id,
odf.libelle,
odf.structure_inf_id,
chp.z_periode_id,
chp.taux_foad,
chp.z_element_pedagogique_id,
ece.cod_scc
;
--
-- Constatation des effectifs par annee par element pedagogique et par regime d inscription
--
merge into ose_element_effectifs eff
using (
select source_code as z_element_pedagogique_id,
cod_anu as annee_id,
sum(effectif_FI) as effectif_FI,
sum(effectif_FA) as effectif_FA,
sum(effectif_FC) as effectif_FC
from (
select elp.source_code,
ice.cod_anu,
case when iae.cod_rge in ('1', '3') then 1 else 0 end as effectif_FI,
case when iae.cod_rge in ('4') then 1 else 0 end as effectif_FA,
case when iae.cod_rge in ('2', '5', '6') then 1 else 0 end as effectif_FC
from ose_element_pedagogique elp
join ind_contrat_elp ice on ice.cod_elp = elp.source_code
and ice.cod_anu = elp.annee_id
join ins_adm_etp iae on iae.cod_ind = ice.cod_ind
and iae.cod_anu = ice.cod_anu
and iae.cod_etp = ice.cod_etp
and iae.cod_vrs_vet = ice.cod_vrs_vet
where elp.annee_id in ( to_char(add_months(sysdate, -28), 'YYYY') , to_char(add_months(sysdate, -16), 'YYYY') , to_char(add_months(sysdate, -4), 'YYYY') )
and ice.tem_prc_ice = 'N'
and iae.eta_iae = 'E'
and iae.eta_pmt_iae = 'P'
-- Ajout des effectifs des elements portes
union all
select elp.source_code,
ice.cod_anu,
case when iae.cod_rge in ('1', '3') then 1 else 0 end as effectif_FI,
case when iae.cod_rge in ('4') then 1 else 0 end as effectif_FA,
case when iae.cod_rge in ('2', '5', '6') then 1 else 0 end as effectif_FC
from ose_element_pedagogique elp
join elp_porteur_porte epo on epo.cod_elp_porteur = elp.source_code
and epo.cod_anu = elp.annee_id
join ind_contrat_elp ice on ice.cod_elp = epo.cod_elp_porte
and ice.cod_anu = epo.cod_anu
join ins_adm_etp iae on iae.cod_ind = ice.cod_ind
and iae.cod_anu = ice.cod_anu
and iae.cod_etp = ice.cod_etp
and iae.cod_vrs_vet = ice.cod_vrs_vet
where elp.annee_id in ( to_char(add_months(sysdate, -28), 'YYYY') , to_char(add_months(sysdate, -16), 'YYYY') , to_char(add_months(sysdate, -4), 'YYYY') )
and ice.tem_prc_ice = 'N'
and iae.eta_iae = 'E'
and iae.eta_pmt_iae = 'P'
)
group by source_code,
cod_anu
) tmp
on (eff.z_element_pedagogique_id = tmp.z_element_pedagogique_id and eff.annee_id = tmp.annee_id)
when matched then
update set
eff.effectif_FI = tmp.effectif_FI,
eff.effectif_FA = tmp.effectif_FA,
eff.effectif_FC = tmp.effectif_FC
when not matched then
insert (z_element_pedagogique_id, annee_id, effectif_FI, effectif_FA, effectif_FC)
values (tmp.z_element_pedagogique_id, tmp.annee_id, tmp.effectif_FI, tmp.effectif_FA, tmp.effectif_FC)
;
--
-- Volumes horaires et nombre de groupes ouverts pour chaque enseignement, par type de groupe
-- Le rapprochement, entre les volumes horaires definis dans le module Charges et les groupes ouverts, se fait sur le code type d heures = le code type de groupe
-- Si aucun groupe n est modelise pour un element pedagogique alors on considere qu il existe un groupe unique d etudiants pour cet element
-- Cas particulier des enseignements de type Mémoire, Projet, Stage : si aucun groupe n est modelise alors on considere qu il existe autant de groupes que d etudiants inscrits a l element
--
insert into ose_volume_horaire_ens
with elp_groupes as (
select
elp.annee_id,
elp.source_code,
gpe.cod_tgr,
count ( distinct iag.cod_gpe ) as groupes
from ose_element_pedagogique elp
join gpe_obj gpo on gpo.typ_obj_gpo = 'ELP' and gpo.cod_elp = elp.source_code
join groupe gpe on gpe.cod_gpe = gpo.cod_gpe
join ind_affecte_gpe iag on iag.cod_gpe = gpo.cod_gpe and iag.cod_anu = elp.annee_id
where elp.annee_id between nvl ( gpe.daa_deb_val_gpe, '0000' ) and nvl ( gpe.daa_fin_val_gpe, '9999' )
group by
elp.annee_id,
elp.source_code,
gpe.cod_tgr
)
select
elp.annee_id,
elp.source_code as z_element_pedagogique_id,
ect.cod_typ_heu as z_type_intervention_id,
ect.nbr_heu_elp as heures,
elp.source_code || '_' || ect.cod_typ_heu as source_code,
elp.annee_id || '_' || elp.source_code || '_' || ect.cod_typ_heu as id,
case when nvl ( eff.effectif_FI, 0 ) + nvl (eff.effectif_FA, 0 ) + nvl (eff.effectif_FC, 0 ) > 0
then case when ect.cod_typ_heu in ( 'MEMOIR', 'PROJET', 'STAGE' )
then nvl ( elg.groupes, nvl ( eff.effectif_FI, 0 ) + nvl (eff.effectif_FA, 0 ) + nvl (eff.effectif_FC, 0 ) )
else nvl ( elg.groupes, 1 )
end
else 0
end as groupes
from ose_element_pedagogique elp
join elp_chg_typ_heu ect on ect.cod_anu = elp.annee_id and ect.cod_elp = elp.source_code
left outer join ose_element_effectifs eff on eff.annee_id = elp.annee_id and eff.z_element_pedagogique_id = elp.source_code
left outer join elp_groupes elg on elg.annee_id = ect.cod_anu and elg.source_code = ect.cod_elp and elg.cod_tgr = ect.cod_typ_heu
where nvl ( ect.nbr_heu_elp, 0 ) > 0
;
INTERFACAGE ENTRE APOGEE ET OSE
Auteur : Bruno Bernard bruno.bernard@unicaen.fr
-------------------------------
L'importation de données d'Apogée vers OSE s'effectue via un dblink entre les deux bases Oracle.
OSE va lire des tables et vues créées dans la base Apogée.
Ces tables dans la base Apogée sont rafraîchies régulièrement, par exemple midi et soir pour permettre que les modifications effectuées dans Apogée soient répercutées la demi-journée suivante dans OSE.
Le script Apogee-OSE-createTables.sql crée les 7 tables et les 3 vues OSE_****** dans la base Apogée :
create table ose_groupe_type_formation : Regroupements des types de formations
create table ose_type_formation : Correspondance entre les types de formations Apogee et les groupes de types de formations
create table ose_etape : Une etape OSE est assimilable a une VET Apogee
create table ose_offre_de_formation : L'offre de formation est reconstituee sous forme d'arbre
create view ose_noeud : Noeuds de l'arbre offre de formation = VET, listes et éléments pédagogiques
create view ose_lien : Liens entre les noeuds de l'arbre offre de formation
create table ose_chemin_pedagogique : Relations entre les etapes (racines) et les elements pedagogiques les plus fins (feuilles)
create table ose_element_pedagogique : Les feuilles de l'arbre sont les elements pedagogiques les plus fins (feuilles)
create table ose_element_effectifs : Effectifs par annee par element pedagogique et par regime d'inscription
create table ose_volume_horaire_ens : Volumes horaires et nombre de groupes ouverts pour enseignement, par type de groupe
Le script Apogee-OSE-export.sql alimente les tables OSE_****** dans la base Apogée.
Il doit être adapté à chaque établissement.
La table ose_groupe_type_formation permet :
- de regrouper les types de formation pour rendre cette liste plus synthétique et plus lisible (A ADAPTER)
- d'ordonner cette liste (A ADAPTER)
- de préciser si le niveau de la VET dans le diplôme doit apparaître dans le filtre "Niveau" (exemples L1 L2 L3 LPro ...) (A ADAPTER)
La table ose_type_formation permet :
- d'associer les types de formation Apogée aux groupes de types de formations OSE (A ADAPTER)
- d'exclure certains types ou natures de formations sur lesquels des services d'enseignement ne devront pas pouvoir être saisis (exemples : auditeurs libres, thèses...) (A ADAPTER)
La table ose_etape permet :
- de définir les étapes visibles dans OSE et celles à exclure éventuellement (A ADAPTER)
- d'associer chaque étape à un code structure du référentiel des structures de l'établissement (A ADAPTER)
- de repérer si une étape est dédiée aux échanges (A ADAPTER)
- de déterminer le domaine fonctionnel qui sera associé aux enseignements de l'étape (A ADAPTER)
- de spécifier si l'étape est ouverte en FI, en FC et/ou en apprentissage (A ADAPTER)
La table récursive ose_offre_de_formation permet :
- de reconstituer l'offre de formation d'une année sous forme d'arbre
- d'ignorer les elements feuilles de nature technique (elements miroirs, elements utiles uniquement pour le calcul de notes...) (A ADAPTER)
- de substituer les éléments porteurs aux éventuels éléments portés
- d'associer une période (S1, S2, ou Année) à chaque élément en recherchant l'information dans la branche (A ADAPTER)
- de déterminer si un enseignement est proposé à distance en recherchant l'information dans la branche
- d'associer chaque élément à un code structure du référentiel des structures de l'établissement (A ADAPTER)
La table ose_chemin_pedagogique permet :
- de mettre en relation les etapes (racines) et les elements pedagogiques les plus fins (feuilles) de l'arbre offre de formation
La table ose_element_pedagogique permet :
- d'associer à chaque élément pédagogique l'étape la plus pertinente dans laquelle il est présent (par exemple en écartant a priori les étapes dédiées aux échanges internationaux) (A ADAPTER)
La table ose_element_effectifs permet :
- de définir quels régimes d'inscription correspondent à la FI, à la FC, ou à l'apprentissage (FA) (A ADAPTER)
- de calculer les effectifs par année, par élément pédagogique et par régime d'inscription
La table ose_volume_horaire_ens permet :
- d'associer à chaque enseignement ses volumes horaires par type d'intervention enregistrés dans le module Charges, la saisie de services dans OSE n'étant possible que si une charge existe pour l'enseignement
- si l'année est en cours ou terminée, d'observer la charge réelle en dénombrant le nombre de groupes ouverts dans lesquels des étudiants sont inscrits, le type de groupe étant assimilé au type d'heure défini dans le module Charges ; en l'absence de groupes modélisés, un groupe unique sera pris en compte pour l'enseignement.
Cf tableau Apogee-OSE-calculCharges.xls
-- Quelques requêtes por faire quelques légers contrôles sur les vues fournies pour OSE
-- Trouver les élements qui font référence à des étapes inconnues dans ose_etape (= formations diplômantes émanents de FCA Manager)
select * from OSE_ELEMENT_PEDAGOGIQUE WHERE Z_ETAPE_ID not in (select SOURCE_CODE from OSE_ETAPE);
-- Trouver les volumes horaires reliés à un élément inexistant
select * from OSE_VOLUME_HORAIRE_ENS WHERE Z_ELEMENT_PEDAGOGIQUE_ID NOT IN (select SOURCE_CODE FROM OSE_ELEMENT_PEDAGOGIQUE);
-- Trouver les éléments pédagogiques dans le chemin pédagogique qui sont absent de la vue étape fournie (= formations diplômantes émanents de FCA Manager)
select * from OSE_CHEMIN_PEDAGOGIQUE WHERE Z_ETAPE_ID NOT IN (select SOURCE_CODE FROM OSE_ETAPE);
-- Requêtes de déversmeent des informations de FCA Manager dans OSE
-- Auteur : Jérôme Gallot (jerome.gallot@unicaen.fr)
-- Pour les DBLINK, penser à modifier l'utilisateur qui peut lire les vues (ucbn_ose pour l'UNICAEN)
-- ##################################
-- Vue ETAPE
-- ##################################
-- MAJ 20/11/2017 : Utilisation de l'année universitaire de FCA Manager
-- MAJ 22/11/2017 : Commentaires pour mise à disposition
-- MAJ 24/11/2017 : Déversement de toutes les formations valides des années > 2017
-- MAJ 29/11/2017 : Correction domaine fonctionnel (manque un 'D' dans le code)
-- : Changement type formation -> forcer à null avant refonte tyoe_formation
-- ##################################
-- TODO : utiliser le domaine fonctionnel SIFAC indiqué sur une action au lieu d'un switch dans la requête SQL
-- Améliorer la remontée des niveaux/type formation
-- ##################################
DROP VIEW OSE_ETAPE;
CREATE VIEW OSE_ETAPE AS
(
SELECT
-- Libellé de l'action
acn.LIB_ACN AS Libelle,
-- Le type de formation est par défaut à 82 = formation non diplômante
'82' AS Z_TYPE_FORMATION_ID,
-- Code Harpege de la structure
ucl.COD_STR AS Z_STRUCTURE_ID,
-- Niveau : correspond au type de formation/groupe_type_formation dans OSE
-- Le type de formation est défini dans le champ 'Validé par' dans FCA
CASE
-- WHEN acv.COD_NIF_SOR_ACV=7 THEN 1 -- Niveau 1 = BAC+5
-- WHEN acv.COD_NIF_SOR_ACV=8 THEN 2 -- Niveau 2 = BAC+3
-- WHEN acv.COD_NIF_SOR_ACV=9 THEN 3 -- Niveau 3 = Bac+2
-- Licence Pro
WHEN 1=1 THEN NULL
-- NULL permet d'afficher 'Autres'
ELSE NULL
END AS NIVEAU,
-- Domaine fonctionnel
CASE
WHEN acv.COD_NIF_SOR_ACV=7 THEN 'D101' -- Form init et cont licence
WHEN acv.COD_NIF_SOR_ACV=8 THEN 'D102' -- Form init et cont master
WHEN acv.COD_NIF_SOR_ACV=9 THEN 'D103' -- Form init et cont doct
ELSE 'D1132'
END AS Z_DOMAINE_FONCTIONNEL_ID,
-- Code source de l'action (ne doit pas changer)
'FCA-ACN-' ||ACN.ID AS SOURCE_CODE,
-- Anné Universitaire de l'action
auv.COD_ANU AS ANNEE_ID,
-- Référence de l'action dans FCA Manager
acn.COD_REF_COM_ACN AS CODE
FROM ACTION acn
LEFT JOIN ACTIVITE acv ON (acv.ID=acn.COD_ACV)
LEFT JOIN ucbn_composante_ldap@apoprod ucl ON (ucl.COD_CMP=acv.COD_CGE)
LEFT JOIN ANNEE_UNI auv on (acn.COD_ANU_ACN = auv.COD_ANU)
WHERE
-- Les formations ne sont prise en compte qu'à partir de l'année universitaire 2017
auv.COD_ANU >= 2017
-- La source doit être FCA MANAGER
AND acn.COD_LOG_SRC = 4
-- Le format du nom de la formation doit être correct
AND acn.COD_REF_COM_ACN like 'FCA-%'||auv.COD_ANU||'%'
-- L'action est en service dans FCA Manager;
AND acn.TEM_EN_SVE_ACN = 1
);
grant select on OSE_ETAPE to ucbn_ose;
-- ##################################
-- Vue Element_pedagogique
-- ##################################
-- MAJ 20/11/2017 : Utilisation de l'année universitaire de FCA Manager
-- MAJ 22/11/2017 : Commentaires pour mise à disposition
-- MAJ 24/11/2017 : Déversement de toutes les formations valides des années > 2017
-- ##################################
DROP VIEW OSE_ELEMENT_PEDAGOGIQUE;
CREATE VIEW OSE_ELEMENT_PEDAGOGIQUE AS
(
SELECT ens.LIB_ENS AS LIBELLE,
CASE
-- Si le code de l'élement commence par APO et finie par une année ---> suppression pour retrouver l'étape et la VET d'origine
WHEN acn.COD_LOG_SRC=2 THEN REGEXP_REPLACE(REGEXP_REPLACE(REGEXP_REPLACE(acn.COD_REF_COM_ACN,'^APO-',''),'-'||acn.COD_ANU_ACN||'$',''),'-','_')
WHEN acn.COD_LOG_SRC=4 THEN 'FCA-ACN-'||ACN.ID
END AS Z_ETAPE_ID,
-- Code Harpege de la structure
ucl.COD_STR AS Z_STRUCTURE_ID,
-- Pour l'instant on ne renvoie pas de période (semestre 1, semestre 2)
NULL AS Z_PERIODE_ID,
-- Le taux FOAD est défini par le mode d'action
CASE
WHEN (acn.COD_MOD_ACN=3 OR acn.COD_MOD_ACN=4) THEN 1
ELSE 0
END AS TAUX_FOAD,
-- Enseignement sans FI par défaut
0 AS FI,
-- Enseignement en FC par défaut
1 AS FC,
-- Pas d'apprentissage géré par FCA
0 AS FA,
-- Le code source contient l'identifiant unique de l'enseignement
'FCA-ENS-'||ens.COD_ENS AS SOURCE_CODE,
-- 0% d'apprentissage
0 AS TAUX_FA,
-- 100% en formation continue
1 AS TAUX_FC,
-- 0% en formation initiale
0 AS TAUX_FI,
-- Année universitaire de l'action
auv.COD_ANU AS ANNEE_ID,
-- Pas de correspondance de discipline entre FCA et OSE par défaut
'' AS Z_DISCPLINE_ID,
ens.COD_REF_COM_ENS AS CODE
FROM ENSEIGNEMENT ens
LEFT JOIN ACTION acn ON acn.ID=ens.COD_ACN_REF
LEFT JOIN ACTIVITE acv ON (acv.ID=acn.COD_ACV)
LEFT JOIN ucbn_composante_ldap@apoprod ucl ON (ucl.COD_CMP=acv.COD_CGE)
LEFT JOIN ANNEE_UNI auv on (acn.COD_ANU_ACN = auv.COD_ANU)
WHERE
-- Les formations ne sont prise en compte qu'à partir de l'année universitaire 2017
auv.COD_ANU >= 2017
-- La source doit être uniquement FCA MANAGER pour les actions
AND ens.COD_LOG_SRC = 4
-- on filtre sur la bonne année
AND acn.COD_ANU_ACN=auv.COD_ANU
-- on s'applique à conserver que les noms d'enseignements au bon format
AND ens.COD_REF_COM_ENS like 'FCA-%'||auv.COD_ANU||'%'
-- On ne conserve que les noms d'enseignement qui sont corrects (zèle ?)
AND ens.COD_ACN_REF IS NOT NULL
-- La source doit être FCA MANAGER pour les actions OU Apogee pour certains enseignements en pur qualifiant qui sont adossés à du diplômant
AND (acn.COD_LOG_SRC = 4 OR acn.COD_LOG_SRC=2)
-- L'enseignement est en service
AND ens.TEM_EN_SVE_ENS = 1
-- L'action est en service
AND acn.TEM_EN_SVE_ACN = 1
-- quelques restrictions UNICAEN sur le nom de l'action
AND (acn.COD_REF_COM_ACN like 'FCA-%'||auv.COD_ANU or acn.COD_REF_COM_ACN like 'APO-%-'||auv.COD_ANU)
);
GRANT SELECT ON OSE_ELEMENT_PEDAGOGIQUE TO ucbn_ose;
-- ##################################
-- Vue CHEMIN Pédagogique
-- ##################################
-- MAJ 20/11/2017 : Utilisation de l'année universitaire de FCA Manager
-- MAJ 22/11/2017 : Commentaires pour mise à disposition
-- MAJ 24/11/2017 : Déversement de toutes les formations valides des années > 2017
-- ##################################
DROP VIEW OSE_CHEMIN_PEDAGOGIQUE;
CREATE VIEW OSE_CHEMIN_PEDAGOGIQUE AS
(
SELECT
CASE
-- Si le code de l'élement commence par APO et finie par une année ---> suppression pour retrouver l'étape et la VET d'origine
WHEN acn.COD_LOG_SRC=2 THEN REGEXP_REPLACE(REGEXP_REPLACE(REGEXP_REPLACE(acn.COD_REF_COM_ACN,'^APO-',''),'-'||acn.COD_ANU_ACN||'$',''),'-','_')
WHEN acn.COD_LOG_SRC=4 THEN 'FCA-ACN-'||ACN.ID
END AS Z_ETAPE_ID,
'FCA-ENS-'||ens.COD_ENS AS Z_ELEMENT_PEDAGOGIQUE_ID,
'FCA-ACN-ENS-'||acn_ens.COD_ACN||'-'||acn_ens.COD_ENS AS SOURCE_CODE,
auv.COD_ANU AS ANNEE_ID
FROM ACTION_ENSEIGNEMENT acn_ens, ACTION acn, ENSEIGNEMENT ens, ANNEE_UNI auv
WHERE
acn.COD_ANU_ACN = auv.COD_ANU
-- Les formations ne sont prise en compte qu'à partir de l'année universitaire 2017
AND auv.COD_ANU >= 2017
AND acn_ens.COD_ACN=acn.ID
AND acn_ens.COD_ENS=ens.COD_ENS
-- Filtrage sur le nom de l'enseignement (format unicaen)
AND ens.COD_REF_COM_ENS LIKE 'FCA%'||acn.COD_ANU_ACN||'%'
-- Filtrage sur le nom de l'action (format unicaen)
AND (acn.COD_REF_COM_ACN LIKE 'FCA%'||acn.COD_ANU_ACN||'%' OR acn.COD_REF_COM_ACN LIKE 'APO-%'||acn.COD_ANU_ACN )
-- La source doit être FCA MANAGER pour les actions OU Apogee pour certains enseignements en pur qualifiant qui sont adossés à du diplômant
AND (acn.COD_LOG_SRC = 4 OR acn.COD_LOG_SRC=2)
-- La source doit être uniquement FCA Manager pour les enseignements
AND ens.COD_LOG_SRC = 4
-- L'enseignement est en service
AND ens.TEM_EN_SVE_ENS = 1
-- L'action est en service
AND acn.TEM_EN_SVE_ACN = 1
);
GRANT SELECT ON OSE_CHEMIN_PEDAGOGIQUE TO ucbn_ose;
-- ##################################
-- Volume Horaire Horaire ens(seignement)
-- ##################################
-- MAJ 30/10/2017 : Changement du code source pour différencier TD/CM/TP
-- MAJ 31/10/2017 : Cumul des temps si plusieurs intervenants et enseignements affectés à plusieurs actions
-- MAJ 20/11/2017 : Utilisation de l'année universitaire de FCA Manager
-- MAJ 22/11/2017 : Commentaires pour mise à disposition
-- MAJ 28/11/2017 : Arrondi sur conversion des minutes en heures
-- ##################################
DROP VIEW OSE_VOLUME_HORAIRE_ENS;
CREATE VIEW OSE_VOLUME_HORAIRE_ENS AS (
SELECT Z_TYPE_INTERVENTION_ID, ANNEE_ID, sum(HEURES_TMP) AS HEURES, SOURCE_CODE, Z_ELEMENT_PEDAGOGIQUE_ID FROM (
SELECT
-- Définition du taux de rémunération : TD/TP/CM
CASE
-- s'il n'y a pas d'intervenant encore défini, seules des heures de TD pourront être saisie dans OSE
WHEN tx_rem.lic_trm IS NULL THEN 'TD'
-- sinon le type d'heures de cours (TP/TD/CM) est issu de FCA
ELSE tx_rem.lic_trm
END AS Z_TYPE_INTERVENTION_ID,
-- Année universitaire 'courante' de FCA Manager
acn.COD_ANU_ACN AS ANNEE_ID,
-- Heures d'enseignements
CASE
-- Sans volume horaire défini --> on met 1 heure de saisie autorisée
WHEN ens_act.NB_MIN_PREVUES IS NULL THEN 1
-- Sinon transformation des minutes en heures
ELSE round((ens_act.NB_MIN_PREVUES/60),2)
END AS HEURES_TMP,
-- Créations des codes uniques des infos pour OSE
CASE
WHEN tx_rem.lic_trm IS NULL THEN 'FCA-ENS-'||acn.COD_ANU_ACN||'-'||ens.COD_ENS||'-TD'
ELSE 'FCA-ENS-'||acn.COD_ANU_ACN||'-'||ens.COD_ENS||'-'||tx_rem.lic_trm
END AS SOURCE_CODE,
'FCA-ENS-'||ens.COD_ENS AS Z_ELEMENT_PEDAGOGIQUE_ID
FROM ENSEIGNEMENT ens
LEFT JOIN ACTION acn ON acn.ID=ens.COD_ACN_REF
LEFT JOIN ACTIVITE acv ON (acv.ID=acn.COD_ACV)
LEFT JOIN ucbn_composante_ldap@apoprod ucl ON (ucl.COD_CMP=acv.COD_CGE)
LEFT JOIN ENSEIGNEMENT_ACTEUR_INTER ens_act ON (ens_act.COD_ENS=ens.COD_ENS)
LEFT JOIN TAUX_REMUNERATION tx_rem ON (tx_rem.id=ens_act.COD_TRM)
JOIN ANNEE_UNI auv on (acn.COD_ANU_ACN = auv.COD_ANU)
WHERE
-- Les formations ne sont prise en compte qu'à partir de l'année universitaire 2017
auv.COD_ANU >= 2017
-- La source doit être FCA MANAGER pour les enseignements
AND ens.COD_LOG_SRC = 4
-- Filtrage sur l'année universitaire en cours dans FCA Manager
AND acn.COD_ANU_ACN=auv.COD_ANU
-- Filtrage sur le nom de l'enseignement
AND ens.COD_REF_COM_ENS like 'FCA-%'||acn.COD_ANU_ACN||'%'
-- L'enseignement est en service
AND ens.TEM_EN_SVE_ENS = 1
-- L'action est en service
AND acn.TEM_EN_SVE_ACN = 1)
GROUP BY Z_TYPE_INTERVENTION_ID,ANNEE_ID,SOURCE_CODE,Z_ELEMENT_PEDAGOGIQUE_ID
-- S'il n'y a pas d'intervenant, on ne remonte pas le volume horaire (ancien choix avant de forcer un nombre d'heures)
-- AND lic_trm IS NOT NULL
);
GRANT SELECT ON OSE_VOLUME_HORAIRE_ENS TO ucbn_ose;
INTERFACAGE ENTRE FCA MANAGER et OSE
-------------------------------------------------
Auteur : Jérôme Gallot (jerome.gallot@unicaen.fr)
L'importation de données de FCA Manager vers OSE s'effectue via un dblink entre les deux bases Oracle.
Les vues décrites plus bas utilisent aussi un dblink vers la base Apogee : @apoprod. Cette liaison ne sert qu'à trouver le numéro de composante Hapege depuis le numéro de composante de FCA (= N° composante Apogee)
OSE va lire des vues créées dans la base FCA Manager.
Préambule :
------------
La nomenclature des noms de formation dans FCA Manager répond à des choix propres à l'UNICAEN :
- Les actions et enseignements qualifiants sont gérés uniquement par FCA Manager et définis de la manière suivante :
- le nom d'une action est représenté ainsi : FCA-XXXXXX-ANNEE_UNIV
- le nom d'un enseignement suit la nomenclature : FCA-XXXXXX-ANNEE_UNIV-YY (Y variant de 0 à 20)
- le code source du logiciel est alors FCA Manager
- Les actions et enseignements diplômants sont intégrés depuis Apogee vers FCA:
- le nom de l'action et les enseignements sont au format APO-ETAPE-VET-ANNEE_UNIV
ANNEE_UNIV correspond par exemple à 2017 pour 2017/2018
Fca Manager peut aussi contenir des enseignements de type qualifiant qui sont rattachés à des actions diplômantes.
Les scripts SQL permettent de déverser uniquement les données des formations qualifiantes mais prennent en compte cette subtilité (notamment dans la vue OSE_CHEMIN_PEDAGOGIQUE)
Ils ont été testés avec les versions 1.10.XXX et 1.11.004 de FCA Manager
Le déversement dans OSE :
-------------------------
Il est possible si :
- des actions et des enseignements dits qualifiants ont été créés dans FCA Manager
- au moins un intervenant doit être attaché à chaque enseignement de l'action
- il n'y a pas d'obligation que les séances d'un enseignement soient déjà créées (cette contrainte sera éventuellement mise en place ultérieurement)
- s'il n'y a pas d'intervenant de défini sur un enseignement -> les heures déclarées pour OSE sont fixées à 0H (à adapter)
La vue OSE_ETAPE :
--------------------------------
Cette vue permet de déverser seulement les actions qualifiantes gérées via FCA Manager. Les actions diplômantes sont gérées par la connecteur APOGEE->OSE
les étapes créées sont uniquement en Formation continue (FC) dans OSE
La vue OSE_ELEMENT_PEDAGOGIQUE :
--------------------------------
Cette vue permet de déverser les enseignements qualifiants gérés via FCA Manager
La vue OSE_CHEMIN_PEDAGOGIQUE :
--------------------------------
Cette vue définit les relations entre les actions (étapes) et élements pédagogiques (enseignements FCA)
La vue OSE_VOLUME_HORAIRE_ENS :
--------------------------------
Cette vue permet d'associer à chaque enseignement ses volumes horaires par type d'intervention, la saisie de services dans OSE n'étant possible que si une charge existe pour l'enseignement.
ATTENTION : les volumes horaires envoyés correspondent au cumul des horaires des intervenants d'un enseignement de FCA Manager. Ce n'est donc pas le volume horaire défini sur l'enseignement qui est utilisé. (cf cours avec plusieurs intervenants pendant la même séance)
Le script FCAManager-OSE.sql crée les vues dédiées à l'outil OSE dans la base FCA Manager.
Le script FCAManager-controles.sql contient quelques requêtes notamment pour déceler des incohérences entre les vues lors des associations étapes/élèments
File added
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please to comment