diff --git a/src-modules/module/costage/conf/costage.xml b/src-modules/module/costage/conf/costage.xml index b4cd4ab..dfc3d7e 100644 --- a/src-modules/module/costage/conf/costage.xml +++ b/src-modules/module/costage/conf/costage.xml @@ -1,5 +1,5 @@ - @@ -428,7 +428,13 @@ rightname="CS_BIA_STANDARDREPORTS_ADMIN[CO]" /> - + + + + + + + @@ -487,15 +493,14 @@ rightname="CS_BIA_STANDARDREPORTS_ADMIN[CO]" /> - - +an der eigenen Hochschule + - - + Lookup via: st_sem_nr - costage_st_personen_abmeldungen.st_studstamm_nr/st_sem_nr - costage_st_semester.semester_tid / costage_st_personen_abmeldungen.person_flag='J' @@ -588,10 +593,11 @@ rightname="CS_BIA_STANDARDREPORTS_ADMIN[CO]" /> - + + - - + + @@ -602,19 +608,15 @@ rightname="CS_BIA_STANDARDREPORTS_ADMIN[CO]" /> - - - Lookup via: st_studium_nr/st_sem_nr - costage_st_personen_abmeldungen.st_studium_nr/st_sem_nr - costage_st_semester.semester_tid / costage_st_abmeldungsarten.bezug='P' - - + Lookup via: st_studium_nr/st_sem_nr - costage_st_personen_abmeldungen.st_studium_nr/st_sem_nr - costage_st_semester.semester_tid / costage_st_abmeldungsarten.bezug='S' - + Lookup via: st_studium_nr/st_sem_nr - costage_st_personen_abmeldungen.st_studium_nr/st_sem_nr - costage_st_semester.semester_tid / costage_st_abmeldungsarten.bezug='S' - + Lookup via: st_studium_nr/st_sem_nr - costage_st_urlaube.st_studium_nr/st_sem_nr @@ -670,7 +672,7 @@ rightname="CS_BIA_STANDARDREPORTS_ADMIN[CO]" /> - + des Prüfungsdatums @@ -790,7 +792,7 @@ rightname="CS_BIA_STANDARDREPORTS_ADMIN[CO]" /> - + @@ -801,7 +803,7 @@ rightname="CS_BIA_STANDARDREPORTS_ADMIN[CO]" /> - +J=Gültig, S=Storno,U=ungültig @@ -874,6 +876,8 @@ rightname="CS_BIA_STANDARDREPORTS_ADMIN[CO]" /> + + @@ -1910,6 +1914,11 @@ parent="CO Basisdaten">Abfragen zu Studienplänen und Ordnungen displayType="select" visibleFields="name" format="%s"> + + + + @@ -2009,7 +2018,8 @@ parent="CO Basisdaten">Abfragen zu Studienplänen und Ordnungen - + + diff --git a/src-modules/module/costage/datentabellen/trans_costage_st_studierendenstammdaten.sql b/src-modules/module/costage/datentabellen/trans_costage_st_studierendenstammdaten.sql index 2b3b869..5aecf75 100644 --- a/src-modules/module/costage/datentabellen/trans_costage_st_studierendenstammdaten.sql +++ b/src-modules/module/costage/datentabellen/trans_costage_st_studierendenstammdaten.sql @@ -17,7 +17,6 @@ geschlecht INTEGER , d_geburt DATE , ca12_staat INTEGER , second_nationality INTEGER , -d_exmatr DATE , abm_art_p char(10), semester_max INTEGER ) @@ -29,7 +28,7 @@ into temp tmp_max from costage_st_studierendenstammdaten_neu S, costage_st_studien ST, costage_st_semester SM, - costage_st_studienstatus SA + costage_st_studienstatus_neu SA where S.st_studstamm_nr = ST.st_studstamm_nr and SA.st_studium_nr=ST.st_studium_nr and SA.st_sem_nr=SM.st_sem_nr @@ -58,7 +57,6 @@ insert into tmp_st_studierendenstammdaten( -- ca12_staat, -- second_nationality, d_geburt, --- d_exmatr, semester_max) select S.st_studstamm_nr, @@ -82,11 +80,11 @@ M.semester_max FROM costage_st_laender L, costage_st_studierendenstammdaten_neu S left outer join tmp_max M on (M.st_studstamm_nr=S.st_studstamm_nr) where L.st_land_nr=S.st_land1_nr -and S.matrikelnummer is not null +--and S.matrikelnummer is not null ; - --TODO: statt semesterende das tatsächliche Abmeldungsdatum -update tmp_st_studierendenstammdaten set d_exmatr=date(S.semester_ende), + +update tmp_st_studierendenstammdaten set abm_art_p=A.st_abm_art_kurzbezeichnung from costage_st_personen_abmeldungen A,costage_st_semester S where A.st_sem_nr=S.st_sem_nr @@ -124,7 +122,6 @@ insert into costage_st_studierendenstammdaten( ca12_staat, second_nationality, d_geburt, - d_exmatr, abm_art_p, semester_max) select @@ -144,7 +141,6 @@ st_studstamm_nr, ca12_staat, second_nationality, d_geburt, - d_exmatr, abm_art_p, semester_max FROM tmp_st_studierendenstammdaten diff --git a/src-modules/module/costage/gang_costage_unload.xml b/src-modules/module/costage/gang_costage_unload.xml new file mode 100644 index 0000000..4dfe79f --- /dev/null +++ b/src-modules/module/costage/gang_costage_unload.xml @@ -0,0 +1,81 @@ + + +MSG-Modul + + +Ab welchem Semester sollen Prüfungen entladen werden? z.B. 20021 für SS 2002 + + + + + + + + +Verzeichnis der Abschlussprüfungen (CO). + += $start_pruef_sem or P.semester_tsg >= $start_pruef_sem) +; + + +]]> + + + + + + diff --git a/src-modules/module/costage/hilfstabellen/costage_bw_antr_aggr_fuellen.sql b/src-modules/module/costage/hilfstabellen/costage_bw_antr_aggr_fuellen.sql index d6e143a..5095ab2 100644 --- a/src-modules/module/costage/hilfstabellen/costage_bw_antr_aggr_fuellen.sql +++ b/src-modules/module/costage/hilfstabellen/costage_bw_antr_aggr_fuellen.sql @@ -6,6 +6,7 @@ SELECT nr, wert, name FROM costage_bw_sb_status_werte +order by bw_sb_stat_nr ; @@ -64,7 +66,7 @@ null::DATE as hzb_datum , null::FLOAT as hzb_note , null::INTEGER as hzb_ort , null::INTEGER as hzb_staat , -null::INTEGER as hzb_st_land_nr +null::INTEGER as hzb_st_land_nr into temp tmp_bew FROM costage_st_semester E, costage_bw_bewerbungen B @@ -75,18 +77,32 @@ where E.st_sem_nr=B.st_sem_nr --and B.st_studstamm_nr=1186303 and E.semester_tid >= ${beginn_semester} ; ---klappt nicht weil nicht eindeutig: --- update tmp_bew set bw_bewerbng_nr_msg=K.bw_bewrbng_nr --- from costage_bw_bewerbung_kombination K --- where K.bw_bewrbng_nr_teil=tmp_bew.nr --- and tmp_bew.bw_typ_kb='TBW' --- ; --- update tmp_bew set st_studiengang_nr_msg=B.st_studiengang_nr --- from costage_bw_bewerbungen B --- where B.nr=tmp_bew.bw_bewerbng_nr_msg --- and tmp_bew.bw_typ_kb='TBW' --- ; +--MSG und fach_nr ermitteln: +update tmp_bew T set bw_bewerbng_nr_msg=K.bw_bewrbng_nr + from costage_bw_bewerbung_kombination K,costage_bw_bewerbungen B + where B.nr=K.bw_bewrbng_nr + and B.st_studstamm_nr=T.st_studstamm_nr + and B.st_sem_nr=T.st_sem_nr + and B.bw_typ_kb='MBW' + and K.bw_bewrbng_nr_teil=T.nr + and T.bw_typ_kb='TBW' + ; + +update tmp_bew set st_studiengang_nr_msg=B.st_studiengang_nr +from costage_bw_bewerbungen B +where B.nr=tmp_bew.bw_bewerbng_nr_msg + and tmp_bew.bw_typ_kb='TBW' + ; + +update tmp_bew T set fach_nr=MTSG.studienfach_sortierung +from costage_st_studiengaenge_mtsg MTSG +where T.st_studiengang_nr=MTSG.st_studiengang_nr_tsg +and T.st_studiengang_nr_msg=MTSG.st_studiengang_nr_msg + and T.bw_typ_kb='TBW' + ; +update tmp_bew set fach_nr=1 where bw_typ_kb='EBW'; + update tmp_bew set unikey=K.unikey from costage_st_studiengaenge G, costage_st_studienkennzahlen K @@ -102,11 +118,6 @@ where F.nr=tmp_bew.st_studfrm_nr <#foreach bw_status in bw_stati> <#foreach wert in status_werte> <#if bw_status.nr == wert.bw_sb_stat_nr> --- update tmp_bew set status_${bw_status.kb}=S.wert --- from costage_bw_bewerb_sb_status S --- where tmp_bew.nr=S.bw_bewerbng_nr --- and S.bw_sb_stat_nr =${bw_status.nr} --- ; update tmp_bew set status_${bw_status.kb}='${wert.wert}' where exists (select S.bw_bewerbng_nr @@ -115,14 +126,6 @@ where tmp_bew.nr=S.bw_bewerbng_nr and S.bw_sb_stat_nr =${bw_status.nr} and S.wert='${wert.wert}') ; - - --- update tmp_bew set status_msg_${bw_status.kb}=S.wert --- from costage_bw_bewerb_sb_status S --- where tmp_bew.bw_bewerbng_nr_msg=S.bw_bewerbng_nr --- and S.bw_sb_stat_nr =${bw_status.nr} --- ; - --Zum Zeitpunkt der Einschreibung/Annahme muss der Status aus dem MSG kommen. --Die Zuordnung zum MSG ist aber nicht eindeutig. Beispiel Testfall hat in dem TSG Philosophie --zwei mögliche MBW-Kombinationen. Daher mit exists abfragen, ob mind. ein MBW den jew. Status=J hat: @@ -136,7 +139,19 @@ and K.bw_bewrbng_nr=S.bw_bewerbng_nr and S.bw_sb_stat_nr =${bw_status.nr} and S.wert='${wert.wert}') and bw_typ_kb='TBW' +and (status_msg_${bw_status.kb} is null or status_msg_${bw_status.kb} !='J') ; +--J hat immer höchste Prio: +update tmp_bew set status_msg_${bw_status.kb}='J' +where exists (select S.bw_bewerbng_nr +from costage_bw_bewerb_sb_status S, costage_bw_bewerbung_kombination K +where bw_bewrbng_nr_teil=tmp_bew.nr +and K.bw_bewrbng_nr=S.bw_bewerbng_nr +and S.bw_sb_stat_nr =${bw_status.nr} +and S.wert='J') +and bw_typ_kb='TBW' +; + -- update tmp_bew set status_msg_${bw_status.kb}='J' -- where exists (select S.bw_bewerbng_nr -- from costage_bw_bewerb_sb_status S @@ -149,6 +164,9 @@ and bw_typ_kb='TBW' update tmp_bew set bew_kz='U'; +update tmp_bew set bew_kz='S' +where storniert_am is not null; + --Ermittlung Antrags Status: update tmp_bew set bew_kz='G' where @@ -168,8 +186,14 @@ update tmp_bew set status_evs='J' where status_msg_evs='J'; update tmp_bew set annahme_kz='J' where status_stpl='J' ; +<#if COSTAGE_BEW_EINSCHR_FILTER?exists> +update tmp_bew as antr set einschreib_kz='J' where ${COSTAGE_BEW_EINSCHR_FILTER} +; + +<#else> update tmp_bew set einschreib_kz='J' where status_evs='J' ; + --TODO: diff --git a/src-modules/module/costage/hilfstabellen/costage_st_pruef_aggr_fuellen.sql b/src-modules/module/costage/hilfstabellen/costage_st_pruef_aggr_fuellen.sql index 79e81f5..f4ce05d 100644 --- a/src-modules/module/costage/hilfstabellen/costage_st_pruef_aggr_fuellen.sql +++ b/src-modules/module/costage/hilfstabellen/costage_st_pruef_aggr_fuellen.sql @@ -183,6 +183,7 @@ 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=null,--hier soll der MSG rein st_studium_nr_tsg=S.st_studium_nr from costage_st_studien S where S.st_studium_nr=tmp_pruef.st_studium_nr @@ -190,6 +191,7 @@ 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 @@ -232,15 +234,17 @@ 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.st_studium_nr_tsg=tmp_pruef.st_studium_nr_tsg and S.matrikelnummer=tmp_pruef.matrikelnummer and leistungsdetailtyp_kb ='TSAB' ; ---bei TSAB die Nr. des persönlichen Studiums aus dem Studienverlauf holen: +--bei TSAB die Nr. des persönlichen Studiums und Fach-Nr. / unikey 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 +studienidentifikator=S.studiengangs_identifikator_tsg, +fach_nr=S.fach_nr, +unikey=S.unikey from costage_st_studien_aggr S where S.semester=tmp_pruef.semester and S.st_studiengang_nr_tsg=tmp_pruef.st_studiengang_nr_tsg @@ -249,6 +253,7 @@ and leistungsdetailtyp_kb ='TSAB' ; --Prüfung kann nach letztem eingeschr. Semester sein, daher zuerst letztes Sem. ermitteln: +--zuerst MSG und ESG: select S.st_studium_nr, S.matrikelnummer, null::integer as st_studienstatus_nr, @@ -261,45 +266,67 @@ 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 +and P.leistungsdetailtyp_kb !='TSAB' 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 +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.st_studium_nr=tmp_pruef.st_studium_nr and S.matrikelnummer=tmp_pruef.matrikelnummer -and leistungsdetailtyp_kb ='TSAB' +and leistungsdetailtyp_kb !='TSAB' ; +drop table tmp_max_sem; + +--jetzt TSAB: +--zuerst MSG und ESG: +select S.st_studium_nr_tsg, +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_tsg=P.st_studium_nr_tsg +and S.matrikelnummer=P.matrikelnummer +and P.leistungsdetailtyp_kb ='TSAB' +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, +st_studium_nr=S.st_studium_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 +fach_nr=S.fach_nr 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.st_studium_nr_tsg=M.st_studium_nr_tsg and S.semester=M.semester -and S.st_studium_nr=tmp_pruef.st_studium_nr +and S.st_studium_nr_tsg=tmp_pruef.st_studium_nr_tsg and S.matrikelnummer=tmp_pruef.matrikelnummer -and leistungsdetailtyp_kb !='TSAB' +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 @@ -341,6 +368,7 @@ 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 @@ -382,6 +410,33 @@ and tmp_pruef.leistungsdetailtyp_kb='TSAB' drop table tmp_fachsem_msg; +--studienidentifikator_esg_msg aus Studium nachpflegen, wenn +--der MSG noch nicht absolviert ist: + +update tmp_pruef P set studienidentifikator_esg_msg=S.studiengangs_identifikator +from costage_st_studien_aggr S +where S.matrikelnummer=P.matrikelnummer +and S.st_studium_nr_tsg=P.st_studium_nr_tsg +and S.semester=P.semester +and P.leistungsdetailtyp_kb ='TSAB' +and P.studienidentifikator_esg_msg is null +; +--teilweise kann die Leistung vor oder nach dem Studium sein, daher in 2. Prio ohne Semester: +update tmp_pruef P set studienidentifikator_esg_msg=S.studiengangs_identifikator, +st_studienstatus_nr=S.st_studienstatus_nr, +studiengang_nr=S.studiengang_nr, +st_studiengang_nr=S.st_studiengang_nr, +fach_nr=S.fach_nr --, +--semester_msg=S.semester +from costage_st_studien_aggr S +where S.matrikelnummer=P.matrikelnummer +and S.st_studium_nr_tsg=P.st_studium_nr_tsg +--and S.semester=P.semester +and P.leistungsdetailtyp_kb ='TSAB' +and P.studienidentifikator_esg_msg is null +; + + --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 @@ -430,8 +485,13 @@ and tmp_pruef.studiengangs_typ_kb='MSG' delete from costage_st_pruef_aggr -where semester >= ${beginn_semester} -or semester_tsg >= ${beginn_semester}; +where (semester >= ${beginn_semester} +or semester_tsg >= ${beginn_semester}) +--zum Testen: +--and matrikelnummer in (select ST.matrikelnummer +--from costage_st_studierendenstammdaten ST +--where ${COSTAGE_STUDENT_FILTER}) +; insert into costage_st_pruef_aggr(st_studium_nr, st_studium_nr_tsg, @@ -548,6 +608,70 @@ 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 ; + +--leere Fachsemester kommen immer noch vor, wenn die Prüfung nach oder vor dem pers. Studium war +--Daher die Regel: wenn die Prüfung vor dem ersten eingeschr. Semester war, soll +--sie das minimale Fachsemester haben, +-- wenn sie nach dem letzten eingeschr. Semester war, +--soll die Fachsemesterzahl das max. Fachsemester haben + +drop table if exists tmp_studium_sem; + +select matrikelnummer,st_studiengang_nr, +min(semester) as semester_min, +max(semester) as semester_max, +min(fachsemester) as fachsemester_min, +max(fachsemester) as fachsemester_max +into temp tmp_studium_sem +from costage_st_studien_aggr S +where S.matrikelnummer in (select distinct P.matrikelnummer +from costage_st_pruef_aggr P +where P.fachsemester is null or P.fachsemester_tsg is null) +group by 1,2 +; +--testfall: die Prüfung war 20212, +--select * from tmp_studium_sem; +--die Prüfung war nach dem letzten eingeschr. Semester: +update costage_st_pruef_aggr P +set fachsemester=T.fachsemester_max +from tmp_studium_sem T +where T.matrikelnummer=P.matrikelnummer +and T.st_studiengang_nr=P.st_studiengang_nr +and T.semester_max < P.semester +and P.st_studiengang_nr is not null +and P.fachsemester is null; +--nun TSG: +update costage_st_pruef_aggr P +set fachsemester_tsg=T.fachsemester_max +from tmp_studium_sem T +where T.matrikelnummer=P.matrikelnummer +and T.st_studiengang_nr=P.st_studiengang_nr +and T.semester_max < P.semester_tsg +and P.st_studiengang_nr is not null +and P.fachsemester_tsg is null; + +--die Prüfung war vor dem ersten eingeschr. Semester: +update costage_st_pruef_aggr P +set fachsemester=T.fachsemester_min +from tmp_studium_sem T +where T.matrikelnummer=P.matrikelnummer +and T.st_studiengang_nr=P.st_studiengang_nr +and T.semester_min > P.semester +and P.st_studiengang_nr is not null +and P.fachsemester is null; + +--TSG: +update costage_st_pruef_aggr P +set fachsemester_tsg=T.fachsemester_min +from tmp_studium_sem T +where T.matrikelnummer=P.matrikelnummer +and T.st_studiengang_nr=P.st_studiengang_nr +and T.semester_min > P.semester_tsg +and P.st_studiengang_nr is not null +and P.fachsemester_tsg is null +; + +drop table if exists tmp_studium_sem; drop table tmp_pruef; drop table tmp_pruef2; diff --git a/src-modules/module/costage/hilfstabellen/costage_st_studien_aggr_fuellen.sql b/src-modules/module/costage/hilfstabellen/costage_st_studien_aggr_fuellen.sql index 3dc0d55..0975196 100644 --- a/src-modules/module/costage/hilfstabellen/costage_st_studien_aggr_fuellen.sql +++ b/src-modules/module/costage/hilfstabellen/costage_st_studien_aggr_fuellen.sql @@ -26,7 +26,8 @@ ST.st_studiengang_nr, SG.studiengangs_typ_kb, SA.studienstatustyp, SA.st_studienstatus_nr, -SA.beginn_datum, +(case when SG.studiengangs_typ_kb in ('TSG') then date(SA.beginn_datum) else null::timestamp end) as beginn_datum_s_tsg, +SA.beginn_datum as beginn_datum_s, SA.gueltig_ab, val(S.matrikelnummer) as matrikelnummer, S.geschlecht, @@ -50,7 +51,7 @@ null::integer as fach_nr, null::char(10) as unikey, null::date as anfdat, null::date as ruebeudat, -null::date as endedat, +null::date as abm_dat_s, null::smallint as kz_rueck_beur_ein, null::smallint as kz_rueck_beur_ein_tsg, null::integer as hzb_art_nr, @@ -60,6 +61,8 @@ null::integer as hzb_jahr, null::date as hzb_datum , null::decimal(14,7) as hzb_note, null::char(10) as abm_art_s, +null::char(10) as stg_astat, +null::char(10) as abschluss_astat, rank () over (partition by SM.st_sem_nr, S.st_studstamm_nr, SG.studiengangs_identifikator order by SA.gueltig_ab desc,SA.studienstatustyp desc) as status_historie --rank () over (partition by SM.st_sem_nr, S.st_studstamm_nr, SG.studiengangs_identifikator order by (case when SA.gueltig_ab =SM.semester_ende then date_val('01.01.1900') else SA.gueltig_ab end) desc) as status_historie into temp tmp_studien @@ -104,6 +107,38 @@ and tmp_studien.st_sem_nr = H.st_sem_nr and hoererstatus_kb != 'E' --der Hörerstatus "E - Exmatrikuliert" gilt eigentlich erst zum Studienende, hat aber kein "gültig ab" Datum. Der Hörerstatus "E" kann ignoriert werden. ; +<#if K_CO_interpret_primaerflag==0> + +update tmp_studien T set stg_astat=(select F.statistik_code +from costage_st_studiengaenge G, costage_st_studienfaecher F,costage_st_studienkennzahlen SK +where T.st_studiengang_nr=G.st_studiengang_nr +and F.st_stdfach_nr=SK.st_stdfach_nr +and G.skz_key=SK.skz_key); + +update tmp_studien T set abschluss_astat=(select A.statistik_code +from costage_st_studiengaenge G, costage_st_abschlussziele_amtstat A,costage_st_abschlussziele_lokal AL +where T.st_studiengang_nr=G.st_studiengang_nr +and A.st_absz_amtstat_nr=AL.st_absz_amtstat_nr +and G.st_absz_nr=AL.st_absz_nr); + +update tmp_studien T set (studiengang_nr,fach_nr)= +(select A.studiengang_nr,A.fach_nr + FROM qa_sos_stg_aggr_astat A + where A.matrikel_nr=T.matrikelnummer + and A.sem_rueck_beur_ein=T.semester + and A.stg=T.stg_astat + and A.abschluss=T.abschluss_astat + and A.kz_rueck_beur_ein!=5) + where 1=(select count(*) + FROM qa_sos_stg_aggr_astat A + where A.matrikel_nr=T.matrikelnummer + and A.sem_rueck_beur_ein=T.semester + and A.stg=T.stg_astat + and A.abschluss=T.abschluss_astat + and A.kz_rueck_beur_ein!=5); + + + --tmp_studien enthält TSG, ESG und MSG --zuerst die msg: drop table if exists tmp_studien_msg; @@ -118,16 +153,16 @@ st_studstamm_nr, st_studiengang_nr, studienstatustyp, st_studienstatus_nr, -beginn_datum, +beginn_datum_s, gueltig_ab, semester, <#if K_CO_interpret_primaerflag==1> primaerflag_studien, <#else> - -dense_rank () over (partition by semester, st_studstamm_nr,studiengang_nr order by - (studiengangs_identifikator) - ) +(case when studiengang_nr=1 then 1 else 0 end) +--dense_rank () over (partition by semester, st_studstamm_nr,studiengang_nr order by +-- (studiengangs_identifikator) +-- ) as primaerflag_studien, hrst, @@ -137,6 +172,8 @@ from tmp_studien T where T.studiengangs_typ_kb in ('MSG') and T.status_historie=1 ; + + select 10,timestamp_str(now()) from xdummy; --wir machen den MSG von einer Zeile zu einer Spalte @@ -146,7 +183,7 @@ select *, 1::integer as primaerflag, null::integer as letztes_tsg_semester, null::integer as st_studium_nr_msg, -null::date as endedat_tsg +null::date as abm_dat_s_tsg into temp tmp_studien_esg_tsg from tmp_studien T where T.studiengangs_typ_kb in ('ESG','TSG') and T.status_historie=1 @@ -187,7 +224,8 @@ from tmp_studien T update tmp_studien_esg_tsg set st_studium_nr_msg=MSG.st_studium_nr <#if K_CO_interpret_primaerflag==0> -,fach_nr=MTSG.studienfach_sortierung +,fach_nr=MTSG.studienfach_sortierung, +primaerflag=(case when fach_nr=1 then 1 else 0 end) from tmp_studien_msg MSG, costage_st_studiengaenge_mtsg MTSG where tmp_studien_esg_tsg.studiengangs_typ_kb in ('TSG') @@ -284,7 +322,7 @@ and P.person_flag='N' select 55,timestamp_str(now()) from xdummy; --Endedatum bei TSG nachladen bei Abmeldungen: -update tmp_studien_esg_tsg set endedat_tsg=SA.gueltig_ab +update tmp_studien_esg_tsg set abm_dat_s_tsg=SA.gueltig_ab from costage_st_studienstatus SA where SA.st_studium_nr=tmp_studien_esg_tsg.st_studium_nr and SA.st_sem_nr=tmp_studien_esg_tsg.st_sem_nr @@ -294,12 +332,12 @@ and tmp_studien_esg_tsg.abm_art_s is not null select 57,timestamp_str(now()) from xdummy; -update tmp_studien_esg_tsg set endedat=SA.gueltig_ab +update tmp_studien_esg_tsg set abm_dat_s=SA.gueltig_ab from costage_st_studienstatus SA where SA.st_studium_nr=tmp_studien_esg_tsg.st_studium_nr and SA.st_sem_nr=tmp_studien_esg_tsg.st_sem_nr and SA.studienstatustyp in ('Z','X') -and tmp_studien_esg_tsg.studiengangs_typ_kb='ESG' +and tmp_studien_esg_tsg.studiengangs_typ_kb='ESG' --TODO: auskommentieren, damit auch MSG gesetzt werden and tmp_studien_esg_tsg.abm_art_s is not null ; @@ -342,7 +380,8 @@ create index tmp_ix6 on tmp_studien(primaerflag_studien); --statustyp bei TSG aus MSG nachladen: update tmp_studien_tsg set studienstatustyp=S.studienstatustyp, -studiengangs_identifikator_msg=S.studiengangs_identifikator +studiengangs_identifikator_msg=S.studiengangs_identifikator, +beginn_datum_s=S.beginn_datum_s from tmp_studien_msg S where tmp_studien_tsg.st_studiengang_nr_msg=S.st_studiengang_nr and tmp_studien_tsg.st_studstamm_nr=S.st_studstamm_nr @@ -450,7 +489,8 @@ null::char(10) as statustyp_tsg, null::char(10) as abm_art_s, null::char(10) as abm_art_s_msg, T.studienfach_sortierung, -null::timestamp as beginn_datum, +null::timestamp as beginn_datum_s, +null::timestamp as beginn_datum_s_tsg, null::timestamp AS gueltig_ab, null::integer as st_studienstatus_nr, null::integer as primaerflag_studien_msg, @@ -464,7 +504,7 @@ from tmp_studien_msg_tsg_fehlend F, tmp_studien_tsg T where F.st_studstamm_nr=T.st_studstamm_nr and F.st_studiengang_nr_tsg=T.st_studiengang_nr and T.semester=F.endsemester_tsg -group by 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,23,24,25,26,27,28,29 ,30 ,31,32 ,33 ,34,35,36,37,38 +group by 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,23,24,25,26,27,28,29 ,30 ,31,32 ,33 ,34,35,36,37,38,39 ; update tmp_studien_msg_tsg_fehlend2 set @@ -472,7 +512,8 @@ hssem=S.hssem, statustyp_tsg=S.statustyp_tsg, abm_art_s=S.abm_art_s, abm_art_s_msg=S.abm_art_s_msg, -beginn_datum =S.beginn_datum, +beginn_datum_s =S.beginn_datum_s, +beginn_datum_s_tsg =S.beginn_datum_s_tsg, gueltig_ab=S.gueltig_ab, st_studienstatus_nr=S.st_studienstatus_nr, st_studium_nr_msg=S.st_studium_nr_msg @@ -504,7 +545,8 @@ st_studium_nr, st_studstamm_nr, studienstatustyp, st_studienstatus_nr, -beginn_datum, +beginn_datum_s, +beginn_datum_s_tsg, gueltig_ab, matrikelnummer, geschlecht, @@ -548,7 +590,8 @@ st_studium_nr, st_studstamm_nr, studienstatustyp, st_studienstatus_nr, -beginn_datum, +beginn_datum_s, +beginn_datum_s_tsg, gueltig_ab, matrikelnummer, geschlecht, @@ -633,7 +676,8 @@ st_studium_nr_msg, st_studstamm_nr, studienstatustyp, st_studienstatus_nr, -beginn_datum, +beginn_datum_s, +beginn_datum_s_tsg, gueltig_ab, matrikelnummer, geschlecht, @@ -668,11 +712,26 @@ null::integer as fach_nr, null::integer as studiengang_nr, null::char(10) as unikey, null::integer as kz_rueck_beur_ein, -endedat, -endedat_tsg +abm_dat_s, +abm_dat_s_tsg into temp tmp_studien2 from tmp_studien_tsg; +--Wenn TSG automat. generiert sind passt die Nr. des MSG nach einem Fachwechsel nicht mehr, +--daher korrigieren nach der Generierung: + +update tmp_studien2 set st_studium_nr_msg=MSG.st_studium_nr from tmp_studien_msg MSG, costage_st_studiengaenge_mtsg MTSG +where tmp_studien2.studiengangs_typ_kb in ('TSG') +and tmp_studien2.semester=MSG.semester +and tmp_studien2.st_studstamm_nr=MSG.st_studstamm_nr +and tmp_studien2.st_studiengang_nr=MTSG.st_studiengang_nr_tsg +and tmp_studien2.st_absz_nr=MSG.st_absz_nr +and MSG.st_studiengang_nr=MTSG.st_studiengang_nr_msg +and tmp_studien2.tsg_generated=1 +; +--TODO: SPO auch nachladen + + --nun die ESG: insert into tmp_studien2(semester, semester_anfang, @@ -686,7 +745,8 @@ st_studium_nr, st_studstamm_nr, studienstatustyp, st_studienstatus_nr, -beginn_datum, +beginn_datum_s, +beginn_datum_s_tsg, gueltig_ab, matrikelnummer, geschlecht, @@ -715,7 +775,7 @@ klinsem, studienfach_sortierung, letztes_tsg_semester, studiengangs_typ_kb, -endedat +abm_dat_s ) select semester, @@ -730,7 +790,8 @@ st_studium_nr, st_studstamm_nr, studienstatustyp, st_studienstatus_nr, -beginn_datum, +beginn_datum_s, +beginn_datum_s_tsg, gueltig_ab, matrikelnummer, geschlecht, @@ -759,7 +820,7 @@ klinsem, 1::integer as studienfach_sortierung, letztes_tsg_semester, studiengangs_typ_kb, -endedat +abm_dat_s from tmp_studien_esg_tsg E where E.studiengangs_typ_kb='ESG'; @@ -899,7 +960,8 @@ T.st_studium_nr_msg, st_studstamm_nr, studienstatustyp, st_studienstatus_nr, -beginn_datum, +beginn_datum_s, +beginn_datum_s_tsg, T.gueltig_ab, matrikelnummer, geschlecht, @@ -933,8 +995,8 @@ fach_nr, studiengang_nr, unikey, kz_rueck_beur_ein, -endedat, -endedat_tsg, +abm_dat_s, +abm_dat_s_tsg, null::varchar(255) as po_stp_stp_version_kb, null::varchar(255) as po_stp_stp_version_kb_tsg, null::integer as po_regelstudienzeit, @@ -943,9 +1005,14 @@ null::date as spo_max_gueltig_ab_tsg, max(SPO.gueltig_ab) as spo_max_gueltig_ab into temp tmp_studien3 from tmp_studien2 T left outer join costage_st_studien_spoversionen SPO -on (SPO.st_studium_nr=T.st_studium_nr_msg +on ( +( +(studiengangs_typ_kb='TSG' and SPO.st_studium_nr=T.st_studium_nr_msg) +or +(studiengangs_typ_kb='ESG' and SPO.st_studium_nr=T.st_studium_nr) +) and SPO.gueltig_ab < T.semester_ende) -group by 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45 ,46, 47,48,49 --,50,51,52 +group by 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45 ,46, 47,48,49,50 --,51,52 ; select 160,timestamp_str(now()) from xdummy; @@ -953,7 +1020,11 @@ select 160,timestamp_str(now()) from xdummy; update tmp_studien3 set po_stp_stp_version_kb= SPO.po_stp_stp_version_kb, po_regelstudienzeit=SPO.po_regelstudienzeit from costage_st_studien_spoversionen SPO -where SPO.st_studium_nr=tmp_studien3.st_studium_nr_msg +where ( +(studiengangs_typ_kb='TSG' and SPO.st_studium_nr=tmp_studien3.st_studium_nr_msg) +or +(studiengangs_typ_kb='ESG' and SPO.st_studium_nr=tmp_studien3.st_studium_nr) +) and tmp_studien3.spo_max_gueltig_ab =SPO.gueltig_ab; select 162,timestamp_str(now()) from xdummy; @@ -974,7 +1045,8 @@ T.st_studium_nr_msg, st_studstamm_nr, studienstatustyp, st_studienstatus_nr, -beginn_datum, +beginn_datum_s, +beginn_datum_s_tsg, T.gueltig_ab, matrikelnummer, geschlecht, @@ -1008,8 +1080,8 @@ fach_nr, studiengang_nr, unikey, kz_rueck_beur_ein, -endedat, -endedat_tsg, +abm_dat_s, +abm_dat_s_tsg, T.po_stp_stp_version_kb, null::varchar(255) as po_stp_stp_version_kb_tsg, null::integer as po_regelstudienzeit, @@ -1020,7 +1092,7 @@ into temp tmp_studien4 from tmp_studien3 T left outer join costage_st_studien_spoversionen SPO on (SPO.st_studium_nr=T.st_studium_nr and SPO.gueltig_ab < T.semester_ende) -group by 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45 ,46, 47,48,49 ,50 --,51,52 +group by 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45 ,46, 47,48,49 ,50 ,51 --,52 ; select 164,timestamp_str(now()) from xdummy; @@ -1042,6 +1114,7 @@ and apnr=tmp_studien4.statustyp_tsg select 170,timestamp_str(now()) from xdummy; + drop table tmp_studien2; drop table tmp_studien3; @@ -1075,10 +1148,11 @@ st_studium_nr_tsg, studiengang_nr, fach_nr, unikey, - anfdat, + beginn_datum_s, + beginn_datum_s_tsg, ruebeudat, - endedat, - endedat_tsg, + abm_dat_s, + abm_dat_s_tsg, stufrm, kz_rueck_beur_ein, kz_rueck_beur_ein_tsg, @@ -1133,15 +1207,16 @@ select (case when studiengangs_typ_kb='TSG' then st_studium_nr_msg order by primaerflag desc,fach_nr) end) as fach_nr, unikey, - beginn_datum as anfdat, + beginn_datum_s, + beginn_datum_s_tsg, (case when studienstatustyp not in ('Z','X') then gueltig_ab else null::date end) as ruebeudat, - (case when endedat is not null then endedat + (case when abm_dat_s is not null then abm_dat_s when studienstatustyp in ('Z','X') then gueltig_ab - else null::date end) as endedat, - (case when endedat_tsg is not null then endedat_tsg + else null::date end) as abm_dat_s, + (case when abm_dat_s_tsg is not null then abm_dat_s_tsg when statustyp_tsg in ('Z','X') then gueltig_ab - else null::date end) as endedat_tsg, + else null::date end) as abm_dat_s_tsg, studienform_statistik_code as stufrm, kz_rueck_beur_ein, kz_rueck_beur_ein_tsg, @@ -1191,10 +1266,11 @@ st_studium_nr_tsg, studiengang_nr, fach_nr, unikey, - anfdat, + beginn_datum_s, + beginn_datum_s_tsg, ruebeudat, - endedat, - endedat_tsg, + abm_dat_s, + abm_dat_s_tsg, stufrm, kz_rueck_beur_ein, kz_rueck_beur_ein_tsg, @@ -1250,15 +1326,16 @@ cast (NULL as int) as studiengang_nr2, order by primaerflag desc, fach_nr) end) as fach_nr, unikey, - beginn_datum as anfdat, + beginn_datum_s, + beginn_datum_s_tsg, (case when studienstatustyp not in ('Z','X') then gueltig_ab else null::date end) as ruebeudat, - (case when endedat is not null then endedat + (case when abm_dat_s is not null then abm_dat_s when studienstatustyp in ('Z','X') then gueltig_ab - else null::date end) as endedat, - (case when endedat_tsg is not null then endedat_tsg + else null::date end) as abm_dat_s, + (case when abm_dat_s_tsg is not null then abm_dat_s_tsg when statustyp_tsg in ('Z','X') then gueltig_ab - else null::date end) as endedat_tsg, + else null::date end) as abm_dat_s_tsg, studienform_statistik_code as stufrm, kz_rueck_beur_ein, kz_rueck_beur_ein_tsg, @@ -1310,17 +1387,6 @@ select 190,timestamp_str(now()) from xdummy; --Abmeldungsart: ---zuerst personbezogen: -update costage_st_studien_aggr set abm_art_p=P.st_abm_art_kurzbezeichnung -from costage_st_personen_abmeldungen P, costage_st_semester S -where S.st_sem_nr=P.st_sem_nr -and S.semester_tid=costage_st_studien_aggr.semester -and P.st_studstamm_nr=costage_st_studien_aggr.st_studstamm_nr -and P.person_flag='J' -and costage_st_studien_aggr.semester >= ${beginn_semester} -; - - --Abmeldungsart studienbezogen bei TSG: update costage_st_studien_aggr set abm_art_s=P.st_abm_art_kurzbezeichnung from costage_st_personen_abmeldungen P, costage_st_semester S @@ -1388,16 +1454,7 @@ and costage_st_studien_aggr.studiengangs_typ_kb='TSG'; select 300,timestamp_str(now()) from xdummy; ---Abmeldungsart personbezogen bei TSG: --- update costage_st_studien_aggr set abm_art_p=P.st_abm_art_kurzbezeichnung --- from costage_st_personen_abmeldungen P, costage_st_semester S, costage_st_abmeldungsarten A --- where S.st_sem_nr=P.st_sem_nr --- and S.semester_tid=costage_st_studien_aggr.semester --- and P.st_studium_nr=costage_st_studien_aggr.st_studium_nr --- and A.st_abm_art_kurzbezeichnung=P.st_abm_art_kurzbezeichnung --- and A.bezug='P' --- and costage_st_studien_aggr.studiengangs_typ_kb='TSG' --- ; + drop table tmp_studien4; drop table tmp_primaer_msg; diff --git a/src-modules/module/costage/hilfstabellen/costage_st_studien_aggr_fuellen_mit_primerflag.sql b/src-modules/module/costage/hilfstabellen/costage_st_studien_aggr_fuellen_mit_primerflag.sql new file mode 100644 index 0000000..30d083c --- /dev/null +++ b/src-modules/module/costage/hilfstabellen/costage_st_studien_aggr_fuellen_mit_primerflag.sql @@ -0,0 +1,1383 @@ +--freemarker template + + + + + +drop table if exists tmp_studien; +drop table if exists tmp_studien2; +drop table if exists tmp_tsg2msg; + +<#if K_CO_interpret_primaerflag==1> +--das gesamte Script läuft nur wenn K_CO_interpret_primaerflag=1 gesetzt ist: + +SELECT +SM.semester_tid as semester, +SM.semester_anfang, +SM.semester_ende, +SG.st_absz_nr, +SG.st_skz_nr, +SG.studiengangs_identifikator, +SG.studiengangs_bezeichnung, +SM.st_sem_nr, +ST.st_studium_nr, +S.st_studstamm_nr, +ST.st_studiengang_nr, +SG.studiengangs_typ_kb, +SA.studienstatustyp, +SA.st_studienstatus_nr, +(case when SG.studiengangs_typ_kb in ('TSG') then date(SA.beginn_datum) else null::timestamp end) as beginn_datum_s_tsg, +SA.beginn_datum as beginn_datum_s, +SA.gueltig_ab, +val(S.matrikelnummer) as matrikelnummer, +S.geschlecht, +S.ca12_staat, +S.second_nationality, +SG.fachkennzeichen, +ST.studienform_statistik_code, +null::varchar(255) as studiengangs_identifikator_msg, +null::integer as st_studiengang_nr_msg_primaerflag, +null::char(10) as hrst, +null::integer as fachsemester, +null::integer as praxissemester, +null::integer as hssem, +null::integer as klinsem, +(case when SG.studiengangs_typ_kb in ('TSG') then SA.studienstatustyp else null::char(10) end) as statustyp_tsg, +(case when ST.hauptstudium_flag='J' then 1::smallint else 0::smallint end) as primaerflag_studien, +0::smallint as tsg_generated, +--0::smallint as primaerflag, +null::integer as studiengang_nr, +null::integer as fach_nr, +null::char(10) as unikey, +null::date as anfdat, +null::date as ruebeudat, +null::date as abm_dat_s, +null::smallint as kz_rueck_beur_ein, +null::smallint as kz_rueck_beur_ein_tsg, +null::integer as hzb_art_nr, +null::integer as hzb_land_nr, +null::integer as hzb_land_sub_r_nr , +null::integer as hzb_jahr, +null::date as hzb_datum , +null::decimal(14,7) as hzb_note, +null::char(10) as abm_art_s, +null::char(10) as stg_astat, +null::char(10) as abschluss_astat, +rank () over (partition by SM.st_sem_nr, S.st_studstamm_nr, SG.studiengangs_identifikator order by SA.gueltig_ab desc,SA.studienstatustyp desc) as status_historie +--rank () over (partition by SM.st_sem_nr, S.st_studstamm_nr, SG.studiengangs_identifikator order by (case when SA.gueltig_ab =SM.semester_ende then date_val('01.01.1900') else SA.gueltig_ab end) desc) as status_historie +into temp tmp_studien +FROM costage_st_studierendenstammdaten S, + costage_st_studien ST, + costage_st_semester SM, + costage_st_studiengaenge SG , + costage_st_studienstatus SA + + +where +S.st_studstamm_nr = ST.st_studstamm_nr +and ST.st_studiengang_nr=SG.st_studiengang_nr +and S.matrikelnummer is not null +--and SM.semester_tid >= 20171 +-- and SM.semester_tid <= 20171 +and SG.studiengangs_typ_kb in ('ESG','TSG','MSG') +and SA.st_studium_nr=ST.st_studium_nr +and SA.st_sem_nr=SM.st_sem_nr +and SA.gueltig_ab <=SM.semester_ende --nur letzter Status im jew. Semester interessiert, nicht danach +and (SA.studienstatustyp not in ('Z','X') or ( + SA.studienstatustyp in ('Z','X') + and SA.gueltig_ab <= today() + and date(SA.gueltig_ab) < date(SM.semester_ende) + )) --Studis außer erst/neueinschr/rückmeld/beurlaubt werden in der Semestermitte exmatr. zum Endedatum Semesterende, wenn dieses Datum in der Zukunft liegt soll der Studi mit dem vorherigen Status erscheinen +<#if COSTAGE_STUDIENSTATUS_FILTER?exists> +and ${COSTAGE_STUDIENSTATUS_FILTER} +<#else> +and SA.studienstatustyp not in ('a','o','z') + +and ${COSTAGE_STUDENT_FILTER} +and SM.semester_tid >= ${beginn_semester} +; + +select 1,timestamp_str(now()) from xdummy; + +update tmp_studien +set hrst=H.hoererstatus_kb +from costage_st_hoererstatus H +where tmp_studien.st_studstamm_nr = H.st_studstamm_nr +and tmp_studien.st_sem_nr = H.st_sem_nr +and hoererstatus_kb != 'E' --der Hörerstatus "E - Exmatrikuliert" gilt eigentlich erst zum Studienende, hat aber kein "gültig ab" Datum. Der Hörerstatus "E" kann ignoriert werden. +; + +--tmp_studien enthält TSG, ESG und MSG +--zuerst die msg: +drop table if exists tmp_studien_msg; + +select +st_absz_nr, +st_skz_nr, +studiengangs_identifikator, +studiengangs_bezeichnung, +st_studium_nr, +st_studstamm_nr, +st_studiengang_nr, +studienstatustyp, +st_studienstatus_nr, +beginn_datum_s, +gueltig_ab, +semester, +primaerflag_studien, +hrst, +null::char(10) as abm_art_s + into temp tmp_studien_msg +from tmp_studien T where T.studiengangs_typ_kb in ('MSG') +and T.status_historie=1 +; + + + +select 10,timestamp_str(now()) from xdummy; + +--wir machen den MSG von einer Zeile zu einer Spalte +--1. Prio TSG hat Primärflag: +drop table if exists tmp_studien_esg_tsg; +select *, +1::integer as primaerflag, +null::integer as letztes_tsg_semester, +null::integer as st_studium_nr_msg, +null::date as abm_dat_s_tsg + into temp tmp_studien_esg_tsg from tmp_studien T +where T.studiengangs_typ_kb in ('ESG','TSG') +and T.status_historie=1 + and T.primaerflag_studien=1 + ; + +--2. Prio: aus costage_st_hauptstudien: +insert into tmp_studien_esg_tsg +select T.*, +(case when H.st_studstamm_nr > 0 then 1::integer else 0::integer end) as primaerflag, +null::integer as letztes_tsg_semester, +null::integer as st_studium_nr_msg +from tmp_studien T left outer join costage_st_hauptstudien H + on ( H.st_studstamm_nr=T.st_studstamm_nr + and H.st_studium_nr=T.st_studium_nr + and H.st_sem_nr=T.st_sem_nr) + where T.status_historie=1 + and T.studiengangs_typ_kb in ('ESG','TSG') + and T.primaerflag_studien=0 + ; + +update tmp_studien_esg_tsg set st_studium_nr_msg=MSG.st_studium_nr +from tmp_studien_msg MSG, costage_st_studiengaenge_mtsg MTSG +where tmp_studien_esg_tsg.studiengangs_typ_kb in ('TSG') +and tmp_studien_esg_tsg.semester=MSG.semester + and tmp_studien_esg_tsg.st_studstamm_nr=MSG.st_studstamm_nr +and tmp_studien_esg_tsg.st_studiengang_nr=MTSG.st_studiengang_nr_tsg + and tmp_studien_esg_tsg.st_absz_nr=MSG.st_absz_nr +and MSG.st_studiengang_nr=MTSG.st_studiengang_nr_msg +and MSG.primaerflag_studien=1 +; + +select 20,timestamp_str(now()) from xdummy; + + +update tmp_studien_esg_tsg set st_studium_nr_msg=MSG.st_studium_nr + from tmp_studien_msg MSG, costage_st_studiengaenge_mtsg MTSG +where tmp_studien_esg_tsg.st_studium_nr_msg is null +and tmp_studien_esg_tsg.studiengangs_typ_kb in ('TSG') +and tmp_studien_esg_tsg.semester=MSG.semester + and tmp_studien_esg_tsg.st_studstamm_nr=MSG.st_studstamm_nr +and tmp_studien_esg_tsg.st_studiengang_nr=MTSG.st_studiengang_nr_tsg + and tmp_studien_esg_tsg.st_absz_nr=MSG.st_absz_nr +and MSG.st_studiengang_nr=MTSG.st_studiengang_nr_msg +and MSG.primaerflag_studien!=1 +; + +select 30,timestamp_str(now()) from xdummy; + + +update tmp_studien_esg_tsg +set fachsemester=F.fachsemester +from costage_st_fachsemester F +where F.st_studium_nr=tmp_studien_esg_tsg.st_studium_nr +and F.st_sem_nr=tmp_studien_esg_tsg.st_sem_nr +and F.fachsemestertyp='FS' +; + +select 35,timestamp_str(now()) from xdummy; + + +--praxissemester: +update tmp_studien_esg_tsg +set praxissemester=F.fachsemester +from costage_st_fachsemester F +where F.st_studium_nr=tmp_studien_esg_tsg.st_studium_nr +and F.st_sem_nr=tmp_studien_esg_tsg.st_sem_nr +and F.fachsemestertyp='PS' +; + +select 36,timestamp_str(now()) from xdummy; + + +--klinsem +update tmp_studien_esg_tsg +set klinsem=F.fachsemester +from costage_st_fachsemester F +where F.st_studium_nr=tmp_studien_esg_tsg.st_studium_nr +and F.st_sem_nr=tmp_studien_esg_tsg.st_sem_nr +and F.fachsemestertyp='KS' +; + +select 40,timestamp_str(now()) from xdummy; + +update tmp_studien_esg_tsg +set hzb_art_nr=H.hzb_art_nr, +hzb_datum=H.hzb_datum, +hzb_note=(case when substring(H.hzb_note from 1 for 1) ~ '[0-9]' +and substring(H.hzb_note from 2 for 1) in (',','.') +and substring(H.hzb_note from 3 for 1) ~ '[0-9]' +and (substring(H.hzb_note from 4 for 1) ~ '[0-9]' or substring(H.hzb_note from 4 for 1)='') +and length(H.hzb_note)<=4 then to_number(replace(H.hzb_note,',','.'),'9.99') +when H.hzb_note ~ '[0-9]' and length(H.hzb_note) <=4 then decval(H.hzb_note) +else null::decimal(8,4) end ), +hzb_land_sub_r_nr=H.hzb_land_sub_r_nr, +hzb_land_nr=H.hzb_land_nr, +hzb_jahr=H.hzb_jahr +from costage_st_hzb H +where tmp_studien_esg_tsg.st_studstamm_nr = H.st_person_nr +; + +select 50,timestamp_str(now()) from xdummy; + +--Abmeldungsart studienbezogen: +update tmp_studien_esg_tsg set abm_art_s=P.st_abm_art_kurzbezeichnung +from costage_st_personen_abmeldungen P, costage_st_semester S +where S.st_sem_nr=P.st_sem_nr +and S.semester_tid=tmp_studien_esg_tsg.semester +and P.st_studium_nr=tmp_studien_esg_tsg.st_studium_nr +and P.person_flag='N' +; + +select 55,timestamp_str(now()) from xdummy; + +--Endedatum bei TSG nachladen bei Abmeldungen: +update tmp_studien_esg_tsg set abm_dat_s_tsg=SA.gueltig_ab +from costage_st_studienstatus SA +where SA.st_studium_nr=tmp_studien_esg_tsg.st_studium_nr +and SA.st_sem_nr=tmp_studien_esg_tsg.st_sem_nr +and SA.studienstatustyp in ('Z','X') +and tmp_studien_esg_tsg.abm_art_s is not null +; + +select 57,timestamp_str(now()) from xdummy; + +update tmp_studien_esg_tsg set abm_dat_s=SA.gueltig_ab +from costage_st_studienstatus SA +where SA.st_studium_nr=tmp_studien_esg_tsg.st_studium_nr +and SA.st_sem_nr=tmp_studien_esg_tsg.st_sem_nr +and SA.studienstatustyp in ('Z','X') +and tmp_studien_esg_tsg.studiengangs_typ_kb='ESG' --TODO: auskommentieren, damit auch MSG gesetzt werden +and tmp_studien_esg_tsg.abm_art_s is not null +; + +select 60,timestamp_str(now()) from xdummy; + + +drop table if exists tmp_studien_tsg; + + +select ETSG.*, +MSG.primaerflag_studien as primaerflag_studien_msg, +MTSG.st_studiengang_nr_msg, +MTSG.studienfach_sortierung, +MSG.abm_art_s as abm_art_s_msg +into temp tmp_studien_tsg +from tmp_studien_esg_tsg ETSG,tmp_studien_msg MSG,costage_st_studiengaenge_mtsg MTSG +where + MSG.semester=ETSG.semester +and MSG.st_studium_nr=ETSG.st_studium_nr_msg +and MSG.st_studstamm_nr=ETSG.st_studstamm_nr +and MTSG.st_studiengang_nr_tsg=ETSG.st_studiengang_nr +and MTSG.st_studiengang_nr_msg=MSG.st_studiengang_nr +and ETSG.studiengangs_typ_kb in ('TSG'); + + + +create index tmp_ix3 on tmp_studien(studiengangs_typ_kb); +create index tmp_ix5 on tmp_studien(status_historie); +create index tmp_ix6 on tmp_studien(primaerflag_studien); + + +--statustyp bei TSG aus MSG nachladen: +update tmp_studien_tsg set studienstatustyp=S.studienstatustyp, +studiengangs_identifikator_msg=S.studiengangs_identifikator, +beginn_datum_s=S.beginn_datum_s +from tmp_studien_msg S +where tmp_studien_tsg.st_studiengang_nr_msg=S.st_studiengang_nr +and tmp_studien_tsg.st_studstamm_nr=S.st_studstamm_nr +and tmp_studien_tsg.semester=S.semester + +; + +select 70,timestamp_str(now()) from xdummy; + + + +--select * from tmp_studien +--where semester=20212; + + +<#if K_COSTAGE_TSG_GENERATE == 1> + +--start generierung: +drop table if exists tmp_studien_msg_tsg; + +select MTSG.st_studiengang_nr_tsg as st_studiengang_nr_tsg, +MSG.st_studstamm_nr, +MSG.st_studiengang_nr as st_studiengang_nr_msg, +min(MSG.semester) as startsemester_msg, +max(MSG.semester) as endsemester_msg, +max(TSG.semester) as endsemester_tsg +into temp tmp_studien_msg_tsg + from tmp_studien_msg MSG, costage_st_studiengaenge_mtsg MTSG , tmp_studien_tsg TSG +where MTSG.st_studiengang_nr_msg=MSG.st_studiengang_nr +and TSG.st_studiengang_nr=MTSG.st_studiengang_nr_tsg +and TSG.st_studstamm_nr=MSG.st_studstamm_nr +--and TSG.st_studium_nr_msg=MSG.st_studium_nr +and MSG.studienstatustyp in ('U','B','E','I','X','Z') --nur tatsächlich eingeschrieben; +group by 1,2,3 +; + +select 90,timestamp_str(now()) from xdummy; + + +select 100,timestamp_str(now()) from xdummy; + +--nun fehlende Datensätze ermitteln: +drop table if exists tmp_studien_msg_tsg_fehlend; + +select distinct S.semester_tid as semester, +S.semester_anfang, +S.semester_ende, +S.st_sem_nr, +T.st_studstamm_nr, +T.st_studiengang_nr_tsg, +T.st_studiengang_nr_msg, +T.endsemester_tsg + into temp tmp_studien_msg_tsg_fehlend +from costage_st_semester S inner join tmp_studien_msg_tsg T on +(S.semester_tid between T.startsemester_msg and T.endsemester_msg) --enthält alle möglichen TSG +left outer join tmp_studien_tsg TSG --enthält die tatsächlich vorhandenen TSG +on (TSG.st_studiengang_nr=T.st_studiengang_nr_tsg +and TSG.st_studstamm_nr=T.st_studstamm_nr +and S.semester_tid=TSG.semester) +where +TSG.st_studstamm_nr is null +; + + + +drop table if exists tmp_studien_msg_tsg_fehlend2; + + +--Studiengangsdaten des TSG nachladen: +--Ein Studi kann einen TSG mehrmals schließen (z.B. Beurlaubung) +--daher wird das max. Semester genommen, und der Status dann nachgeladen: +select F.semester, +F.semester_anfang, +F.semester_ende, + T.st_absz_nr, + T.st_skz_nr, + T.studiengangs_identifikator, + T.studiengangs_bezeichnung, +F.st_sem_nr, + T.st_studium_nr, +T.st_studstamm_nr, + T.studiengangs_typ_kb, + T.matrikelnummer, + T.geschlecht, + T.ca12_staat, + T.second_nationality, + T.fachkennzeichen, + T.studienform_statistik_code, + --T.st_studiengang_nr_msg, + F.st_studiengang_nr_msg, +-- T.studiengangs_identifikator_msg, + T.st_studiengang_nr as st_studiengang_nr_tsg, +null::char(10) as hrst, +null::integer as hssem, +null::char(10) as studienstatustyp, +null::char(10) as statustyp_tsg, +1::integer as tsg_generated, +-- T.primaerflag, + T.hzb_art_nr, + T.hzb_land_sub_r_nr , + T.hzb_jahr, + T.hzb_datum , + T.hzb_note, + T.hzb_land_nr, +null::char(10) as abm_art_s, +null::char(10) as abm_art_s_msg, +T.studienfach_sortierung, +null::timestamp as beginn_datum_s, +null::timestamp as beginn_datum_s_tsg, +null::timestamp AS gueltig_ab, +null::integer as st_studienstatus_nr, +null::integer as primaerflag_studien_msg, +null::integer as st_studium_nr_msg, +max(T.semester) as letztes_tsg_semester, +max(T.fachsemester) as fachsemester, +max(T.praxissemester) as praxissemester, +max(T.klinsem) as klinsem +into temp tmp_studien_msg_tsg_fehlend2 +from tmp_studien_msg_tsg_fehlend F, tmp_studien_tsg T +where F.st_studstamm_nr=T.st_studstamm_nr +and F.st_studiengang_nr_tsg=T.st_studiengang_nr +and T.semester=F.endsemester_tsg +group by 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,23,24,25,26,27,28,29 ,30 ,31,32 ,33 ,34,35,36,37,38,39 +; + +update tmp_studien_msg_tsg_fehlend2 set +hssem=S.hssem, +statustyp_tsg=S.statustyp_tsg, +abm_art_s=S.abm_art_s, +abm_art_s_msg=S.abm_art_s_msg, +beginn_datum_s =S.beginn_datum_s, +beginn_datum_s_tsg =S.beginn_datum_s_tsg, +gueltig_ab=S.gueltig_ab, +st_studienstatus_nr=S.st_studienstatus_nr, +st_studium_nr_msg=S.st_studium_nr_msg + from tmp_studien_tsg S + where S.st_studiengang_nr=tmp_studien_msg_tsg_fehlend2.st_studiengang_nr_tsg + and S.st_studstamm_nr=tmp_studien_msg_tsg_fehlend2.st_studstamm_nr + and S.semester=tmp_studien_msg_tsg_fehlend2.letztes_tsg_semester + ; +--Primärflag des MSG ermitteln, wichtig für die Ermittlung der Studiengang-Nr. +update tmp_studien_msg_tsg_fehlend2 set +primaerflag_studien_msg=M.primaerflag_studien +from tmp_studien_msg M +where tmp_studien_msg_tsg_fehlend2.st_studiengang_nr_msg=M.st_studiengang_nr +and tmp_studien_msg_tsg_fehlend2.st_studstamm_nr=M.st_studstamm_nr +and tmp_studien_msg_tsg_fehlend2.semester=M.semester; + + + +--fehlende Semester nachtragen: +insert into tmp_studien_tsg(semester, +semester_anfang, +semester_ende, +st_absz_nr, +st_skz_nr, +studiengangs_identifikator, +studiengangs_bezeichnung, +st_sem_nr, +st_studium_nr, +st_studstamm_nr, +studienstatustyp, +st_studienstatus_nr, +beginn_datum_s, +beginn_datum_s_tsg, +gueltig_ab, +matrikelnummer, +geschlecht, +ca12_staat, +second_nationality, +fachkennzeichen, +studienform_statistik_code, +st_studiengang_nr_msg, +studiengangs_identifikator_msg, +st_studiengang_nr, +hrst, +hssem, +statustyp_tsg, +tsg_generated, +primaerflag, +hzb_art_nr, +hzb_land_sub_r_nr , +hzb_jahr, +hzb_datum , +hzb_note, +hzb_land_nr, +abm_art_s, +abm_art_s_msg, +fachsemester, +praxissemester, +klinsem, +studienfach_sortierung, +letztes_tsg_semester, +primaerflag_studien_msg, +st_studium_nr_msg +) +select distinct semester, +semester_anfang, +semester_ende, +F.st_absz_nr, +F.st_skz_nr, +F.studiengangs_identifikator, +F.studiengangs_bezeichnung, +st_sem_nr, +st_studium_nr, +st_studstamm_nr, +studienstatustyp, +st_studienstatus_nr, +beginn_datum_s, +beginn_datum_s_tsg, +gueltig_ab, +matrikelnummer, +geschlecht, +ca12_staat, +second_nationality, +F.fachkennzeichen, +studienform_statistik_code, +st_studiengang_nr_msg, +G.studiengangs_identifikator as studiengangs_identifikator_msg, +st_studiengang_nr_tsg, +hrst, +hssem, +'X' as statustyp_tsg, -- generierte TSG sind immer geschlossen S.statustyp_tsg, +1::integer as tsg_generated, +0 as primaerflag, --geschlossene TSG können kein Primärflag haben +hzb_art_nr, +hzb_land_sub_r_nr , +hzb_jahr, +hzb_datum , +hzb_note, +hzb_land_nr, +abm_art_s, +abm_art_s_msg, +fachsemester, +praxissemester, +klinsem, +studienfach_sortierung, +letztes_tsg_semester, +primaerflag_studien_msg, +st_studium_nr_msg +from tmp_studien_msg_tsg_fehlend2 F, costage_st_studiengaenge G +where G.st_studiengang_nr=F.st_studiengang_nr_msg + ; + + + +select 110,timestamp_str(now()) from xdummy; + + + +--statustyp und hrst nachladen: + update tmp_studien_tsg set studienstatustyp=S.studienstatustyp, + hrst=S.hrst + from tmp_studien_msg S + where tmp_studien_tsg.st_studiengang_nr_msg=S.st_studiengang_nr + and tmp_studien_tsg.st_studstamm_nr=S.st_studstamm_nr + and tmp_studien_tsg.tsg_generated=1 + and tmp_studien_tsg.semester=S.semester + ; + + +--select * from tmp_studien_msg_tsg_fehlend2; + + +select 120,timestamp_str(now()) from xdummy; + + +drop table tmp_studien_msg_tsg_fehlend; +drop table tmp_studien_msg_tsg_fehlend2; +drop table tmp_studien_msg_tsg; + + + +-------------------------------------------------------------------- +--Zusammenführen ESG und TSG: + +select 130,timestamp_str(now()) from xdummy; + +drop table if exists tmp_studien2; + +select +semester, +semester_anfang, +semester_ende, +st_absz_nr, +st_skz_nr, +studiengangs_identifikator, +studiengangs_bezeichnung, +st_sem_nr, +st_studium_nr, +st_studium_nr_msg, +st_studstamm_nr, +studienstatustyp, +st_studienstatus_nr, +beginn_datum_s, +beginn_datum_s_tsg, +gueltig_ab, +matrikelnummer, +geschlecht, +ca12_staat, +second_nationality, +fachkennzeichen, +studienform_statistik_code, +st_studiengang_nr_msg, +studiengangs_identifikator_msg, +st_studiengang_nr, +hrst, +hssem, +statustyp_tsg, +tsg_generated, +primaerflag, +hzb_art_nr, +hzb_land_sub_r_nr , +hzb_jahr, +hzb_datum , +hzb_note, +hzb_land_nr, +abm_art_s, +abm_art_s_msg, +fachsemester, +praxissemester, +klinsem, +studienfach_sortierung, +letztes_tsg_semester, +primaerflag_studien_msg, +'TSG'::char(10) as studiengangs_typ_kb, +null::integer as fach_nr, +null::integer as studiengang_nr, +null::char(10) as unikey, +null::integer as kz_rueck_beur_ein, +abm_dat_s, +abm_dat_s_tsg +into temp tmp_studien2 +from tmp_studien_tsg; + +--Wenn TSG automat. generiert sind passt die Nr. des MSG nach einem Fachwechsel nicht mehr, +--daher korrigieren nach der Generierung: + +update tmp_studien2 set st_studium_nr_msg=MSG.st_studium_nr from tmp_studien_msg MSG, costage_st_studiengaenge_mtsg MTSG +where tmp_studien2.studiengangs_typ_kb in ('TSG') +and tmp_studien2.semester=MSG.semester +and tmp_studien2.st_studstamm_nr=MSG.st_studstamm_nr +and tmp_studien2.st_studiengang_nr=MTSG.st_studiengang_nr_tsg +and tmp_studien2.st_absz_nr=MSG.st_absz_nr +and MSG.st_studiengang_nr=MTSG.st_studiengang_nr_msg +and tmp_studien2.tsg_generated=1 +; +--TODO: SPO auch nachladen + + +--nun die ESG: +insert into tmp_studien2(semester, +semester_anfang, +semester_ende, +st_absz_nr, +st_skz_nr, +studiengangs_identifikator, +studiengangs_bezeichnung, +st_sem_nr, +st_studium_nr, +st_studstamm_nr, +studienstatustyp, +st_studienstatus_nr, +beginn_datum_s, +beginn_datum_s_tsg, +gueltig_ab, +matrikelnummer, +geschlecht, +ca12_staat, +second_nationality, +fachkennzeichen, +studienform_statistik_code, +st_studiengang_nr_msg, +studiengangs_identifikator_msg, +st_studiengang_nr, +hrst, +hssem, +statustyp_tsg, +tsg_generated, +primaerflag, +hzb_art_nr, +hzb_land_sub_r_nr , +hzb_jahr, +hzb_datum , +hzb_note, +hzb_land_nr, +abm_art_s, +fachsemester, +praxissemester, +klinsem, +studienfach_sortierung, +letztes_tsg_semester, +studiengangs_typ_kb, +abm_dat_s +) +select +semester, +semester_anfang, +semester_ende, +st_absz_nr, +st_skz_nr, +studiengangs_identifikator, +studiengangs_bezeichnung, +st_sem_nr, +st_studium_nr, +st_studstamm_nr, +studienstatustyp, +st_studienstatus_nr, +beginn_datum_s, +beginn_datum_s_tsg, +gueltig_ab, +matrikelnummer, +geschlecht, +ca12_staat, +second_nationality, +fachkennzeichen, +studienform_statistik_code, +null::integer as st_studiengang_nr_msg, +null::varchar(255) as studiengangs_identifikator_msg, +st_studiengang_nr, +hrst, +hssem, +null::char(10) as statustyp_tsg, +0::integer as tsg_generated, +primaerflag, +hzb_art_nr, +hzb_land_sub_r_nr , +hzb_jahr, +hzb_datum , +hzb_note, +hzb_land_nr, +abm_art_s, +fachsemester, +praxissemester, +klinsem, +1::integer as studienfach_sortierung, +letztes_tsg_semester, +studiengangs_typ_kb, +abm_dat_s +from tmp_studien_esg_tsg E +where E.studiengangs_typ_kb='ESG'; + + +drop table tmp_studien; +drop table tmp_studien_tsg; +drop table tmp_studien_esg_tsg; + + +--Ermittlung fach_nr: +update tmp_studien2 set fach_nr=studienfach_sortierung; + + +update tmp_studien2 set fach_nr=1 +where fach_nr is null; + +select 140,timestamp_str(now()) from xdummy; + + +update tmp_studien2 set unikey=K.unikey +from costage_st_studiengaenge G, costage_st_studienkennzahlen K +where G.st_studiengang_nr=tmp_studien2.st_studiengang_nr +and K.st_skz_nr=G.st_skz_nr +; + +update tmp_studien2 set kz_rueck_beur_ein=(select val(astat) +from cifx where key=400 +and apnr=tmp_studien2.studienstatustyp +); + + +update tmp_studien2 +set hssem=H.anzahl_hochschulsemester +from costage_st_hochschulsemester H +where H.st_studstamm_nr=tmp_studien2.st_studstamm_nr +and H.st_sem_nr=tmp_studien2.st_sem_nr +; + + +update tmp_studien2 set studiengang_nr=1 where primaerflag=1; + + +drop table if exists tmp_primaer_msg; +--Wenn Studium mit Primärflag ein TSG ist, wird die studiengang_nr auf alle anderen TSG des MSG ausgedehnt: +select st_studstamm_nr,semester,st_studiengang_nr_msg +into temp tmp_primaer_msg +from tmp_studien2 +where studiengangs_typ_kb ='TSG' +and st_studiengang_nr_msg is not null +--and primaerflag=1 +and primaerflag_studien_msg=1 +; +create index tmp_ixz1 on tmp_primaer_msg(st_studstamm_nr); +create index tmp_ixz12 on tmp_primaer_msg(semester); +create index tmp_ixz13 on tmp_primaer_msg(st_studiengang_nr_msg); + +--select * from tmp_primaer_msg; + +select 145,timestamp_str(now()) from xdummy; + + +select * into temp tmp_studien3 from tmp_studien2; +create index tmp_ix4443 on tmp_studien3(st_studstamm_nr); +create index tmp_ix4443a on tmp_studien3(semester); +create index tmp_ix4443b on tmp_studien3(studiengang_nr); + + +update tmp_studien2 set studiengang_nr=1 where primaerflag=0 +and studiengangs_typ_kb ='TSG' +and primaerflag_studien_msg=1 +and exists (select st_studiengang_nr_msg +from tmp_primaer_msg T +where T.st_studstamm_nr=tmp_studien2.st_studstamm_nr +and T.semester=tmp_studien2.semester +and T.st_studiengang_nr_msg=tmp_studien2.st_studiengang_nr_msg +) +--es kann schon passieren dass ein vorheriger ESG das Primärflag hat, +--während alle generierten TSG kein Primärflag haben können +--daher hier nicht den studiengang_nr=1 nehmen: +and not exists(select T.st_studstamm_nr,T.semester +from tmp_studien3 T +where T.st_studstamm_nr =tmp_studien2.st_studstamm_nr +and T.semester=T.semester +and T.studiengang_nr=1) +; +select 150,timestamp_str(now()) from xdummy; + +drop table if exists tmp_studien3; + + +--zweite Prio: TSG Primärflag +drop table if exists tmp_primaer_msg; + +select st_studstamm_nr,semester,st_studiengang_nr_msg +into temp tmp_primaer_msg +from tmp_studien2 +where studiengangs_typ_kb ='TSG' +and st_studiengang_nr_msg is not null +and primaerflag=1 +; +update tmp_studien2 set studiengang_nr=1 where studiengang_nr is null +and studiengangs_typ_kb ='TSG' +and exists (select st_studiengang_nr_msg +from tmp_primaer_msg T +where T.st_studstamm_nr=tmp_studien2.st_studstamm_nr +and T.semester=tmp_studien2.semester +and T.st_studiengang_nr_msg=tmp_studien2.st_studiengang_nr_msg +) +; + + +drop table if exists tmp_studien3; + +--SPO-Version (letzte im jew. Semester) ermitteln: +select +semester, +semester_anfang, +semester_ende, +st_absz_nr, +st_skz_nr, +studiengangs_identifikator, +studiengangs_bezeichnung, +st_sem_nr, +T.st_studium_nr, +T.st_studium_nr_msg, +st_studstamm_nr, +studienstatustyp, +st_studienstatus_nr, +beginn_datum_s, +beginn_datum_s_tsg, +T.gueltig_ab, +matrikelnummer, +geschlecht, +ca12_staat, +second_nationality, +fachkennzeichen, +studienform_statistik_code, +st_studiengang_nr_msg, +studiengangs_identifikator_msg, +st_studiengang_nr, +hrst, +hssem, +statustyp_tsg, +tsg_generated, +primaerflag, +hzb_art_nr, +hzb_land_sub_r_nr , +hzb_jahr, +hzb_datum , +hzb_note, +hzb_land_nr, +abm_art_s, +abm_art_s_msg, +fachsemester, +praxissemester, +klinsem, +studienfach_sortierung, +letztes_tsg_semester, +studiengangs_typ_kb, +fach_nr, +studiengang_nr, +unikey, +kz_rueck_beur_ein, +abm_dat_s, +abm_dat_s_tsg, +null::varchar(255) as po_stp_stp_version_kb, +null::varchar(255) as po_stp_stp_version_kb_tsg, +null::integer as po_regelstudienzeit, +null::integer as kz_rueck_beur_ein_tsg, +null::date as spo_max_gueltig_ab_tsg, +max(SPO.gueltig_ab) as spo_max_gueltig_ab +into temp tmp_studien3 +from tmp_studien2 T left outer join costage_st_studien_spoversionen SPO +on ( +( +(studiengangs_typ_kb='TSG' and SPO.st_studium_nr=T.st_studium_nr_msg) +or +(studiengangs_typ_kb='ESG' and SPO.st_studium_nr=T.st_studium_nr) +) +and SPO.gueltig_ab < T.semester_ende) +group by 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45 ,46, 47,48,49,50 --,51,52 +; + +select 160,timestamp_str(now()) from xdummy; + +update tmp_studien3 set po_stp_stp_version_kb= SPO.po_stp_stp_version_kb, +po_regelstudienzeit=SPO.po_regelstudienzeit +from costage_st_studien_spoversionen SPO +where ( +(studiengangs_typ_kb='TSG' and SPO.st_studium_nr=tmp_studien3.st_studium_nr_msg) +or +(studiengangs_typ_kb='ESG' and SPO.st_studium_nr=tmp_studien3.st_studium_nr) +) +and tmp_studien3.spo_max_gueltig_ab =SPO.gueltig_ab; + +select 162,timestamp_str(now()) from xdummy; + +--nun TSG SPO Version +--SPO-Version (letzte im jew. Semester) ermitteln: +select +semester, +semester_anfang, +semester_ende, +st_absz_nr, +st_skz_nr, +studiengangs_identifikator, +studiengangs_bezeichnung, +st_sem_nr, +T.st_studium_nr, +T.st_studium_nr_msg, +st_studstamm_nr, +studienstatustyp, +st_studienstatus_nr, +beginn_datum_s, +beginn_datum_s_tsg, +T.gueltig_ab, +matrikelnummer, +geschlecht, +ca12_staat, +second_nationality, +fachkennzeichen, +studienform_statistik_code, +st_studiengang_nr_msg, +studiengangs_identifikator_msg, +st_studiengang_nr, +hrst, +hssem, +statustyp_tsg, +tsg_generated, +primaerflag, +hzb_art_nr, +hzb_land_sub_r_nr , +hzb_jahr, +hzb_datum , +hzb_note, +hzb_land_nr, +abm_art_s, +abm_art_s_msg, +fachsemester, +praxissemester, +klinsem, +studienfach_sortierung, +letztes_tsg_semester, +studiengangs_typ_kb, +fach_nr, +studiengang_nr, +unikey, +kz_rueck_beur_ein, +abm_dat_s, +abm_dat_s_tsg, +T.po_stp_stp_version_kb, +null::varchar(255) as po_stp_stp_version_kb_tsg, +null::integer as po_regelstudienzeit, +null::integer as kz_rueck_beur_ein_tsg, +--null::date as spo_max_gueltig_ab_tsg, +max(SPO.gueltig_ab) as spo_max_gueltig_ab_tsg +into temp tmp_studien4 +from tmp_studien3 T left outer join costage_st_studien_spoversionen SPO +on (SPO.st_studium_nr=T.st_studium_nr +and SPO.gueltig_ab < T.semester_ende) +group by 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45 ,46, 47,48,49 ,50 ,51 --,52 +; + +select 164,timestamp_str(now()) from xdummy; + +update tmp_studien4 set po_stp_stp_version_kb_tsg= SPO.po_stp_stp_version_kb +from costage_st_studien_spoversionen SPO +where SPO.st_studium_nr=tmp_studien4.st_studium_nr +and tmp_studien4.spo_max_gueltig_ab_tsg =SPO.gueltig_ab +and tmp_studien4.studiengangs_typ_kb='TSG'; + +select 166,timestamp_str(now()) from xdummy; + + +update tmp_studien4 set kz_rueck_beur_ein_tsg=(select val(astat) +from cifx where key=400 +and apnr=tmp_studien4.statustyp_tsg +); + +select 170,timestamp_str(now()) from xdummy; + + + +drop table tmp_studien2; +drop table tmp_studien3; + + +delete from costage_st_studien_aggr +--provisorisch in Testphase: +where ${COSTAGE_STUDENT_FILTER} +and semester >= ${beginn_semester}; + +create index ix_tmp_studien2 on tmp_studien4(kz_rueck_beur_ein) +; +insert into costage_st_studien_aggr( +st_studium_nr, +st_studium_nr_tsg, + st_studstamm_nr, + matrikelnummer, + st_studiengang_nr, + st_studiengang_nr_tsg, + st_studienstatus_nr, + statustyp, + statustyp_tsg, + tsg_generated, + studiengangs_typ_kb, + hrst, + semester, + fachsemester, + praxissemester, + klinsem, + hssem, + primaerflag, + studiengang_nr, + fach_nr, + unikey, + beginn_datum_s, + beginn_datum_s_tsg, + ruebeudat, + abm_dat_s, + abm_dat_s_tsg, + stufrm, + kz_rueck_beur_ein, + kz_rueck_beur_ein_tsg, + hzb_land_nr, + hzb_land_sub_r_nr, + hzb_art_nr, + hzb_jahr, + hzb_datum, + hzb_note, + abm_art_s, + abm_art_s_tsg, + po_stp_stp_version_kb, + po_stp_stp_version_kb_tsg, + po_regelstudienzeit, + studiengangs_identifikator, + studiengangs_identifikator_tsg, + summe + ) + +select (case when studiengangs_typ_kb='TSG' then st_studium_nr_msg + else st_studium_nr end) as st_studium_nr, + (case when studiengangs_typ_kb='TSG' then st_studium_nr + else null::integer end) as st_studium_nr_tsg, + st_studstamm_nr, + matrikelnummer, + (case when studiengangs_typ_kb='TSG' then st_studiengang_nr_msg + else st_studiengang_nr end) as st_studiengang_nr, + (case when studiengangs_typ_kb='TSG' then st_studiengang_nr + else null::integer end) as st_studiengang_nr_tsg, + st_studienstatus_nr, + studienstatustyp, + statustyp_tsg, + tsg_generated, + studiengangs_typ_kb, + hrst, + semester, + fachsemester, + praxissemester, + klinsem, + hssem, + primaerflag, +--Nun ist studiengang_nr=1 definiert. Die restlichen werden mit RANK ermittelt: + (case when studiengang_nr =1 then studiengang_nr + else + dense_rank () over (partition by semester, st_studstamm_nr,studiengang_nr order by + (case when studiengangs_typ_kb='TSG' then studiengangs_identifikator_msg else st_studium_nr::varchar(255) end ))+1 + end) + as studiengang_nr, + (case when primaerflag =1 then 1 + else + dense_rank () over (partition by semester, st_studstamm_nr,studiengang_nr + order by primaerflag desc,fach_nr) + end) as fach_nr, + unikey, + beginn_datum_s, + beginn_datum_s_tsg, + (case when studienstatustyp not in ('Z','X') then gueltig_ab + else null::date end) as ruebeudat, + (case when abm_dat_s is not null then abm_dat_s + when studienstatustyp in ('Z','X') then gueltig_ab + else null::date end) as abm_dat_s, + (case when abm_dat_s_tsg is not null then abm_dat_s_tsg + when statustyp_tsg in ('Z','X') then gueltig_ab + else null::date end) as abm_dat_s_tsg, + studienform_statistik_code as stufrm, + kz_rueck_beur_ein, + kz_rueck_beur_ein_tsg, + hzb_land_nr, + hzb_land_sub_r_nr, + hzb_art_nr, + hzb_jahr, + hzb_datum, + hzb_note, + (case when studiengangs_typ_kb='TSG' then abm_art_s_msg + else abm_art_s end) as abm_art_s , + (case when studiengangs_typ_kb='TSG' then abm_art_s + else null::char(10) end) as abm_art_s_tsg , + po_stp_stp_version_kb, + po_stp_stp_version_kb_tsg, + po_regelstudienzeit, + (case when studiengangs_typ_kb='TSG' then studiengangs_identifikator_msg + else studiengangs_identifikator end) as studiengangs_identifikator, + (case when studiengangs_typ_kb='TSG' then studiengangs_identifikator + else null::varchar(255) end) as studiengangs_identifikator_tsg, + 1 as summe + from tmp_studien4 + where kz_rueck_beur_ein is not null +; + +-- The below code appends the data for the records having kz_rueck_beur_ein as NULL, this data could be helpful for other diagonostic purpose; here this is segregated +-- from above to accomodate ranking in studiengangNummer field +insert into costage_st_studien_aggr( +st_studium_nr, +st_studium_nr_tsg, + st_studstamm_nr, + matrikelnummer, + st_studiengang_nr, + st_studiengang_nr_tsg, + st_studienstatus_nr, + statustyp, + statustyp_tsg, + tsg_generated, + studiengangs_typ_kb, + hrst, + semester, + fachsemester, + praxissemester, + klinsem, + hssem, + primaerflag, + studiengang_nr, + fach_nr, + unikey, + beginn_datum_s, + beginn_datum_s_tsg, + ruebeudat, + abm_dat_s, + abm_dat_s_tsg, + stufrm, + kz_rueck_beur_ein, + kz_rueck_beur_ein_tsg, + hzb_land_nr, + hzb_land_sub_r_nr, + hzb_art_nr, + hzb_jahr, + hzb_datum, + hzb_note, + abm_art_s, + abm_art_s_tsg, + po_stp_stp_version_kb, + po_stp_stp_version_kb_tsg, + po_regelstudienzeit, + studiengangs_identifikator, + studiengangs_identifikator_tsg, + summe + ) + +select (case when studiengangs_typ_kb='TSG' then st_studium_nr_msg + else st_studium_nr end) as st_studium_nr, + (case when studiengangs_typ_kb='TSG' then st_studium_nr + else null::integer end) as st_studium_nr_tsg, + st_studstamm_nr, + matrikelnummer, + (case when studiengangs_typ_kb='TSG' then null::integer + else st_studiengang_nr end) as st_studiengang_nr, + (case when studiengangs_typ_kb='TSG' then st_studiengang_nr + else null::integer end) as st_studiengang_nr_tsg, + st_studienstatus_nr, + studienstatustyp, + statustyp_tsg, + tsg_generated, + studiengangs_typ_kb, + hrst, + semester, + fachsemester, + praxissemester, + klinsem, + hssem, + primaerflag, +--Nun ist studiengang_nr=1 definiert. Die restlichen werden mit RANK ermittelt: + -- (case when studiengang_nr is not null then studiengang_nr + -- else + -- dense_rank () over (partition by semester, st_studstamm_nr,studiengang_nr order by + -- (case when studiengangs_typ_kb='TSG' then st_absz_nr else st_studium_nr end ))+1 + -- end) + -- as studiengang_nr, +cast (NULL as int) as studiengang_nr2, + (case when primaerflag =1 then 1 + else + dense_rank () over (partition by semester, st_studstamm_nr,studiengang_nr + order by primaerflag desc, fach_nr) + end) as fach_nr, + unikey, + beginn_datum_s, + beginn_datum_s_tsg, + (case when studienstatustyp not in ('Z','X') then gueltig_ab + else null::date end) as ruebeudat, + (case when abm_dat_s is not null then abm_dat_s + when studienstatustyp in ('Z','X') then gueltig_ab + else null::date end) as abm_dat_s, + (case when abm_dat_s_tsg is not null then abm_dat_s_tsg + when statustyp_tsg in ('Z','X') then gueltig_ab + else null::date end) as abm_dat_s_tsg, + studienform_statistik_code as stufrm, + kz_rueck_beur_ein, + kz_rueck_beur_ein_tsg, + hzb_land_nr, + hzb_land_sub_r_nr, + hzb_art_nr, + hzb_jahr, + hzb_datum, + hzb_note, + (case when studiengangs_typ_kb='TSG' then abm_art_s_msg + else abm_art_s end) as abm_art_s , + (case when studiengangs_typ_kb='TSG' then abm_art_s + else null::char(10) end) as abm_art_s_tsg , + po_stp_stp_version_kb, + po_stp_stp_version_kb_tsg, + po_regelstudienzeit, + (case when studiengangs_typ_kb='TSG' then studiengangs_identifikator_msg + else studiengangs_identifikator end) as studiengangs_identifikator, + (case when studiengangs_typ_kb='TSG' then studiengangs_identifikator + else null::varchar(255) end) as studiengangs_identifikator_tsg, + 1 as summe + from tmp_studien4 + where kz_rueck_beur_ein is null + ; +select 180,timestamp_str(now()) from xdummy; + +--Wenn pro Semester und Matrikelnr. keine studiengang_nr=1 existiert, werden diese um 1 reduziert: +select st_studstamm_nr,semester,min(studiengang_nr) as studiengang_nr_min +into temp tmp_studien_ohne_studiengangnr_1 +from costage_st_studien_aggr + where kz_rueck_beur_ein is not null + group by 1,2 + ; + +update costage_st_studien_aggr set studiengang_nr=studiengang_nr -1 +where studiengang_nr > 1 +and tsg_generated=1 +and not exists (select S.st_studstamm_nr from tmp_studien_ohne_studiengangnr_1 S +where S.st_studstamm_nr=costage_st_studien_aggr.st_studstamm_nr +and S.semester=costage_st_studien_aggr.semester +and S.studiengang_nr_min=1 +) +; + +drop table tmp_studien_ohne_studiengangnr_1; + +select 190,timestamp_str(now()) from xdummy; + + + +--Abmeldungsart: +--Abmeldungsart studienbezogen bei TSG: +update costage_st_studien_aggr set abm_art_s=P.st_abm_art_kurzbezeichnung +from costage_st_personen_abmeldungen P, costage_st_semester S +where S.st_sem_nr=P.st_sem_nr +and S.semester_tid=costage_st_studien_aggr.semester +and P.st_studium_nr=costage_st_studien_aggr.st_studium_nr +and P.person_flag='N' +and costage_st_studien_aggr.studiengangs_typ_kb='TSG' +and costage_st_studien_aggr.semester >= ${beginn_semester} +; +select 200,timestamp_str(now()) from xdummy; + +--Beurlaubungs-Art: + +update costage_st_studien_aggr set urlaub_art=U.st_urlaub_typ_nr +from costage_st_urlaube U, costage_st_semester S +where S.st_sem_nr=U.st_sem_nr +and S.semester_tid=costage_st_studien_aggr.semester +and U.st_studstamm_nr=costage_st_studien_aggr.st_studstamm_nr +and costage_st_studien_aggr.semester >= ${beginn_semester} +; + +--Wohnorte: +--zuerst Semesterwohnsitz Ort: +update costage_st_studien_aggr set adresse_ort_s=A.land_kfz_kennzeichen_subregion +from costage_st_adressen A +where A.st_studstamm_nr=costage_st_studien_aggr.st_studstamm_nr +and A.st_adresse_typ='S' +and costage_st_studien_aggr.semester >= ${beginn_semester} +; +--dann Semesterwohnsitz Staat: +update costage_st_studien_aggr set adresse_staat_s=A.st_land_nr +from costage_st_adressen A +where A.st_studstamm_nr=costage_st_studien_aggr.st_studstamm_nr +and A.st_adresse_typ='H' +and costage_st_studien_aggr.semester >= ${beginn_semester} +; +--dann Heimatwohnsitz Ort: +update costage_st_studien_aggr set adresse_ort_h=A.land_kfz_kennzeichen_subregion +from costage_st_adressen A +where A.st_studstamm_nr=costage_st_studien_aggr.st_studstamm_nr +and A.st_adresse_typ='H' +and costage_st_studien_aggr.semester >= ${beginn_semester} +; +--dann Heimatwohnsitz Staat: +update costage_st_studien_aggr set adresse_staat_h=A.st_land_nr +from costage_st_adressen A +where A.st_studstamm_nr=costage_st_studien_aggr.st_studstamm_nr +and A.st_adresse_typ='H' +and costage_st_studien_aggr.semester >= ${beginn_semester} +; + +--Studiengangs-TID ermitteln: +update costage_st_studien_aggr set studiengang_tid=D.tid +from costage_dim_studiengang D +where D.st_studiengang_nr=costage_st_studien_aggr.st_studiengang_nr +and costage_st_studien_aggr.studiengangs_typ_kb='ESG'; + +update costage_st_studien_aggr set studiengang_tid= D.tid +from costage_dim_studiengang D +where D.st_studiengang_nr=costage_st_studien_aggr.st_studiengang_nr_tsg +and costage_st_studien_aggr.studiengangs_typ_kb='TSG'; + + +select 300,timestamp_str(now()) from xdummy; + + + + +drop table tmp_studien4; +drop table tmp_primaer_msg; + -- K_CO_interpret_primaerflag==1 + + diff --git a/src-modules/module/costage/hilfstabellen/costage_st_studien_aggr_fuellen_ohne_primerflag.sql b/src-modules/module/costage/hilfstabellen/costage_st_studien_aggr_fuellen_ohne_primerflag.sql new file mode 100644 index 0000000..15bc630 --- /dev/null +++ b/src-modules/module/costage/hilfstabellen/costage_st_studien_aggr_fuellen_ohne_primerflag.sql @@ -0,0 +1,1093 @@ +--freemarker template + + + + + +drop table if exists tmp_studien; +drop table if exists tmp_studien_esg_tsg; +drop table if exists tmp_tsg2msg; +<#if K_CO_interpret_primaerflag !=1 > +--das gesamte Script läuft nur wenn K_CO_interpret_primaerflag ungleich 1 gesetzt ist: +SELECT +SM.semester_tid as semester, +SM.semester_anfang, +SM.semester_ende, +SG.st_absz_nr, +SG.st_skz_nr, +SG.studiengangs_identifikator, +(case when SG.studiengangs_typ_kb in ('TSG') then studiengangs_identifikator else null::varchar(255) end) as studiengangs_identifikator_tsg, +SG.studiengangs_bezeichnung, +SM.st_sem_nr, +ST.st_studium_nr, +(case when SG.studiengangs_typ_kb in ('TSG') then ST.st_studium_nr else null::integer end) as st_studium_nr_tsg, +S.st_studstamm_nr, +ST.st_studiengang_nr, +(case when SG.studiengangs_typ_kb in ('TSG') then ST.st_studiengang_nr else null::integer end) as st_studiengang_nr_tsg, +SG.studiengangs_typ_kb, +SA.studienstatustyp, +SA.st_studienstatus_nr, +(case when SG.studiengangs_typ_kb in ('TSG') then date(SA.beginn_datum) else null::timestamp end) as beginn_datum_s_tsg, +SA.beginn_datum as beginn_datum_s, +SA.gueltig_ab, +val(S.matrikelnummer) as matrikelnummer, +S.geschlecht, +S.ca12_staat, +S.second_nationality, +SG.fachkennzeichen, +ST.studienform_statistik_code, +null::varchar(255) as studiengangs_identifikator_msg, +null::integer as st_studiengang_nr_msg_primaerflag, +null::char(10) as hrst, +null::integer as fachsemester, +null::integer as praxissemester, +null::integer as hssem, +null::integer as klinsem, +(case when SG.studiengangs_typ_kb in ('TSG') then SA.studienstatustyp else null::char(10) end) as statustyp_tsg, +(case when ST.hauptstudium_flag='J' then 1::smallint else 0::smallint end) as primaerflag_studien, +0::smallint as tsg_generated, +--0::smallint as primaerflag, +null::integer as studiengang_nr, +null::integer as studienfach_sortierung, +null::char(10) as unikey, +null::date as anfdat, +null::date as ruebeudat, +null::date as abm_dat_s, +null::date as abm_dat_s_tsg, +null::smallint as kz_rueck_beur_ein, +null::smallint as kz_rueck_beur_ein_tsg, +null::integer as hzb_art_nr, +null::integer as hzb_land_nr, +null::integer as hzb_land_sub_r_nr , +null::integer as hzb_jahr, +null::date as hzb_datum , +null::decimal(14,7) as hzb_note, +null::char(10) as abm_art_s, +null::char(10) as abm_art_s_tsg, +null::char(10) as stg_astat, +null::char(10) as abschluss_astat, +0::integer as studiengang_nr_aus_astat, +rank () over (partition by SM.st_sem_nr, S.st_studstamm_nr, SG.studiengangs_identifikator order by SA.gueltig_ab desc,SA.studienstatustyp desc) as status_historie +--rank () over (partition by SM.st_sem_nr, S.st_studstamm_nr, SG.studiengangs_identifikator order by (case when SA.gueltig_ab =SM.semester_ende then date_val('01.01.1900') else SA.gueltig_ab end) desc) as status_historie +into temp tmp_studien +FROM costage_st_studierendenstammdaten S, + costage_st_studien ST, + costage_st_semester SM, + costage_st_studiengaenge SG , + costage_st_studienstatus SA + + +where +S.st_studstamm_nr = ST.st_studstamm_nr +and ST.st_studiengang_nr=SG.st_studiengang_nr +and S.matrikelnummer is not null +and SG.studiengangs_typ_kb in ('ESG','TSG','MSG') +and SA.st_studium_nr=ST.st_studium_nr +and SA.st_sem_nr=SM.st_sem_nr +and SA.gueltig_ab <=SM.semester_ende --nur letzter Status im jew. Semester interessiert, nicht danach +and (SA.studienstatustyp not in ('Z','X') or ( + SA.studienstatustyp in ('Z','X') + and SA.gueltig_ab <= today() + and date(SA.gueltig_ab) < date(SM.semester_ende) + )) --Studis außer erst/neueinschr/rückmeld/beurlaubt werden in der Semestermitte exmatr. zum Endedatum Semesterende, wenn dieses Datum in der Zukunft liegt soll der Studi mit dem vorherigen Status erscheinen +<#if COSTAGE_STUDIENSTATUS_FILTER?exists> +and ${COSTAGE_STUDIENSTATUS_FILTER} +<#else> +and SA.studienstatustyp not in ('a','o','z') + +and ${COSTAGE_STUDENT_FILTER} +and SM.semester_tid >= ${beginn_semester} +; + +select 1,timestamp_str(now()) from xdummy; + +update tmp_studien +set hrst=H.hoererstatus_kb +from costage_st_hoererstatus H +where tmp_studien.st_studstamm_nr = H.st_studstamm_nr +and tmp_studien.st_sem_nr = H.st_sem_nr +and hoererstatus_kb != 'E' --der Hörerstatus "E - Exmatrikuliert" gilt eigentlich erst zum Studienende, hat aber kein "gültig ab" Datum. Der Hörerstatus "E" kann ignoriert werden. +; + + +<#if K_CO_interpret_primaerflag==2> + +select 5,'studiengang_nr aus astat',timestamp_str(now()) from xdummy; + +update tmp_studien T set stg_astat=(select F.statistik_code +from costage_st_studiengaenge G, costage_st_studienfaecher F,costage_st_studienkennzahlen SK +where T.st_studiengang_nr=G.st_studiengang_nr +and F.st_stdfach_nr=SK.st_stdfach_nr +and G.skz_key=SK.skz_key); + +update tmp_studien T set abschluss_astat=(select A.statistik_code +from costage_st_studiengaenge G, costage_st_abschlussziele_amtstat A,costage_st_abschlussziele_lokal AL +where T.st_studiengang_nr=G.st_studiengang_nr +and A.st_absz_amtstat_nr=AL.st_absz_amtstat_nr +and G.st_absz_nr=AL.st_absz_nr); + +update tmp_studien T set (studiengang_nr,fach_nr,studiengang_nr_aus_astat)= +(select A.studiengang_nr,A.fach_nr,1 + FROM qa_sos_stg_aggr_astat A + where A.matrikel_nr=T.matrikelnummer + and A.sem_rueck_beur_ein=T.semester + and A.stg=T.stg_astat + and A.abschluss=T.abschluss_astat + and A.kz_rueck_beur_ein!=5) + where 1=(select count(*) + FROM qa_sos_stg_aggr_astat A + where A.matrikel_nr=T.matrikelnummer + and A.sem_rueck_beur_ein=T.semester + and A.stg=T.stg_astat + and A.abschluss=T.abschluss_astat + and A.kz_rueck_beur_ein!=5); +<#elseif K_CO_interpret_primaerflag==0> + +select 7,'studiengang_nr aus beginn_datum_s',timestamp_str(now()) from xdummy; + +select st_studstamm_nr,st_studium_nr,semester,dense_rank () over (partition by semester, st_studstamm_nr order by + (beginn_datum_s) + ) as studiengang_nr + into temp tmp_studiengang_nr + from tmp_studien T where T.studiengangs_typ_kb in ('ESG','MSG') + and T.status_historie=1; +update tmp_studien T set studiengang_nr=N.studiengang_nr +from tmp_studiengang_nr N +where N.st_studstamm_nr=T.st_studstamm_nr +and N.st_studium_nr=T.st_studium_nr +and N.semester=T.semester; + +drop table tmp_studiengang_nr; + + + +--tmp_studien enthält TSG, ESG und MSG +--zuerst die msg: +drop table if exists tmp_studien_msg; + +select +st_absz_nr, +st_skz_nr, +studiengangs_identifikator, +studiengangs_bezeichnung, +st_studium_nr, +st_studstamm_nr, +st_studiengang_nr, +studienstatustyp, +st_studienstatus_nr, +beginn_datum_s, +gueltig_ab, +semester, +studiengang_nr, +hrst, +null::char(10) as abm_art_s + into temp tmp_studien_msg +from tmp_studien T where T.studiengangs_typ_kb in ('MSG') +and T.status_historie=1 +; + +--Abmeldungsart studienbezogen MSG: +update tmp_studien_msg M set abm_art_s=P.st_abm_art_kurzbezeichnung +from costage_st_personen_abmeldungen P, costage_st_semester S +where S.st_sem_nr=P.st_sem_nr +and S.semester_tid=M.semester +and P.st_studium_nr=M.st_studium_nr +and P.person_flag='N' +; + +select 10,timestamp_str(now()) from xdummy; + +--TSG: wir machen den MSG von einer Zeile zu einer Spalte +drop table if exists tmp_studien_tsg; + + +select T.*, +null::integer as letztes_tsg_semester, +null::integer as st_studium_nr_msg, +null::integer as st_studiengang_nr_msg, +null::char(10) as abm_art_s_msg +into temp tmp_studien_tsg +from tmp_studien T + where T.status_historie=1 + and T.studiengangs_typ_kb in ('TSG') + ; + + +update tmp_studien_tsg T set st_studium_nr_msg=MSG.st_studium_nr , +st_studiengang_nr_msg=MSG.st_studiengang_nr, +studiengang_nr=MSG.studiengang_nr, +studienfach_sortierung=MTSG.studienfach_sortierung, +abm_art_s_msg=MSG.abm_art_s +from tmp_studien_msg MSG, costage_st_studiengaenge_mtsg MTSG +where T.studiengangs_typ_kb in ('TSG') +and T.semester=MSG.semester + and T.st_studstamm_nr=MSG.st_studstamm_nr +and T.st_studiengang_nr=MTSG.st_studiengang_nr_tsg + and T.st_absz_nr=MSG.st_absz_nr +and MSG.st_studiengang_nr=MTSG.st_studiengang_nr_msg +; + + +select 20,timestamp_str(now()) from xdummy; + +create index tmp_ix3 on tmp_studien(studiengangs_typ_kb); +create index tmp_ix5 on tmp_studien(status_historie); +create index tmp_ix6 on tmp_studien(primaerflag_studien); + + +--statustyp bei TSG aus MSG nachladen: +update tmp_studien_tsg set studienstatustyp=S.studienstatustyp, +studiengangs_identifikator_msg=S.studiengangs_identifikator, +beginn_datum_s=S.beginn_datum_s +from tmp_studien_msg S +where tmp_studien_tsg.st_studium_nr_msg=S.st_studium_nr +and tmp_studien_tsg.st_studstamm_nr=S.st_studstamm_nr +and tmp_studien_tsg.semester=S.semester + +; + +select 70,timestamp_str(now()) from xdummy; + + + +--select * from tmp_studien +--where semester=20212; + + + + + +<#if K_COSTAGE_TSG_GENERATE == 1> + +--start generierung: +drop table if exists tmp_studien_msg_tsg; + +select MTSG.st_studiengang_nr_tsg as st_studiengang_nr_tsg, +MSG.st_studstamm_nr, +MSG.st_studiengang_nr as st_studiengang_nr_msg, +min(MSG.semester) as startsemester_msg, +max(MSG.semester) as endsemester_msg, +max(TSG.semester) as endsemester_tsg +into temp tmp_studien_msg_tsg + from tmp_studien_msg MSG, costage_st_studiengaenge_mtsg MTSG , tmp_studien_tsg TSG +where MTSG.st_studiengang_nr_msg=MSG.st_studiengang_nr +and TSG.st_studiengang_nr=MTSG.st_studiengang_nr_tsg +and TSG.st_studstamm_nr=MSG.st_studstamm_nr +--and TSG.st_studium_nr_msg=MSG.st_studium_nr +and MSG.studienstatustyp in ('U','B','E','I','X','Z') --nur tatsächlich eingeschrieben; +group by 1,2,3 +; + +select 90,timestamp_str(now()) from xdummy; + + +select 100,timestamp_str(now()) from xdummy; + +--nun fehlende Datensätze ermitteln: +drop table if exists tmp_studien_msg_tsg_fehlend; + +select distinct S.semester_tid as semester, +S.semester_anfang, +S.semester_ende, +S.st_sem_nr, +T.st_studstamm_nr, +T.st_studiengang_nr_tsg, +T.st_studiengang_nr_msg, +T.endsemester_tsg + into temp tmp_studien_msg_tsg_fehlend +from costage_st_semester S inner join tmp_studien_msg_tsg T on +(S.semester_tid between T.startsemester_msg and T.endsemester_msg) --enthält alle möglichen TSG +left outer join tmp_studien_tsg TSG --enthält die tatsächlich vorhandenen TSG +on (TSG.st_studiengang_nr=T.st_studiengang_nr_tsg +and TSG.st_studstamm_nr=T.st_studstamm_nr +and S.semester_tid=TSG.semester) +where +TSG.st_studstamm_nr is null +; + + + +drop table if exists tmp_studien_msg_tsg_fehlend2; + + +--Studiengangsdaten des TSG nachladen: +--Ein Studi kann einen TSG mehrmals schließen (z.B. Beurlaubung) +--daher wird das max. Semester genommen, und der Status dann nachgeladen: +select F.semester, +F.semester_anfang, +F.semester_ende, + T.st_absz_nr, + T.st_skz_nr, + T.studiengangs_identifikator, + T.studiengangs_bezeichnung, +F.st_sem_nr, + T.st_studium_nr, +T.st_studstamm_nr, + T.studiengangs_typ_kb, + T.matrikelnummer, + T.geschlecht, + T.ca12_staat, + T.second_nationality, + T.fachkennzeichen, + T.studienform_statistik_code, + --T.st_studiengang_nr_msg, + F.st_studiengang_nr_msg, +-- T.studiengangs_identifikator_msg, + T.st_studiengang_nr as st_studiengang_nr_tsg, +null::char(10) as hrst, +null::integer as hssem, +null::char(10) as studienstatustyp, +null::char(10) as statustyp_tsg, +1::integer as tsg_generated, +-- T.primaerflag, + T.hzb_art_nr, + T.hzb_land_sub_r_nr , + T.hzb_jahr, + T.hzb_datum , + T.hzb_note, + T.hzb_land_nr, +null::char(10) as abm_art_s, +null::char(10) as abm_art_s_msg, +studiengang_nr, +studienfach_sortierung, +null::timestamp as beginn_datum_s, +null::timestamp as beginn_datum_s_tsg, +null::timestamp AS gueltig_ab, +null::integer as st_studienstatus_nr, +null::integer as primaerflag_studien_msg, +null::integer as st_studium_nr_msg, +max(T.semester) as letztes_tsg_semester, +max(T.fachsemester) as fachsemester, +max(T.praxissemester) as praxissemester, +max(T.klinsem) as klinsem +into temp tmp_studien_msg_tsg_fehlend2 +from tmp_studien_msg_tsg_fehlend F, tmp_studien_tsg T +where F.st_studstamm_nr=T.st_studstamm_nr +and F.st_studiengang_nr_tsg=T.st_studiengang_nr +and T.semester=F.endsemester_tsg +group by 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,23,24,25,26,27,28,29 ,30 ,31,32 ,33 ,34,35,36,37,38,39,40 +; + +update tmp_studien_msg_tsg_fehlend2 set +hssem=S.hssem, +statustyp_tsg=S.statustyp_tsg, +abm_art_s=S.abm_art_s, +abm_art_s_msg=S.abm_art_s_msg, +beginn_datum_s =S.beginn_datum_s, +beginn_datum_s_tsg =S.beginn_datum_s_tsg, +gueltig_ab=S.gueltig_ab, +st_studienstatus_nr=S.st_studienstatus_nr, +st_studium_nr_msg=S.st_studium_nr_msg + from tmp_studien_tsg S + where S.st_studiengang_nr=tmp_studien_msg_tsg_fehlend2.st_studiengang_nr_tsg + and S.st_studstamm_nr=tmp_studien_msg_tsg_fehlend2.st_studstamm_nr + and S.semester=tmp_studien_msg_tsg_fehlend2.letztes_tsg_semester + ; + + + +--fehlende Semester nachtragen: +insert into tmp_studien_tsg(semester, +semester_anfang, +semester_ende, +st_absz_nr, +st_skz_nr, +studiengangs_identifikator, +studiengangs_bezeichnung, +st_sem_nr, +st_studium_nr, +st_studstamm_nr, +studienstatustyp, +st_studienstatus_nr, +beginn_datum_s, +beginn_datum_s_tsg, +gueltig_ab, +matrikelnummer, +geschlecht, +ca12_staat, +second_nationality, +fachkennzeichen, +studienform_statistik_code, +st_studiengang_nr_msg, +studiengangs_identifikator_msg, +st_studiengang_nr, +hrst, +hssem, +statustyp_tsg, +tsg_generated, +hzb_art_nr, +hzb_land_sub_r_nr , +hzb_jahr, +hzb_datum , +hzb_note, +hzb_land_nr, +abm_art_s, +abm_art_s_msg, +fachsemester, +praxissemester, +klinsem, +studiengang_nr, +studienfach_sortierung, +letztes_tsg_semester, +st_studium_nr_msg +) +select distinct semester, +semester_anfang, +semester_ende, +F.st_absz_nr, +F.st_skz_nr, +F.studiengangs_identifikator, +F.studiengangs_bezeichnung, +st_sem_nr, +st_studium_nr, +st_studstamm_nr, +studienstatustyp, +st_studienstatus_nr, +beginn_datum_s, +beginn_datum_s_tsg, +gueltig_ab, +matrikelnummer, +geschlecht, +ca12_staat, +second_nationality, +F.fachkennzeichen, +studienform_statistik_code, +st_studiengang_nr_msg, +G.studiengangs_identifikator as studiengangs_identifikator_msg, +st_studiengang_nr_tsg, +hrst, +hssem, +'X' as statustyp_tsg, -- generierte TSG sind immer geschlossen S.statustyp_tsg, +1::integer as tsg_generated, +hzb_art_nr, +hzb_land_sub_r_nr , +hzb_jahr, +hzb_datum , +hzb_note, +hzb_land_nr, +abm_art_s, +abm_art_s_msg, +fachsemester, +praxissemester, +klinsem, +studiengang_nr, +studienfach_sortierung, +letztes_tsg_semester, +st_studium_nr_msg +from tmp_studien_msg_tsg_fehlend2 F, costage_st_studiengaenge G +where G.st_studiengang_nr=F.st_studiengang_nr_msg + ; + + + +select 110,timestamp_str(now()) from xdummy; + + + +--statustyp und hrst nachladen: + update tmp_studien_tsg set studienstatustyp=S.studienstatustyp, + hrst=S.hrst + from tmp_studien_msg S + where tmp_studien_tsg.st_studiengang_nr_msg=S.st_studiengang_nr + and tmp_studien_tsg.st_studstamm_nr=S.st_studstamm_nr + and tmp_studien_tsg.tsg_generated=1 + and tmp_studien_tsg.semester=S.semester + ; + + +--select * from tmp_studien_msg_tsg_fehlend2; + + +select 120,timestamp_str(now()) from xdummy; + + +drop table tmp_studien_msg_tsg_fehlend; +drop table tmp_studien_msg_tsg_fehlend2; +drop table tmp_studien_msg_tsg; + + + + +-------------------------------------------------------------------- +--Zusammenführen ESG und TSG: + +select 130,timestamp_str(now()) from xdummy; + +drop table if exists tmp_studien_esg_tsg; + +select +semester, +semester_anfang, +semester_ende, +st_absz_nr, +st_skz_nr, +studiengangs_identifikator, +studiengangs_bezeichnung, +st_sem_nr, +st_studium_nr, +st_studium_nr_msg, +st_studstamm_nr, +studienstatustyp, +st_studienstatus_nr, +beginn_datum_s, +beginn_datum_s_tsg, +gueltig_ab, +matrikelnummer, +geschlecht, +ca12_staat, +second_nationality, +fachkennzeichen, +studienform_statistik_code, +st_studiengang_nr_msg, +studiengangs_identifikator_msg, +st_studiengang_nr, +hrst, +hssem, +statustyp_tsg, +tsg_generated, +hzb_art_nr, +hzb_land_sub_r_nr , +hzb_jahr, +hzb_datum , +hzb_note, +hzb_land_nr, +abm_art_s, +null::char(10) as abm_art_s_msg, +fachsemester, +praxissemester, +klinsem, +studienfach_sortierung, +letztes_tsg_semester, +'TSG'::char(10) as studiengangs_typ_kb, +studiengang_nr, +null::char(10) as unikey, +null::integer as kz_rueck_beur_ein, +abm_dat_s, +abm_dat_s_tsg +into temp tmp_studien_esg_tsg +from tmp_studien_tsg; + +--Wenn TSG automat. generiert sind passt die Nr. des MSG nach einem Fachwechsel nicht mehr, +--daher korrigieren nach der Generierung: + +update tmp_studien_esg_tsg T set st_studium_nr_msg=MSG.st_studium_nr from tmp_studien_msg MSG, costage_st_studiengaenge_mtsg MTSG +where T.studiengangs_typ_kb in ('TSG') +and T.semester=MSG.semester +and T.st_studstamm_nr=MSG.st_studstamm_nr +and T.st_studiengang_nr=MTSG.st_studiengang_nr_tsg +and T.st_absz_nr=MSG.st_absz_nr +and MSG.st_studiengang_nr=MTSG.st_studiengang_nr_msg +and T.tsg_generated=1 +; +--TODO: SPO auch nachladen + + +--nun die ESG: +insert into tmp_studien_esg_tsg(semester, +semester_anfang, +semester_ende, +st_absz_nr, +st_skz_nr, +studiengangs_identifikator, +studiengangs_bezeichnung, +st_sem_nr, +st_studium_nr, +st_studstamm_nr, +studienstatustyp, +st_studienstatus_nr, +beginn_datum_s, +beginn_datum_s_tsg, +gueltig_ab, +matrikelnummer, +geschlecht, +ca12_staat, +second_nationality, +fachkennzeichen, +studienform_statistik_code, +st_studiengang_nr_msg, +studiengangs_identifikator_msg, +st_studiengang_nr, +hrst, +hssem, +studiengang_nr, +statustyp_tsg, +tsg_generated, +hzb_art_nr, +hzb_land_sub_r_nr , +hzb_jahr, +hzb_datum , +hzb_note, +hzb_land_nr, +abm_art_s, +fachsemester, +praxissemester, +klinsem, +studienfach_sortierung, +letztes_tsg_semester, +studiengangs_typ_kb, +abm_dat_s +) +select +semester, +semester_anfang, +semester_ende, +st_absz_nr, +st_skz_nr, +studiengangs_identifikator, +studiengangs_bezeichnung, +st_sem_nr, +st_studium_nr, +st_studstamm_nr, +studienstatustyp, +st_studienstatus_nr, +beginn_datum_s, +beginn_datum_s_tsg, +gueltig_ab, +matrikelnummer, +geschlecht, +ca12_staat, +second_nationality, +fachkennzeichen, +studienform_statistik_code, +null::integer as st_studiengang_nr_msg, +null::varchar(255) as studiengangs_identifikator_msg, +st_studiengang_nr, +hrst, +hssem, +studiengang_nr, +null::char(10) as statustyp_tsg, +0::integer as tsg_generated, +hzb_art_nr, +hzb_land_sub_r_nr , +hzb_jahr, +hzb_datum , +hzb_note, +hzb_land_nr, +abm_art_s, +fachsemester, +praxissemester, +klinsem, +1::integer as studienfach_sortierung, +null::integer as letztes_tsg_semester, +studiengangs_typ_kb, +abm_dat_s +from tmp_studien E +where E.studiengangs_typ_kb='ESG'; + + + + +drop table tmp_studien; +drop table tmp_studien_tsg; + + +update tmp_studien_esg_tsg set studienfach_sortierung=1 +where studienfach_sortierung is null; + +select 140,timestamp_str(now()) from xdummy; + + +update tmp_studien_esg_tsg set unikey=K.unikey +from costage_st_studiengaenge G, costage_st_studienkennzahlen K +where G.st_studiengang_nr=tmp_studien_esg_tsg.st_studiengang_nr +and K.st_skz_nr=G.st_skz_nr +; + +update tmp_studien_esg_tsg set kz_rueck_beur_ein=(select val(astat) +from cifx where key=400 +and apnr=tmp_studien_esg_tsg.studienstatustyp +); + + +update tmp_studien_esg_tsg +set hssem=H.anzahl_hochschulsemester +from costage_st_hochschulsemester H +where H.st_studstamm_nr=tmp_studien_esg_tsg.st_studstamm_nr +and H.st_sem_nr=tmp_studien_esg_tsg.st_sem_nr +; + +--SPO-Version (letzte im jew. Semester) ermitteln: +select +semester, +semester_anfang, +semester_ende, +st_absz_nr, +st_skz_nr, +studiengangs_identifikator, +studiengangs_bezeichnung, +st_sem_nr, +T.st_studium_nr, +T.st_studium_nr_msg, +st_studstamm_nr, +studienstatustyp, +st_studienstatus_nr, +beginn_datum_s, +beginn_datum_s_tsg, +T.gueltig_ab, +matrikelnummer, +geschlecht, +ca12_staat, +second_nationality, +fachkennzeichen, +studienform_statistik_code, +st_studiengang_nr_msg, +studiengangs_identifikator_msg, +st_studiengang_nr, +hrst, +hssem, +statustyp_tsg, +tsg_generated, +hzb_art_nr, +hzb_land_sub_r_nr , +hzb_jahr, +hzb_datum , +hzb_note, +hzb_land_nr, +abm_art_s, +abm_art_s_msg, +fachsemester, +praxissemester, +klinsem, +studienfach_sortierung, +letztes_tsg_semester, +studiengangs_typ_kb, +studiengang_nr, +unikey, +kz_rueck_beur_ein, +abm_dat_s, +abm_dat_s_tsg, +null::varchar(255) as po_stp_stp_version_kb, +null::varchar(255) as po_stp_stp_version_kb_tsg, +null::integer as po_regelstudienzeit, +null::integer as kz_rueck_beur_ein_tsg, +null::date as spo_max_gueltig_ab_tsg, +max(SPO.gueltig_ab) as spo_max_gueltig_ab +into temp tmp_studien3 +from tmp_studien_esg_tsg T left outer join costage_st_studien_spoversionen SPO +on ( +( +(studiengangs_typ_kb='TSG' and SPO.st_studium_nr=T.st_studium_nr_msg) +or +(studiengangs_typ_kb='ESG' and SPO.st_studium_nr=T.st_studium_nr) +) +and SPO.gueltig_ab < T.semester_ende) +group by 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45 ,46, 47,48 --,51,52 +; + +select 160,timestamp_str(now()) from xdummy; + +update tmp_studien3 set po_stp_stp_version_kb= SPO.po_stp_stp_version_kb, +po_regelstudienzeit=SPO.po_regelstudienzeit +from costage_st_studien_spoversionen SPO +where ( +(studiengangs_typ_kb='TSG' and SPO.st_studium_nr=tmp_studien3.st_studium_nr_msg) +or +(studiengangs_typ_kb='ESG' and SPO.st_studium_nr=tmp_studien3.st_studium_nr) +) +and tmp_studien3.spo_max_gueltig_ab =SPO.gueltig_ab; + +select 162,timestamp_str(now()) from xdummy; + +--nun TSG SPO Version +--SPO-Version (letzte im jew. Semester) ermitteln: +select +semester, +semester_anfang, +semester_ende, +st_absz_nr, +st_skz_nr, +studiengangs_identifikator, +studiengangs_bezeichnung, +st_sem_nr, +T.st_studium_nr, +T.st_studium_nr_msg, +st_studstamm_nr, +studienstatustyp, +st_studienstatus_nr, +beginn_datum_s, +beginn_datum_s_tsg, +T.gueltig_ab, +matrikelnummer, +geschlecht, +ca12_staat, +second_nationality, +fachkennzeichen, +studienform_statistik_code, +st_studiengang_nr_msg, +studiengangs_identifikator_msg, +st_studiengang_nr, +hrst, +hssem, +statustyp_tsg, +tsg_generated, +hzb_art_nr, +hzb_land_sub_r_nr , +hzb_jahr, +hzb_datum , +hzb_note, +hzb_land_nr, +abm_art_s, +abm_art_s_msg, +fachsemester, +praxissemester, +klinsem, +studienfach_sortierung, +letztes_tsg_semester, +studiengangs_typ_kb, +studiengang_nr, +unikey, +kz_rueck_beur_ein, +abm_dat_s, +abm_dat_s_tsg, +T.po_stp_stp_version_kb, +null::varchar(255) as po_stp_stp_version_kb_tsg, +null::integer as po_regelstudienzeit, +null::integer as kz_rueck_beur_ein_tsg, +--null::date as spo_max_gueltig_ab_tsg, +max(SPO.gueltig_ab) as spo_max_gueltig_ab_tsg +into temp tmp_studien4 +from tmp_studien3 T left outer join costage_st_studien_spoversionen SPO +on (SPO.st_studium_nr=T.st_studium_nr +and SPO.gueltig_ab < T.semester_ende) +group by 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45 ,46, 47,48,49 ,50 --,52 +; + +select 164,timestamp_str(now()) from xdummy; + +update tmp_studien4 set po_stp_stp_version_kb_tsg= SPO.po_stp_stp_version_kb +from costage_st_studien_spoversionen SPO +where SPO.st_studium_nr=tmp_studien4.st_studium_nr +and tmp_studien4.spo_max_gueltig_ab_tsg =SPO.gueltig_ab +and tmp_studien4.studiengangs_typ_kb='TSG'; + +select 166,timestamp_str(now()) from xdummy; + + +update tmp_studien4 set kz_rueck_beur_ein_tsg=(select val(astat) +from cifx where key=400 +and apnr=tmp_studien4.statustyp_tsg +); + +select 170,timestamp_str(now()) from xdummy; + + + +drop table tmp_studien_esg_tsg; +drop table tmp_studien3; + + +delete from costage_st_studien_aggr +--provisorisch in Testphase: +where ${COSTAGE_STUDENT_FILTER} +and semester >= ${beginn_semester}; + +create index ix_tmp_studien_esg_tsg on tmp_studien4(kz_rueck_beur_ein) +; +insert into costage_st_studien_aggr( +st_studium_nr, +st_studium_nr_tsg, + st_studstamm_nr, + matrikelnummer, + st_studiengang_nr, + st_studiengang_nr_tsg, + st_studienstatus_nr, + statustyp, + statustyp_tsg, + tsg_generated, + studiengangs_typ_kb, + hrst, + semester, + fachsemester, + praxissemester, + klinsem, + hssem, + studiengang_nr, + fach_nr, + unikey, + beginn_datum_s, + beginn_datum_s_tsg, + ruebeudat, + abm_dat_s, + abm_dat_s_tsg, + stufrm, + kz_rueck_beur_ein, + kz_rueck_beur_ein_tsg, + hzb_land_nr, + hzb_land_sub_r_nr, + hzb_art_nr, + hzb_jahr, + hzb_datum, + hzb_note, + abm_art_s, + abm_art_s_tsg, + po_stp_stp_version_kb, + po_stp_stp_version_kb_tsg, + po_regelstudienzeit, + studiengangs_identifikator, + studiengangs_identifikator_tsg, + summe + ) + +select (case when studiengangs_typ_kb='TSG' then st_studium_nr_msg + else st_studium_nr end) as st_studium_nr, + (case when studiengangs_typ_kb='TSG' then st_studium_nr + else null::integer end) as st_studium_nr_tsg, + st_studstamm_nr, + matrikelnummer, + (case when studiengangs_typ_kb='TSG' then st_studiengang_nr_msg + else st_studiengang_nr end) as st_studiengang_nr, + (case when studiengangs_typ_kb='TSG' then st_studiengang_nr + else null::integer end) as st_studiengang_nr_tsg, + st_studienstatus_nr, + studienstatustyp, + statustyp_tsg, + tsg_generated, + studiengangs_typ_kb, + hrst, + semester, + fachsemester, + praxissemester, + klinsem, + hssem, + studiengang_nr, + studienfach_sortierung as fach_nr, + unikey, + beginn_datum_s, + beginn_datum_s_tsg, + (case when studienstatustyp not in ('Z','X') then gueltig_ab + else null::date end) as ruebeudat, + (case when abm_dat_s is not null then abm_dat_s + when studienstatustyp in ('Z','X') then gueltig_ab + else null::date end) as abm_dat_s, + (case when abm_dat_s_tsg is not null then abm_dat_s_tsg + when statustyp_tsg in ('Z','X') then gueltig_ab + else null::date end) as abm_dat_s_tsg, + studienform_statistik_code as stufrm, + kz_rueck_beur_ein, + kz_rueck_beur_ein_tsg, + hzb_land_nr, + hzb_land_sub_r_nr, + hzb_art_nr, + hzb_jahr, + hzb_datum, + hzb_note, + (case when studiengangs_typ_kb='TSG' then abm_art_s_msg + else abm_art_s end) as abm_art_s , + (case when studiengangs_typ_kb='TSG' then abm_art_s + else null::char(10) end) as abm_art_s_tsg , + po_stp_stp_version_kb, + po_stp_stp_version_kb_tsg, + po_regelstudienzeit, + (case when studiengangs_typ_kb='TSG' then studiengangs_identifikator_msg + else studiengangs_identifikator end) as studiengangs_identifikator, + (case when studiengangs_typ_kb='TSG' then studiengangs_identifikator + else null::varchar(255) end) as studiengangs_identifikator_tsg, + 1 as summe + from tmp_studien4 + where kz_rueck_beur_ein is not null +; + +select 180,timestamp_str(now()) from xdummy; + +--Wenn pro Semester und Matrikelnr. keine studiengang_nr=1 existiert, werden diese um 1 reduziert: +select st_studstamm_nr,semester,min(studiengang_nr) as studiengang_nr_min +into temp tmp_studien_ohne_studiengangnr_1 +from costage_st_studien_aggr + where kz_rueck_beur_ein is not null + group by 1,2 + ; + +update costage_st_studien_aggr set studiengang_nr=studiengang_nr -1 +where studiengang_nr > 1 +and tsg_generated=1 +and not exists (select S.st_studstamm_nr from tmp_studien_ohne_studiengangnr_1 S +where S.st_studstamm_nr=costage_st_studien_aggr.st_studstamm_nr +and S.semester=costage_st_studien_aggr.semester +and S.studiengang_nr_min=1 +) +; + +drop table tmp_studien_ohne_studiengangnr_1; + +select 190,timestamp_str(now()) from xdummy; + + + +--Abmeldungsart: +--Abmeldungsart studienbezogen bei TSG: +update costage_st_studien_aggr set abm_art_s=P.st_abm_art_kurzbezeichnung +from costage_st_personen_abmeldungen P, costage_st_semester S +where S.st_sem_nr=P.st_sem_nr +and S.semester_tid=costage_st_studien_aggr.semester +and P.st_studium_nr=costage_st_studien_aggr.st_studium_nr +and P.person_flag='N' +and costage_st_studien_aggr.studiengangs_typ_kb='TSG' +and costage_st_studien_aggr.semester >= ${beginn_semester} +; +select 200,timestamp_str(now()) from xdummy; + +--Beurlaubungs-Art: + +update costage_st_studien_aggr set urlaub_art=U.st_urlaub_typ_nr +from costage_st_urlaube U, costage_st_semester S +where S.st_sem_nr=U.st_sem_nr +and S.semester_tid=costage_st_studien_aggr.semester +and U.st_studstamm_nr=costage_st_studien_aggr.st_studstamm_nr +and costage_st_studien_aggr.semester >= ${beginn_semester} +; + +--Wohnorte: +--zuerst Semesterwohnsitz Ort: +update costage_st_studien_aggr set adresse_ort_s=A.land_kfz_kennzeichen_subregion +from costage_st_adressen A +where A.st_studstamm_nr=costage_st_studien_aggr.st_studstamm_nr +and A.st_adresse_typ='S' +and costage_st_studien_aggr.semester >= ${beginn_semester} +; +--dann Semesterwohnsitz Staat: +update costage_st_studien_aggr set adresse_staat_s=A.st_land_nr +from costage_st_adressen A +where A.st_studstamm_nr=costage_st_studien_aggr.st_studstamm_nr +and A.st_adresse_typ='H' +and costage_st_studien_aggr.semester >= ${beginn_semester} +; +--dann Heimatwohnsitz Ort: +update costage_st_studien_aggr set adresse_ort_h=A.land_kfz_kennzeichen_subregion +from costage_st_adressen A +where A.st_studstamm_nr=costage_st_studien_aggr.st_studstamm_nr +and A.st_adresse_typ='H' +and costage_st_studien_aggr.semester >= ${beginn_semester} +; +--dann Heimatwohnsitz Staat: +update costage_st_studien_aggr set adresse_staat_h=A.st_land_nr +from costage_st_adressen A +where A.st_studstamm_nr=costage_st_studien_aggr.st_studstamm_nr +and A.st_adresse_typ='H' +and costage_st_studien_aggr.semester >= ${beginn_semester} +; + +--Studiengangs-TID ermitteln: +update costage_st_studien_aggr set studiengang_tid=D.tid +from costage_dim_studiengang D +where D.st_studiengang_nr=costage_st_studien_aggr.st_studiengang_nr +and costage_st_studien_aggr.studiengangs_typ_kb='ESG'; + +update costage_st_studien_aggr set studiengang_tid= D.tid +from costage_dim_studiengang D +where D.st_studiengang_nr=costage_st_studien_aggr.st_studiengang_nr_tsg +and costage_st_studien_aggr.studiengangs_typ_kb='TSG'; + + +select 300,timestamp_str(now()) from xdummy; + + + + +drop table tmp_studien4; + -- K_CO_interpret_primaerflag!=1 + + + diff --git a/src-modules/module/costage/masken/43080_maskeninfo.unl b/src-modules/module/costage/masken/43080_maskeninfo.unl index 97b0b7c..36b654d 100644 --- a/src-modules/module/costage/masken/43080_maskeninfo.unl +++ b/src-modules/module/costage/masken/43080_maskeninfo.unl @@ -100,8 +100,9 @@ SELECT name,\ \ \ \ -<#if <>=="F">\ -<#assign ldt_filter="(leistungsdetailtyp_kb in ('TSAB') or (leistungsdetailtyp_kb in ('BAKN','MAGN','STEX','ERGAB','RIGZP') and ${basetable}.studiengangs_typ_kb!='MSG'))" />\ +<#if <>=="F"> --\ +<#assign ldt_filter="(leistungsdetailtyp_kb in ('TSAB') or (leistungsdetailtyp_kb in ('BAKN','MAGN','STEX','ERGAB','RIGZP') and "+basetable+".studiengangs_typ_kb!='MSG'))" />\ +<#assign ldt_filter=ldt_filter+" and leistungsstatus_map_kb = 'BE' and ((leistungsdetailtyp_kb in ('TSAB') and leistungsstatus_map_kb_tsg = 'BE') or "+basetable+".studiengangs_typ_kb='ESG')" />\ <#assign semester_feld="semester" />\ \ <#if <>=="T">\ diff --git a/src-modules/module/costage/rohdaten/COSTAGE_ENV.sam b/src-modules/module/costage/rohdaten/COSTAGE_ENV.sam index 0d6364b..f3a52fd 100644 --- a/src-modules/module/costage/rohdaten/COSTAGE_ENV.sam +++ b/src-modules/module/costage/rohdaten/COSTAGE_ENV.sam @@ -2,7 +2,7 @@ #Entladeumgebung für SuperX #Die folgenden Parameter müssen angepasst werden -VERSION=232 +VERSION=233 export VERSION # SX_CLIENT ist die Client-Anwendung zum Zugriff auf die DB diff --git a/src-modules/module/costage/rohdaten/costage_unload.xml b/src-modules/module/costage/rohdaten/costage_unload.xml index 5ac6e6f..a3816ba 100644 --- a/src-modules/module/costage/rohdaten/costage_unload.xml +++ b/src-modules/module/costage/rohdaten/costage_unload.xml @@ -366,39 +366,7 @@ FROM px_st_studierendenstammdaten_v - - - - - - - + = $COSTAGE_start_bw_sem diff --git a/src-modules/module/costage/rohdaten_msg/msg_costage_unload.x b/src-modules/module/costage/rohdaten_msg/msg_costage_unload.x new file mode 100755 index 0000000..d5e1b26 --- /dev/null +++ b/src-modules/module/costage/rohdaten_msg/msg_costage_unload.x @@ -0,0 +1,128 @@ +#!/bin/bash +#Extraction Script for SuperX. +#Bitte nicht ändern, diese Datei ist automatisch generiert. + +SRC_PFAD=$MSG_LOAD_PFAD +. $SUPERX_DIR/db/bin/SQL_ENV +if [ "$SRC_PFAD" = "" ] +then +SRC_PFAD=. +fi + +SX_CLIENT=jdbc +export SX_CLIENT + +SOURCESYSTEM=co +export SOURCESYSTEM + +if [ "$outFormat" = "" ] +then +outFormat=txt +fi + +DATUM=`cat $SRC_PFAD/superx.datum` +ERR=msg_unload.err +cp $SRC_PFAD/superx.datum $SRC_PFAD/superx.datum.alt + +##Löschen der alten Dateien +rm $SRC_PFAD/unl/*unl >/dev/null 2>&1 + +date +'%d.%m.%Y' > $SRC_PFAD/superx.datum ##neues Entladedatum + +HEUTE=`date +'%d.%m.%Y'` + +cd $SRC_PFAD >>$ERR 2>&1 + +echo "Letztes Update-Datum: " $DATUM >$ERR +echo "DATABASE: $DATABASE" >>$ERR +echo "VERSION: $VERSION" >>$ERR +echo "SX_CLIENT: $SX_CLIENT" >>$ERR +echo "1.2b^"$HEUTE"^" >$SRC_PFAD/unl/superx_unload_version.unl + +CP=".:$JDBC_CLASSPATH:$XML_CLASSPATH" + + +cat /dev/null >unload_params.txt + + +if [ "$MSG_UNL_COMPLETE" = "" ] +then +MSG_UNL_COMPLETE="true" +export MSG_UNL_COMPLETE +fi +echo "Parameter MSG_UNL_COMPLETE: $MSG_UNL_COMPLETE" >>$ERR +echo "\$MSG_UNL_COMPLETE=$MSG_UNL_COMPLETE" >>unload_params.txt + + +if [ "$VERSION" = "" ] +then +VERSION="13" +export VERSION +fi +echo "Parameter VERSION: $VERSION" >>$ERR +echo "\$VERSION=$VERSION" >>unload_params.txt + + +if [ "$msg_start_pruef_sem" = "" ] +then +msg_start_pruef_sem="19911" +export msg_start_pruef_sem +fi +echo "Parameter msg_start_pruef_sem: $msg_start_pruef_sem" >>$ERR +echo "\$msg_start_pruef_sem=$msg_start_pruef_sem" >>unload_params.txt + +if [ "$EXTERNAL_SUBJECTS" = "" ] +then +EXTERNAL_SUBJECTS="false" +export EXTERNAL_SUBJECTS +fi +echo "Parameter EXTERNAL_SUBJECTS: $EXTERNAL_SUBJECTS" >>$ERR +echo "\$EXTERNAL_SUBJECTS=$EXTERNAL_SUBJECTS" >>unload_params.txt + +if [ "$SOURCESYSTEM" = "" ] +then +SOURCESYSTEM="co" +export SOURCESYSTEM + +fi +echo "Parameter SOURCESYSTEM: $SOURCESYSTEM" >>$ERR +echo "\$SOURCESYSTEM=$SOURCESYSTEM" >>unload_params.txt + +#jdbc zum Entladen +if [ "$SX_CLIENT" = "jdbc" ] +then +java $JAVA_OPTS -cp $CP de.superx.bin.SxExtractor -logger:$LOGGER_PROPERTIES -dbproperties:$DB_PROPERTIES -xml:msg_costage_unload.xml -outFormat:$outFormat -delim:$DBDELIMITER -header:$header -database:$DATABASE -version:$VERSION -unload_params:unload_params.txt >>$ERR 2>&1 + +exit 0 + +fi + + +chmod go+r $ERR +chmod go+r $SRC_PFAD/superx.datum +chmod go+r $SRC_PFAD/superx.datum.alt +chmod go+w $SRC_PFAD/superx.datum +chmod go+w $SRC_PFAD/superx.datum.alt + +chmod go+r $SRC_PFAD/unl/* + +##Herstellen altes Entladedatum bei Fehler +fgrep -s "not found" $ERR >/dev/null +FLAG1=$? +fgrep -i -s "nicht gefunden" $ERR >/dev/null +FLAG2=$? +fgrep -i -s "error" $ERR >/dev/null +FLAG3=$? >/dev/null +fgrep -i -s "exception" $ERR >/dev/null +FLAG4=$? >/dev/null +fgrep -i -s "fehler" $ERR >/dev/null +FLAG5=$? >/dev/null + +if [ $FLAG1 -eq 0 -o $FLAG2 -eq 0 -o $FLAG3 -eq 0 -o $FLAG4 -eq 0 -o $FLAG5 -eq 0] +then + echo "Fehler beim Entladen. Das Datum wird zurückgesetzt." + echo "---------------------------------------" + echo "Prüfen Sie Fehlerprotokoll: $ERR" + echo "---------------------------------------" + cp $SRC_PFAD/superx.datum.alt $SRC_PFAD/superx.datum +fi diff --git a/src-modules/module/costage/rohdaten_msg/msg_costage_unload.xml b/src-modules/module/costage/rohdaten_msg/msg_costage_unload.xml new file mode 100644 index 0000000..3a9ed4b --- /dev/null +++ b/src-modules/module/costage/rohdaten_msg/msg_costage_unload.xml @@ -0,0 +1,82 @@ + + +MSG-Modul + + +Ab welchem Semester sollen Prüfungen entladen werden? z.B. 20021 für SS 2002 + Wenn ja, dann ist der Wert "true", wenn nein, dann ist er "false" + + + + + + + + +Verzeichnis der Abschlussprüfungen (CO). + += $msg_start_pruef_sem or P.semester_tsg >= $msg_start_pruef_sem) +; + + +]]> + + + + + + diff --git a/src-modules/module/costage/rohdaten_msg/superx.datum b/src-modules/module/costage/rohdaten_msg/superx.datum new file mode 100644 index 0000000..78959dd --- /dev/null +++ b/src-modules/module/costage/rohdaten_msg/superx.datum @@ -0,0 +1 @@ +23.09.2022 diff --git a/src-modules/module/costage/rohdaten_sos/sos_costage_unload.xml b/src-modules/module/costage/rohdaten_sos/sos_costage_unload.xml index 20668b1..0b0e98d 100644 --- a/src-modules/module/costage/rohdaten_sos/sos_costage_unload.xml +++ b/src-modules/module/costage/rohdaten_sos/sos_costage_unload.xml @@ -91,7 +91,7 @@ select matrikelnummer, d_geburt as gebdat, '',--gebort, geschlecht, -d_exmatr as exmdat, +date(abmeldungsdatum) as exmdat, null::integer as status, semester_max as semester, null::integer ,--poplz, @@ -149,7 +149,8 @@ left outer join costage_st_adressen ASEM on (ASEM.st_studstamm_nr=S.st_studstamm and ASEM.st_adresse_typ='S') where matrikelnummer is not null -and semester_max >= $start_stud_sem +and (semester_max >= $start_stud_sem +or semester_max is null) ; ]]> @@ -186,6 +187,8 @@ left outer join costage_st_laender L on (L.st_land_nr=H.hzb_land_nr) where A.hzb_nr=H.hzb_art_nr and S.st_studstamm_nr=H.st_person_nr +and S.matrikelnummer is not null + ]]> @@ -203,7 +206,7 @@ G.skz_key as stg, '' ,--schwp, G.fachkennzeichen, '' ,--fb, -F.po_stp_stp_version_kb as pversion, +coalesce(po_stp_stp_version_kb_tsg,F.po_stp_stp_version_kb) as pversion, F.po_stp_stp_version_kb as spoversion, F.po_stp_stp_version_kb_tsg as pversion_tsg, F.semester, @@ -211,7 +214,7 @@ F.studiengang_nr, F.fach_nr, F.kz_rueck_beur_ein AS status, F.urlaub_art::char(10) as gdbu, -F.abm_art_p as gdex, +S.abm_art_p as gdex, F.fachsemester::integer, F.hrst, F.klinsem, @@ -228,8 +231,8 @@ null::char(1) as hssemgewicht, null::char(1) as urlsemgewicht, null::char(1) ,--kohsem, null::char(1) ,--lfdnr, -F.endedat, -F.anfdat, +F.abm_dat_s, +F.beginn_datum_s, null::char(1), --lepsem null::char(1),-- -- district.astat nur h1 null::char(1),-- -- country.astat nur h1 @@ -242,21 +245,23 @@ F.st_studium_nr as degree_program_id , null::char(10) as hssem_valid, null::Char(10) as k_field_of_study_subj_id, F.kz_rueck_beur_ein_tsg, -endedat_tsg, +abm_dat_s_tsg, abm_art_s as abmeldegrund, abm_art_s_tsg as abmeldegrund_tsg, F.studiengangs_identifikator as degree_program_uniquename, F.studiengangs_identifikator_tsg as degree_program_uniquename_tsg, F.st_studium_nr_tsg as degree_program_id_tsg -FROM costage_dim_studiengang G, costage_st_studien_aggr F -WHERE G.tid=F.studiengang_tid +FROM costage_dim_studiengang G, costage_st_studien_aggr F, +costage_st_studierendenstammdaten S +WHERE S.st_studstamm_nr=F.st_studstamm_nr +and G.tid=F.studiengang_tid and F.statustyp is not null and F.fachsemester is not null and F.kz_rueck_beur_ein is not null AND F.semester >= $start_stud_sem and ($EXTERNAL_SUBJECTS ='true' -or F.unikey=(select H.hs_nr::char(10) from hochschulinfo H) +or F.unikey=(select lpad(H.hs_nr::char(10),4,'0') from hochschulinfo H) or exists(select id from sx_repository R where R.id='COSTAGE_STORT' and aktiv=1) ) @@ -285,7 +290,66 @@ select * from k_stg where 1=0; Verzeichnis der Prüfungen (HIS) = $start_pruef_sem +; ]]> @@ -345,7 +409,7 @@ P.studienidentifikator_tsg FROM costage_st_pruef_aggr P, costage_dim_studiengang G where G.tid=P.studiengang_tid and ($EXTERNAL_SUBJECTS ='true' -or P.unikey=(select H.hs_nr::char(10) from hochschulinfo H) +or P.unikey=(select lpad(H.hs_nr::char(10),4,'0') from hochschulinfo H) ) AND (P.semester >= $start_pruef_sem or P.semester_tsg >= $start_pruef_sem) ; @@ -535,7 +599,7 @@ null as sortorder FROM costage_st_studienkennzahlen K left outer join costage_st_studienfaecher F on ( F.st_stdfach_nr=K.st_stdfach_nr) where ($EXTERNAL_SUBJECTS ='true' -or unikey=(select H.hs_nr::char(10) from hochschulinfo H) +or unikey=(select lpad(H.hs_nr::char(10),4,'0') from hochschulinfo H) or exists(select id from sx_repository R where R.id='COSTAGE_STORT' and aktiv=1) ) @@ -610,7 +674,7 @@ null as lid, null as parent_lid, null as sortorder FROM costage_st_fakultaeten - where unikey=(select H.hs_nr::char(10) from hochschulinfo H) + where unikey=(select lpad(H.hs_nr::char(10),4,'0') from hochschulinfo H) union SELECT distinct @@ -1026,7 +1090,7 @@ SELECT distinct substring(G.studiengangs_identifikator from 1 for 10) ,--abstgv, FROM costage_dim_studiengang G, costage_st_studien_aggr A where G.tid=A.studiengang_tid and ($EXTERNAL_SUBJECTS ='true' -or G.unikey=(select H.hs_nr::char(10) from hochschulinfo H) +or G.unikey=(select lpad(H.hs_nr::char(10),4,'0') from hochschulinfo H) ) ]]> diff --git a/src-modules/module/costage/rohdaten_zul/zul_costage_unload.xml b/src-modules/module/costage/rohdaten_zul/zul_costage_unload.xml index 846098e..e4ed69c 100644 --- a/src-modules/module/costage/rohdaten_zul/zul_costage_unload.xml +++ b/src-modules/module/costage/rohdaten_zul/zul_costage_unload.xml @@ -54,7 +54,7 @@ null,--bew_efh, null,--bew_gebort, date(S.geburtsdatum) as bew_gebdat, S.geschlecht as geschl, - val(L.statistik_code) as staat, + L.kurzbezeichnung as staat, null,--pozusatz, null,--postrasse, null,--poplz, @@ -282,7 +282,7 @@ FROM costage_bw_antr_aggr A, costage_st_studiengaenge G where A.st_studiengang_nr=G.st_studiengang_nr and A.bw_typ_kb !='MBW' and ($EXTERNAL_SUBJECTS ='true' -or A.unikey=(select H.hs_nr::char(10) from hochschulinfo H) +or A.unikey=(select lpad(H.hs_nr::char(10),4,'0') from hochschulinfo H) or exists(select id from sx_repository R where R.id='COSTAGE_STORT' and aktiv=1) ) @@ -433,7 +433,7 @@ null as parent_lid FROM costage_st_studienkennzahlen K left outer join costage_st_studienfaecher F on ( F.st_stdfach_nr=K.st_stdfach_nr) where ($EXTERNAL_SUBJECTS ='true' -or unikey=(select H.hs_nr::char(10) from hochschulinfo H) +or unikey=(select lpad(H.hs_nr::char(10),4,'0') from hochschulinfo H) ) union diff --git a/src-modules/module/costage/schluesseltabellen/sx_repository.unl b/src-modules/module/costage/schluesseltabellen/sx_repository.unl index e288c0f..4064d71 100644 --- a/src-modules/module/costage/schluesseltabellen/sx_repository.unl +++ b/src-modules/module/costage/schluesseltabellen/sx_repository.unl @@ -19,3 +19,4 @@ then 'NE' --nicht erschienen\ else 'BE' --bestanden\ end^Leistungsstatus-Gruppen (CO)^Hier werden Leistungsstatus-Gruppen (CO) konfiguriert. Beispiel der UZK für sx_leistungen_v^^COSTAGE_LEISTUNGSSTATUS^^^310^1^0^0^^1^01.01.1900^31.12.3000^ 4^COSTAGE_STUDIENSTATUS_FILTER^studienstatustyp not in ('a','o','z')^Filter Studienstatus für CO^Hier werden Studienstatus-Typen für Auswertungen aus CO gefiltert^^COSTAGE_STUD_STATUS_FILTER^^^310^1^0^0^^1^01.01.1900^31.12.3000^ +5^COSTAGE_BEW_EINSCHR_FILTER^status_evs='J'^Filter Bewerbungsstatus Einschreibung für CO^Hier werden Bewerbungsstatus-Typen für Auswertungen aus CO gefiltert^^COSTAGE_BEW_STATUS_FILTER^^^310^1^0^0^^1^01.01.1900^31.12.3000^ diff --git a/src-modules/module/costage/schluesseltabellen/trans_costage_st_studienkennzahlen.sql b/src-modules/module/costage/schluesseltabellen/trans_costage_st_studienkennzahlen.sql index 22bcf29..0013995 100644 --- a/src-modules/module/costage/schluesseltabellen/trans_costage_st_studienkennzahlen.sql +++ b/src-modules/module/costage/schluesseltabellen/trans_costage_st_studienkennzahlen.sql @@ -1,8 +1,4 @@ --freemarker template -<#if COSTAGE_STORT?exists && COSTAGE_STORT !=""> -<#assign inlineTemplate=COSTAGE_STORT?interpret /> -<@inlineTemplate/> - delete from costage_st_studienkennzahlen; @@ -23,38 +19,19 @@ S.fakultaet_key, S.skz_name, S.st_stdfach_nr, S.gesetzliche_grundlage_kb -FROM costage_st_studienkennzahlen_neu S, hochschulinfo H -where H.hs_nr::char(10)=S.unikey or S.unikey is null -or 1=0 -<#if stort?exists> -<#foreach st in stort> -or S.unikey ='${st.nr}' - - - ; - -<#if stort?exists == false> +FROM costage_st_studienkennzahlen_neu S +; +--Duplikatssuche bei Fächern ("skz_key"). +select +S.skz_key +into temp tmp_doppelt +from costage_st_studienkennzahlen S +group by 1 +having count(*)>1; + +update costage_st_studienkennzahlen set skz_key=skz_key || '_' || unikey +where skz_key in (select skz_key +from tmp_doppelt); + +drop table tmp_doppelt; ---wg. Eindeutigkeit kombinierter Schlüssel SKZ+UNIKEY: -insert into costage_st_studienkennzahlen( - st_skz_nr, - skz_key, - unikey, - fakultaet_key, - skz_name, - st_stdfach_nr, - gesetzliche_grundlage_kb -) -select -S.st_skz_nr, -trim(S.skz_key) ||'_' || trim(S.unikey), -S.unikey, -S.fakultaet_key, -S.skz_name, -S.st_stdfach_nr, -S.gesetzliche_grundlage_kb -FROM costage_st_studienkennzahlen_neu S, hochschulinfo H -where H.hs_nr::char(10)!=S.unikey - ; - ---TODO: Duplikatssuche bei Fächern ("skz_key"). diff --git a/src-modules/module/costage/upgrade/costage_upgrade_man.sql b/src-modules/module/costage/upgrade/costage_upgrade_man.sql index 39d7913..3df9917 100644 --- a/src-modules/module/costage/upgrade/costage_upgrade_man.sql +++ b/src-modules/module/costage/upgrade/costage_upgrade_man.sql @@ -15,6 +15,25 @@ alter table costage_leistungen alter column matrikelnummer type integer using va ALTER TABLE costage_st_studierendenstammdaten ALTER COLUMN matrikelnummer drop not null; +ALTER TABLE costage_st_studierendenstammdaten +drop column if exists d_exmatr; + +ALTER TABLE costage_st_studien_aggr +drop column if exists endedat; +ALTER TABLE costage_st_studien_aggr +drop column if exists endedat_tsg; +ALTER TABLE costage_st_studien_aggr +drop column if exists abm_art_p; +ALTER TABLE costage_st_studien_aggr +drop column if exists anfdat; + + +ALTER TABLE costage_st_studien_aggr +ALTER COLUMN st_studium_nr drop not null; +ALTER TABLE costage_st_pruef_aggr +ALTER COLUMN st_studium_nr drop not null; +ALTER TABLE costage_st_pruef_aggr +ALTER COLUMN leistung_nr drop not null;