Schnittstelle CampusOnline (TU Graz) zu SuperX-Modul COSTAGE http://www.superx-projekt.de/doku/costage_modul/
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.
 
 

287 lines
7.4 KiB

--Freemarker Template
<#assign dimensions = [
{"key":"400", "name":"Statustyp (CO)"},
{"key":"401", "name":"Hörerstatus (CO)"},
{"key":"30", "name":"Studienfächer"},
{"key":"35", "name":"Abschlüsse"},
{"key":"90", "name":"Fakultät/Fachbereich"}
] />
<#assign dimension_levels_man = [
{"key":"400","apnr":"a", "druck":"Studienplatz angenommen", "astat":""},
{"key":"400","apnr":"B", "druck":"Neueinschreibung", "astat":"2"},
{"key":"400","apnr":"E", "druck":"Ersteinschreibung", "astat":"1"},
{"key":"400","apnr":"I", "druck":"gemeldet", "astat":"3"},
{"key":"400","apnr":"U", "druck":"beurlaubt", "astat":"4"},
{"key":"400","apnr":"R", "druck":"Rücktritt von der Immatrikulation", "astat":""},
{"key":"400","apnr":"o", "druck":"Studium offen (noch keine Weitermeldung erfolgt)", "astat":""},
{"key":"400","apnr":"V", "druck":"Verzicht auf Studienplatz", "astat":""},
{"key":"400","apnr":"X", "druck":"geschlossen (Abschluss und/oder keine Fortsetzung möglich)", "astat":"5"},
{"key":"400","apnr":"Z", "druck":"geschlossen", "astat":"5"},
{"key":"400","apnr":"z", "druck":"wieder einzuschreiben", "astat":""}
] />
<#assign dimension_levels_dynamic = [
{"key":"401","apnr":"hoererstatus_kb", "druck":"hoererstatus_name", "astat":"", "srctable":"costage_st_hoererstatus", "astat":"", "hs":"", "struktur_c":""},
{"key":"30","apnr":"skz_key", "druck":"skz_name", "srctable":"costage_st_studienkennzahlen",
"astat":"(select distinct F.statistik_code from costage_st_studienfaecher F where F.st_stdfach_nr=costage_st_studienkennzahlen.st_stdfach_nr)",
"struktur_c":"fakultaet_key",
"hs":"unikey"},
{"key":"35","apnr":"code", "druck":"name", "srctable":"costage_st_abschlussziele_lokal",
"astat":"(select distinct F.statistik_code from costage_st_abschlussziele_amtstat F where F.st_absz_amtstat_nr=costage_st_abschlussziele_lokal.st_absz_amtstat_nr)",
"struktur_c":"(select A.kurzbezeichnung from costage_st_abschlussziele_amtstat F, costage_st_studienarten A where F.st_absz_amtstat_nr=costage_st_abschlussziele_lokal.st_absz_amtstat_nr and A.st_std_art_nr=F.st_std_art_nr)",
"hs":""},
{"key":"90","apnr":"fakultaet_key", "druck":"fakultaet_bezeichnung", "srctable":"costage_st_fakultaeten",
"astat":"",
"struktur_c":"",
"hs":"unikey"}
] />
create temp table tmp_cifx
(tid serial,
key smallint not null ,
hs integer not null,
apnr varchar(255) ,
kurz char(10),
druck varchar(200),
lang_1 char(255),
astat char(10) ,
parent varchar(255) ,
uniquename VARCHAR(255) ,
bund_apnr CHAR(10) ,
sort1 integer,
sortc1 char(10),
d_akt_von date,
d_akt_bis date,
sourcesystem_id varchar(255),
sourcesystem integer,
lid varchar(255) ,
parent_lid varchar(255),
hiskey_id varchar(255),
struktur_c CHAR(50)
);
create temp table tmp_hilf(tid integer);
insert into tmp_hilf(tid) select max(tid) from cifx;
<#foreach dimension in dimensions>
<#foreach dimension_level in dimension_levels_man>
<#if dimension_level.key==dimension.key >
insert into tmp_cifx
(
key ,
hs,
apnr ,
kurz ,
druck,
lang_1 ,
astat,
uniquename ,
d_akt_von ,
d_akt_bis ,
sourcesystem_id ,
sourcesystem,
lid ,
--parent_lid,
hiskey_id ,
struktur_c
)
select
${dimension_level.key} ,
0 as hs,
'${dimension_level.apnr}' ,
substring('${dimension_level.druck}' from 1 for 10) as kurz ,
substring('${dimension_level.druck}' from 1 for 200) as druck,
substring('${dimension_level.druck}' from 1 for 255) as lang_1 ,
<#if dimension_level.astat=="">
NULL::char(10)
<#else>
'${dimension_level.astat}'
</#if> as astat,
'${dimension_level.apnr}' as uniquename ,
date_val('01.01.1900') as d_akt_von ,
date_val('01.01.3000')d_akt_bis ,
'${dimension_level.apnr}' as sourcesystem_id ,
15 as sourcesystem,
'${dimension_level.apnr}' as lid ,
--parent_lid,
NULL::char(10) as hiskey_id ,
NULL::char(10) as struktur_c
from xdummy
;
</#if>
</#foreach>
<#foreach dimension_level in dimension_levels_dynamic>
<#if dimension_level.key==dimension.key >
insert into tmp_cifx
(
key ,
hs,
apnr ,
kurz ,
druck,
lang_1 ,
astat,
uniquename ,
d_akt_von ,
d_akt_bis ,
sourcesystem_id ,
sourcesystem,
lid ,
--parent_lid,
hiskey_id ,
struktur_c
)
select distinct
${dimension_level.key} ,
0 as hs,
${dimension_level.apnr} ,
substring(${dimension_level.druck} from 1 for 10) as kurz ,
substring(${dimension_level.druck} from 1 for 200) as druck,
substring(${dimension_level.druck} from 1 for 255) as lang_1 ,
<#if dimension_level.astat=="">
NULL::char(10)
<#else>
${dimension_level.astat}
</#if> as astat,
${dimension_level.apnr} as uniquename ,
date_val('01.01.1900') as d_akt_von ,
date_val('01.01.3000')d_akt_bis ,
${dimension_level.apnr} as sourcesystem_id ,
15 as sourcesystem,
${dimension_level.apnr} as lid ,
--parent_lid,
NULL::char(10) as hiskey_id ,
<#if dimension_level.struktur_c=="">
NULL::char(10)
<#else>
${dimension_level.struktur_c}
</#if> as struktur_c
from ${dimension_level.srctable}
<#if dimension_level.hs!="">
where ${dimension_level.hs}=(select hs_nr::char(4) from hochschulinfo)
</#if>
;
</#if>
</#foreach>
</#foreach>
--Duplikate raus:
select T.key,T.apnr
from tmp_cifx T
group by 1,2
having count(*)>1;
--Künstliche Schlüssel aus CO:
--vorh. Datensätze ändern:
update cifx set hs=T.hs ,
apnr=T.apnr ,
d_akt_von=T.d_akt_von ,
d_akt_bis=T.d_akt_bis ,
kurz=T.kurz ,
druck=T.druck ,
lang_1=T.lang_1 ,
parent=T.parent ,
astat=T.astat ,
hiskey_id=T.hiskey_id ,
uniquename=T.uniquename ,
sort1=T.sort1 ,
sortc1=T.sortc1 ,
sourcesystem=T.sourcesystem ,
sourcesystem_id=T.sourcesystem_id ,
struktur_c=T.struktur_c ,
lid=T.lid ,
parent_lid=T.parent_lid
from tmp_cifx T
where T.key=cifx.key
and T.apnr=cifx.apnr
and T.sourcesystem=cifx.sourcesystem;
delete from tmp_cifx where (key,apnr)
in (select key,apnr
from cifx);
--neue Datensätze:
insert into cifx
(tid ,
hs,
key,
apnr,
d_akt_von,
d_akt_bis,
kurz,
druck,
lang_1,
parent,
astat,
hiskey_id,
uniquename,
sort1,
sortc1,
sourcesystem,
sourcesystem_id,
struktur_c,
lid,
parent_lid
)
select T.tid+H.tid as tid,
hs,
key,
apnr,
d_akt_von,
d_akt_bis,
kurz,
druck,
lang_1,
parent,
astat,
hiskey_id,
uniquename,
sort1,
sortc1,
sourcesystem,
sourcesystem_id,
struktur_c,
lid,
parent_lid
from tmp_cifx T, tmp_hilf H
where druck is not null
;
insert into trans_cifx(
key,
apnr,
cifx_tid,
sourcesystem,
sourcesystem_id,
systeminfo_id)
select
T.key,
T.apnr,
C.tid,
T.sourcesystem,
T.sourcesystem_id,
310 as systeminfo_id
FROM tmp_cifx T, cifx C
where C.key=T.key
and T.apnr=C.apnr;
drop table tmp_cifx;
drop table tmp_hilf;