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.
 
 

557 lines
19 KiB

--freemarker template
<sqlvars>
<sqlvar name="beginn_semester"><![CDATA[
select param_val from unload_params
where param_id='COSTAGE_start_leistungen_sem';
]]>
</sqlvar>
</sqlvars>
--Leistungen mit Veranstaltung -> Semester:
SELECT
L.st_studium_nr,
S.st_studstamm_nr,
L.matrikelnummer::integer as matrikelnummer,
null::integer as studiengang_tid,
null::integer as st_studiengang_nr,
null::integer as st_studiengang_nr_tsg,
null::integer as studiengang_nr,
null::integer as fach_nr,
null::integer as st_studienstatus_nr,
null::integer as semester,
E.semester_tid as semester_veranst,
null::integer as fachsemester,
null::integer as fachsemester_tsg,
null::integer as st_studium_nr_tsg,
null::varchar(255) as unikey,
L.leistung_nr,
L.leistungstyp_nr,
L.leistungsdetailtyp_kb,
L.studienidentifikator,
L.stp_sp_nr,
L.veranstaltung_nummer,
L.veranstaltung_semester,
L.veranstaltung_titel,
L.veranstaltung_art,
L.semesterstunden,
L.unterrichtseinheiten,
L.thema_individuell,
L.pv_notenskala_nr,
L.note,
L.note_name,
L.note_zahl,
L.pv_pruef_zusatz_typen_nr,
L.note_zusatz,
L.note_zusatz_name,
L.note_positiv_flag,
L.note_negativ_flag,
L.pv_notenskala_typ_nr,
L.pv_notenskala_typ_kb,
L.pv_notenskala_typ_name,
L.credits,
date(L.leistungsdatum) as leistungsdatum,
L.anerkannt_flag,
L.zusatzleistung_flag,
L.leistungsstatus_nr,
L.leistungsstatus_map_kb,
null::char(10) as leistungsstatus_map_kb_msg,
null::float as note_msg,
2::integer as abschnitt, --provisorisch erstmal nur Hauptprüfungen
null::integer as pnr,
null::integer as leistung_nr_msg,
null::integer as st_studiengang_nr_msg,
null::varchar as studienidentifikator_esg_msg,
null::date as leistungsdatum_msg,
null::integer as semester_msg,
L.spov_abschluss as po_stp_stp_version_kb_esg_tsg_msg,
null::varchar as po_stp_stp_version_kb,
null::varchar as po_stp_stp_version_kb_tsg,
null::char(10) as studiengangs_typ_kb,
0::integer as abschlussarbeit,
null:: CHAR(10) as skz_key_abschlussarbeit,
null::VARCHAR(255) as po_stp_stp_version_kb_abschlussarbeit
into temp tmp_pruef
FROM costage_st_semester E, costage_leistungen_typen T, costage_leistungen L, costage_st_studierendenstammdaten S
where E.semester_id=L.veranstaltung_semester
and T.leistungstyp_nr=L.leistungstyp_nr
and S.matrikelnummer=L.matrikelnummer
and S.matrikelnummer in (select ST.matrikelnummer
from costage_st_studierendenstammdaten ST
where ${COSTAGE_STUDENT_FILTER})
-- TSAB/AB:
and T.kurzbezeichnung in ('AP','AAP') --Abschlussprüfung/Anerkannte Abschlussprüfung
and L.leistungsstatus_nr in (4,2) --Letztgültig/Final/gültige Leistung
--px_leistungen_status_typen_v:
--4^F^Letztgültig^Final^
--1^P^in Bearbeitung^in process^
--2^V^gültige Leistung^valid^
--3^I^ungültige Leistung^invalid^
--5^D^gelöscht^deleted^
and E.semester_tid >= ${beginn_semester}
;
--Leistungen ohne Veranstaltungssemester gehen über Prüfungsdatum:
insert into tmp_pruef
SELECT
L.st_studium_nr,
S.st_studstamm_nr,
L.matrikelnummer::integer as matrikelnummer,
null::integer as studiengang_tid,
null::integer as st_studiengang_nr,
null::integer as st_studiengang_nr_tsg,
null::integer as studiengang_nr,
null::integer as fach_nr,
null::integer as st_studienstatus_nr,
E.semester_tid as semester,
null::integer as semester_veranst,
null::integer as fachsemester,
null::integer AS fachsemester_tsg,
null::integer as st_studium_nr_tsg,
null::varchar(255) as unikey,
L.leistung_nr,
L.leistungstyp_nr,
L.leistungsdetailtyp_kb,
L.studienidentifikator,
L.stp_sp_nr,
L.veranstaltung_nummer,
L.veranstaltung_semester,
L.veranstaltung_titel,
L.veranstaltung_art,
L.semesterstunden,
L.unterrichtseinheiten,
L.thema_individuell,
L.pv_notenskala_nr,
L.note,
L.note_name,
L.note_zahl,
L.pv_pruef_zusatz_typen_nr,
L.note_zusatz,
L.note_zusatz_name,
L.note_positiv_flag,
L.note_negativ_flag,
L.pv_notenskala_typ_nr,
L.pv_notenskala_typ_kb,
L.pv_notenskala_typ_name,
L.credits,
date(L.leistungsdatum) as leistungsdatum,
L.anerkannt_flag,
L.zusatzleistung_flag,
L.leistungsstatus_nr,
L.leistungsstatus_map_kb,
null::char(10) as leistungsstatus_map_kb_msg,
null::float as note_msg,
2::integer as abschnitt, --provisorisch erstmal nur Hauptprüfungen
null::integer as pnr,
null::integer as leistung_nr_msg,
null::integer as st_studiengang_nr_msg,
null::varchar as studienidentifikator_esg_msg,
null::date as leistungsdatum_msg,
null::integer as semester_msg,
L.spov_abschluss as po_stp_stp_version_kb_esg_tsg_msg,
null::Varchar as po_stp_stp_version_kb,
null::varchar as po_stp_stp_version_kb_tsg,
null::char(10) as studiengangs_typ_kb,
0::integer as abschlussarbeit,
null:: CHAR(10) as skz_key_abschlussarbeit,
null::VARCHAR(255) as po_stp_stp_version_kb_abschlussarbeit
FROM costage_st_semester E, costage_leistungen_typen T, costage_leistungen L, costage_st_studierendenstammdaten S
where L.leistungsdatum between E.semester_anfang and E.semester_ende
and L.veranstaltung_semester is null
and T.leistungstyp_nr=L.leistungstyp_nr
and S.matrikelnummer=L.matrikelnummer
and S.matrikelnummer in (select ST.matrikelnummer
from costage_st_studierendenstammdaten ST
where ${COSTAGE_STUDENT_FILTER})
-- TSAB/AB:
and T.kurzbezeichnung in ('AP','AAP') --Abschlussprüfung/Anerkannte Abschlussprüfung
and L.leistungsstatus_nr in (4,2) --Letztgültig/Final/gültige Leistung
and E.semester_tid >= ${beginn_semester}
;
update tmp_pruef set semester=E.semester_tid
FROM costage_st_semester E
where tmp_pruef.leistungsdatum between E.semester_anfang and E.semester_ende
and tmp_pruef.semester is null;
update tmp_pruef set semester_veranst=semester
where semester_veranst is null;
update tmp_pruef set st_studiengang_nr=S.st_studiengang_nr
from costage_st_studien S
where S.st_studium_nr=tmp_pruef.st_studium_nr
and S.st_studstamm_nr=tmp_pruef.st_studstamm_nr
and tmp_pruef.leistungsdetailtyp_kb!='TSAB'
;
update tmp_pruef set st_studiengang_nr_tsg=S.st_studiengang_nr,
st_studium_nr_tsg=S.st_studium_nr
from costage_st_studien S
where S.st_studium_nr=tmp_pruef.st_studium_nr
and S.st_studstamm_nr=tmp_pruef.st_studstamm_nr
and tmp_pruef.leistungsdetailtyp_kb='TSAB'
;
--studiengangs_typ_kb ermitteln:
update tmp_pruef set studiengangs_typ_kb=G.studiengangs_typ_kb
from costage_st_studiengaenge G
where G.st_studiengang_nr=tmp_pruef.st_studiengang_nr;
update tmp_pruef set studiengangs_typ_kb=G.studiengangs_typ_kb
from costage_st_studiengaenge G
where G.st_studiengang_nr=tmp_pruef.st_studiengang_nr_tsg;
--bei TSG die Nr. des pers. Studiums zuweisen, in dem die Abschlussarbeit war:
update tmp_pruef set abschlussarbeit=1
from costage_leistungen L
where L.leistungsdetailtyp_kb='BAKARBN'
and tmp_pruef.st_studium_nr_tsg=L.abs_fach_st_studium_nr
and tmp_pruef.studiengangs_typ_kb='TSG'
and tmp_pruef.leistungsdetailtyp_kb='TSAB'
;
--Studiengangs-TID ermitteln:
update tmp_pruef set studiengang_tid=D.tid
from costage_dim_studiengang D
where D.st_studiengang_nr=tmp_pruef.st_studiengang_nr
and tmp_pruef.leistungsdetailtyp_kb!='TSAB';
update tmp_pruef set studiengang_tid=D.tid
from costage_dim_studiengang D
where D.st_studiengang_nr=tmp_pruef.st_studiengang_nr_tsg
and tmp_pruef.leistungsdetailtyp_kb='TSAB';
--Fachsemester aus Sem. des Prüfungsdatums holen:
update tmp_pruef set
fachsemester = S.fachsemester
from costage_st_studien_aggr S
where S.semester=tmp_pruef.semester
and S.st_studium_nr=tmp_pruef.st_studium_nr
and S.matrikelnummer=tmp_pruef.matrikelnummer
;
update tmp_pruef set
fachsemester_tsg = S.fachsemester
from costage_st_studien_aggr S
where S.semester=tmp_pruef.semester
and S.st_studium_nr_tsg=tmp_pruef.st_studium_nr
and S.matrikelnummer=tmp_pruef.matrikelnummer
and leistungsdetailtyp_kb ='TSAB'
;
--bei TSAB die Nr. des persönlichen Studiums aus dem Studienverlauf holen:
update tmp_pruef set st_studium_nr=S.st_studium_nr,
st_studiengang_nr=S.st_studiengang_nr,
studienidentifikator=S.studiengangs_identifikator
from costage_st_studien_aggr S
where S.semester=tmp_pruef.semester
and S.st_studiengang_nr_tsg=tmp_pruef.st_studiengang_nr_tsg
and S.matrikelnummer=tmp_pruef.matrikelnummer
and leistungsdetailtyp_kb ='TSAB'
;
--Prüfung kann nach letztem eingeschr. Semester sein, daher zuerst letztes Sem. ermitteln:
select S.st_studium_nr,
S.matrikelnummer,
null::integer as st_studienstatus_nr,
null::integer as studiengang_nr,
null::integer as fach_nr,
null::char(10) as unikey,
null::integer as st_studiengang_nr_msg,
max(S.semester) as semester
into temp tmp_max_sem
from costage_st_studien_aggr S, tmp_pruef P
where S.st_studium_nr=P.st_studium_nr
and S.matrikelnummer=P.matrikelnummer
group by 1,2
;
--Dann Studium vom letzten Semester in den Prüfungs-Datensatz schreiben:
--TODO langsam:
update tmp_pruef set
st_studienstatus_nr=S.st_studienstatus_nr,
--fachsemester = S.fachsemester, --wird oben ermittelt, ab 0.6 nicht mehr aus letztem Studiums-Semester
studiengang_nr=S.studiengang_nr,
st_studiengang_nr=S.st_studiengang_nr,
st_studiengang_nr_tsg=S.st_studiengang_nr_tsg,
fach_nr=S.fach_nr,
unikey=S.unikey
from tmp_max_sem M, costage_st_studien_aggr S
where S.matrikelnummer=M.matrikelnummer
and S.st_studium_nr=M.st_studium_nr
and S.semester=M.semester
and S.st_studium_nr_tsg=tmp_pruef.st_studium_nr
and S.matrikelnummer=tmp_pruef.matrikelnummer
and leistungsdetailtyp_kb ='TSAB'
;
update tmp_pruef set
st_studienstatus_nr=S.st_studienstatus_nr,
--fachsemester = S.fachsemester, --wird oben ermittelt, ab 0.6 nicht mehr aus letztem Studiums-Semester
studiengang_nr=S.studiengang_nr,
st_studiengang_nr=S.st_studiengang_nr,
fach_nr=S.fach_nr --,
--unikey=S.unikey
from tmp_max_sem M, costage_st_studien_aggr S
where S.matrikelnummer=M.matrikelnummer
and S.st_studium_nr=M.st_studium_nr
and S.semester=M.semester
and S.st_studium_nr=tmp_pruef.st_studium_nr
and S.matrikelnummer=tmp_pruef.matrikelnummer
and leistungsdetailtyp_kb !='TSAB'
;
--TODO: bei MSG leer, bei EST und TSG gefüllt
drop table tmp_max_sem;
--MSG-Daten nachladen:
--zuerst Kopie nur mit MSG:
select * into temp tmp_pruef2
from tmp_pruef
where leistungsdetailtyp_kb !='TSAB'
;
--Dann Nr., Datum, Note und Semester des MSG nachladen (TODO: ggf. noch Fachsemester?)
update tmp_pruef set leistung_nr_msg=T.leistung_nr,
leistungsdatum_msg=T.leistungsdatum,
semester_msg=T.semester,
leistungsstatus_map_kb_msg=T.leistungsstatus_map_kb,
note_msg=(case when T.pv_notenskala_typ_kb in ('DE1','DE2','DE3','DE4','DE5','DE6','DE7') or T.pv_notenskala_typ_kb is null then T.note_zahl else null::float end),
studienidentifikator_esg_msg=T.studienidentifikator,
st_studium_nr=T.st_studium_nr,
po_stp_stp_version_kb=T.po_stp_stp_version_kb_esg_tsg_msg
from tmp_pruef2 T
where tmp_pruef.st_studiengang_nr=T.st_studiengang_nr
and tmp_pruef.leistungsdetailtyp_kb ='TSAB'
and T.matrikelnummer=tmp_pruef.matrikelnummer
;
--Fallback wenn der MSG bei TSG nicht gefunden wird, weil der MSG gewechselt hat oder der TSG im jew. Semester der Prüfung geschlossen wurde:
--nach allen verfügbaren MSG gehen
update tmp_pruef set leistung_nr_msg=T.leistung_nr,
leistungsdatum_msg=T.leistungsdatum,
semester_msg=T.semester,
leistungsstatus_map_kb_msg=T.leistungsstatus_map_kb,
note_msg=(case when T.pv_notenskala_typ_kb in ('DE1','DE2','DE3','DE4','DE5','DE6','DE7') or T.pv_notenskala_typ_kb is null then T.note_zahl else null::float end),
studienidentifikator_esg_msg=T.studienidentifikator,
st_studium_nr=T.st_studium_nr,
po_stp_stp_version_kb=T.po_stp_stp_version_kb_esg_tsg_msg
from tmp_pruef2 T, costage_st_studiengaenge_mtsg M
where tmp_pruef.st_studiengang_nr_tsg=M.st_studiengang_nr_tsg
and M.st_studiengang_nr_msg=T.st_studiengang_nr
and tmp_pruef.leistungsdetailtyp_kb ='TSAB'
and tmp_pruef.leistung_nr_msg is null
and T.matrikelnummer=tmp_pruef.matrikelnummer
;
--Leistungsdatum determiniert Semester auch bei MSG:
-- update tmp_pruef set semester=E.semester_tid
-- FROM costage_st_semester E
-- where tmp_pruef.leistungsdatum_msg between E.semester_anfang and E.semester_ende
-- and tmp_pruef.leistungsdetailtyp_kb !='TSAB'
-- and tmp_pruef.leistungsdatum_msg is not null;
update tmp_pruef set leistung_nr_msg=leistung_nr,
leistungsdatum_msg=leistungsdatum,
semester_msg=semester,
leistungsstatus_map_kb_msg=leistungsstatus_map_kb,
studienidentifikator_esg_msg=studienidentifikator
where tmp_pruef.leistungsdetailtyp_kb !='TSAB'
;
--Fachsemester bei MSG gibt es in CO nicht. Daher die Regel:
--die Fachsemesterzahl sollte die höchste FS-Zahl aus allen TSG enthalten:
select matrikelnummer,st_studiengang_nr,max(semester) as semester_max,max(fachsemester_tsg) as fachsem_max
into temp tmp_fachsem_msg
from tmp_pruef
where leistungsdetailtyp_kb='TSAB'
and st_studiengang_nr is not null
group by 1,2;
update tmp_pruef set fachsemester=T.fachsem_max
from tmp_fachsem_msg T
where T.matrikelnummer=tmp_pruef.matrikelnummer
and T.st_studiengang_nr=tmp_pruef.st_studiengang_nr
and T.semester_max <=tmp_pruef.semester
and tmp_pruef.leistungsdetailtyp_kb='BAKN'
;
update tmp_pruef set fachsemester=T.fachsem_max
from tmp_fachsem_msg T
where T.matrikelnummer=tmp_pruef.matrikelnummer
and T.st_studiengang_nr=tmp_pruef.st_studiengang_nr
and T.semester_max >=tmp_pruef.semester
and tmp_pruef.leistungsdetailtyp_kb='TSAB'
;
drop table tmp_fachsem_msg;
--unikey setzen, wenn noch nicht vorhanden (z.B. bei MSG):
update tmp_pruef set unikey=K.unikey
from costage_st_studiengaenge G, costage_st_studienkennzahlen K
where G.st_studiengang_nr=tmp_pruef.st_studiengang_nr
and K.st_skz_nr=G.st_skz_nr
and tmp_pruef.unikey is null
;
--Nun bei TSG:
update tmp_pruef set unikey=K.unikey
from costage_st_studiengaenge G, costage_st_studienkennzahlen K
where G.st_studiengang_nr=tmp_pruef.st_studiengang_nr_tsg
and K.st_skz_nr=G.st_skz_nr
and tmp_pruef.unikey is null
;
--MSG Prüfungen können keine Fachnr. haben, daher entfernen:
update tmp_pruef set fach_nr=null
where tmp_pruef.leistungsdetailtyp_kb!='TSAB'
and exists (select G.st_studiengang_nr
from costage_st_studiengaenge G
where G.st_studiengang_nr=tmp_pruef.st_studiengang_nr
and G.studiengangs_typ_kb='MSG')
;
--bei MSG das Fach und SPO-Version der abschlussarbeit ermitteln:
--zuerst Kopie nur mit TSG der Abschlussarbeit:
select * into temp tmp_pruef3
from tmp_pruef
where leistungsdetailtyp_kb ='TSAB'
and abschlussarbeit=1
;
create index tmp_ix_123 on tmp_pruef3(studiengang_tid);
create index tmp_ix_1234 on tmp_pruef3(st_studium_nr);
update tmp_pruef set skz_key_abschlussarbeit=G.skz_key,
po_stp_stp_version_kb_abschlussarbeit=T.po_stp_stp_version_kb
from tmp_pruef3 T, costage_dim_studiengang G
where G.tid=T.studiengang_tid
and T.st_studium_nr=tmp_pruef.st_studium_nr
and tmp_pruef.studiengangs_typ_kb='MSG'
;
delete from costage_st_pruef_aggr
where semester >= ${beginn_semester}
or semester_tsg >= ${beginn_semester};
insert into costage_st_pruef_aggr(st_studium_nr,
st_studium_nr_tsg,
st_studstamm_nr,
matrikelnummer,
semester,
semester_tsg,
semester_veranst,
studiengang_tid,
st_studiengang_nr,
st_studiengang_nr_tsg,
studiengang_nr,
studiengangs_typ_kb,
fach_nr,
unikey,
studienidentifikator,
studienidentifikator_tsg,
fachsemester,
fachsemester_tsg,
leistungstyp_nr,
leistungsdetailtyp_kb,
pnr,
abschnitt,
stp_sp_nr,
po_stp_stp_version_kb,
po_stp_stp_version_kb_tsg,
note,
note_tsg,
credits,
anerkannt_flag,
leistungsstatus_nr,
leistungsstatus_map_kb,
leistungsstatus_map_kb_tsg,
leistung_nr,
leistung_nr_tsg,
leistungsdatum,
leistungsdatum_tsg,
skz_key_abschlussarbeit,
po_stp_stp_version_kb_abschlussarbeit,
summe)
select
st_studium_nr,
st_studium_nr_tsg,
st_studstamm_nr,
matrikelnummer,
(case when leistungsdetailtyp_kb='TSAB' then semester_msg
else semester end) as semester ,
(case when leistungsdetailtyp_kb='TSAB' then semester
else null::integer end) as semester_tsg ,
semester_veranst,
studiengang_tid,
st_studiengang_nr,
st_studiengang_nr_tsg,
studiengang_nr,
studiengangs_typ_kb,
fach_nr,
unikey,
substring(studienidentifikator_esg_msg from 1 for 255) as studienidentifikator,
(case when leistungsdetailtyp_kb='TSAB' then substring(studienidentifikator from 1 for 255)
else null::varchar(255) end) as studienidentifikator_tsg,
fachsemester,
fachsemester_tsg,
leistungstyp_nr,
leistungsdetailtyp_kb,
pnr,
abschnitt,
stp_sp_nr,
(case when leistungsdetailtyp_kb='TSAB' then po_stp_stp_version_kb else po_stp_stp_version_kb_esg_tsg_msg end) as po_stp_stp_version_kb,
(case when leistungsdetailtyp_kb='TSAB' then po_stp_stp_version_kb_esg_tsg_msg
else null::varchar end) as po_stp_stp_version_kb_tsg ,
(case when leistungsdetailtyp_kb='TSAB' then note_msg
else (
case when pv_notenskala_typ_kb in ('DE1','DE2','DE3','DE4','DE5','DE6','DE7')
or pv_notenskala_typ_kb is null
then note_zahl else null::float end) end) as note,
(case when leistungsdetailtyp_kb='TSAB' and (pv_notenskala_typ_kb in ('DE1','DE2','DE3','DE4','DE5','DE6','DE7')
or pv_notenskala_typ_kb is null)
then note_zahl else null::float end) as note_tsg,
credits,
anerkannt_flag,
leistungsstatus_nr,
(case when leistungsdetailtyp_kb='TSAB' then leistungsstatus_map_kb_msg
else leistungsstatus_map_kb end) as leistungsstatus_map_kb,
(case when leistungsdetailtyp_kb='TSAB' then leistungsstatus_map_kb
else null::char(10) end) as leistungsstatus_map_kb_tsg,
(case when leistungsdetailtyp_kb='TSAB' then leistung_nr_msg
else leistung_nr end) as leistung_nr,
(case when leistungsdetailtyp_kb='TSAB' then leistung_nr
else null::integer end) as leistung_nr_tsg,
(case when leistungsdetailtyp_kb='TSAB' then leistungsdatum_msg
else leistungsdatum end) as leistungsdatum ,
(case when leistungsdetailtyp_kb='TSAB' then leistungsdatum
else null::date end) as leistungsdatum_tsg ,
skz_key_abschlussarbeit,
po_stp_stp_version_kb_abschlussarbeit,
1 as summe
from tmp_pruef
--group by leistungsdatum,studiengangs_typ_kb,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30
;
--TSG Daten nachtragen:
update costage_st_pruef_aggr set
studiengang_nr=S.studiengang_nr,
st_studiengang_nr=S.st_studiengang_nr,
st_studiengang_nr_tsg=S.st_studiengang_nr_tsg,
--fach_nr=S.fach_nr,
unikey=S.unikey,
fachsemester_tsg=S.fachsemester
from costage_st_studien_aggr S
where 1=1
and S.st_studium_nr_tsg=costage_st_pruef_aggr.st_studium_nr_tsg
and S.matrikelnummer=costage_st_pruef_aggr.matrikelnummer
and costage_st_pruef_aggr.leistungsdetailtyp_kb ='TSAB'
and costage_st_pruef_aggr.semester_tsg=S.semester
;
drop table tmp_pruef;
drop table tmp_pruef2;
drop table tmp_pruef3;