diff --git a/src-modules/module/msg/conf/msg.xml b/src-modules/module/msg/conf/msg.xml index ba0b0aa..5bd1a5d 100644 --- a/src-modules/module/msg/conf/msg.xml +++ b/src-modules/module/msg/conf/msg.xml @@ -1,22 +1,340 @@ - - Ein Modul für Mehrfachstudiengänge - - - - - - - - - - Kombinationen von TSG in einem MSG - - + +Ein Modul für Mehrfachstudiengänge + + + + + + +
+Abschlussprüfungen für die Übernahme + +Matrikel-Nr. +Studiengang-Nr. +Fach-Nr. +Abschluss +Semester ESG/MSG +Datum der Prüfung ESG/MSG +Fach +Vertiefung +Schwerpunkt +Fachkennzeichen +Prüfungsnote +Prüfungsamtnummer +Prüfungsnummer +PO-Version +Prüfungsstatus +Fachsemester +Prüfungsart +Eindeutige Laufnummer der Prüfung +Versuchsanzahl +1.Prueferkuerzel +2.Prueferkuerzel +Maluspunkte dieser Pruefung +Guthaben-/Bonuspunkte dieser Pruefung +Zuordnungsnummer aus PORD +Vermerk zur Prüfung +Zurückgetreten (1/0) +Zeitabschnitt +Anerkannte Prüfung +Kennzeichnung fuer Pruefungsstatistiklieferung +Art des Studiums +Studienform + +degree_program_id ESG/MSG +degree_program_id TSG +Semester (TSG) +Datum der Prüfung (TSG) +Prüfungsstatus (TSG) +Note (TSG) +Anzahl Fachsemester (TSG) + + +Fach der Abschlussarbeit + + + + + + + + + + + +
+ + +Abschlussprüfungen + +Matrikel-Nr. +Studiengang-Nr. +Fach-Nr. + +Semester ESG/MSG +Datum der Prüfung ESG/MSG + + + + + + +Prüfungsamtnummer +Prüfungsnummer +PO-Version + +wird derzeit nur bei Datenquelle CO ausgewertet +Prüfungsstatus +Fachsemester +Prüfungsart +Vorprüfung="V", Hauptpr.="H" +Eindeutige Laufnummer der Prüfung + +z.B. 5=msgpos,6=HISinOne,15=CO +Versuchsanzahl +1.Prueferkuerzel +2.Prueferkuerzel +Maluspunkte dieser Pruefung +Guthaben-/Bonuspunkte dieser Pruefung +Zuordnungsnummer aus PORD +Vermerk zur Prüfung +Zurückgetreten (1/0) +Zeitabschnitt +Anerkannte Prüfung +Kennzeichnung fuer Pruefungsstatistiklieferung +Art des Studiums +Studienform + +degree_program_id ESG/MSG +degree_program_id TSG +Semester (TSG) +Datum der Prüfung (TSG) +Prüfungsstatus (TSG) +Note (TSG) +Anzahl Fachsemester (TSG) + + +Fach der Abschlussarbeit + + + + + + + + + + + +
+ + +Hilfstabelle Abschlussprüfungen: Hauptprüfungen und Teilabschlussprüfungen + + + + + +0=Inland, 1=Ausland + +Interner Schlüssel der HZB-Art + + + + + + + +Für einfachere Filterung nach Semester: bei TSG das Semester des TSG, bei ESG/MSG das Semester des MSG + + + + + + + + +RSZ des Studiengangs zum Zeitpunkt der Prüfung + bei CO der SPO-Knoten + + + +wird derzeit nur bei Datenquelle CO ausgewertet + + + +HIS1: Tabelle degree_program (Studiengang zum Studenten) +HIS1: Tabelle degree_program (Studiengang zum Studenten) +Wg. amtl. Stat./BSOS wird nicht die Semesterzahl in lab genommen, sondern über Matrikelnr., Fach, Abschluss,Vert.richtung und Semester aus stg +wird derzeit nur bei Datenquelle CO ausgewertet + +TSG/ESG/MSG + + + + + + +z.B. 5=msgpos,6=HISinOne,15=CO + + + + +wird derzeit nur bei Datenquelle CO ausgewertet + + +wird derzeit nur bei Datenquelle CO ausgewertet +1=Rücktritt, 0=kein Rücktritt + + +Fach der Abschlussarbeit +Anzahl der Prüfungen + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +Hilfstabelle Abschlussprüfungen: Hauptprüfungen und Teilabschlussprüfungen + + + + + +0=Inland, 1=Ausland + +Interner Schlüssel der HZB-Art + + + + + + + +Für einfachere Filterung nach Semester: bei TSG das Semester des TSG, bei ESG/MSG das Semester des MSG + + + + + + + + +RSZ des Studiengangs zum Zeitpunkt der Prüfung + bei CO der SPO-Knoten + + + + + +HIS1: Tabelle degree_program (Studiengang zum Studenten) +HIS1: Tabelle degree_program (Studiengang zum Studenten) +Wg. amtl. Stat./BSOS wird nicht die Semesterzahl in lab genommen, sondern über Matrikelnr., Fach, Abschluss,Vert.richtung und Semester aus stg +wird derzeit nur bei Datenquelle CO ausgewertet + +TSG/ESG/MSG + + + + + + +z.B. 5=msgpos,6=HISinOne,15=CO + + + + +wird derzeit nur bei Datenquelle CO ausgewertet + + +wird derzeit nur bei Datenquelle CO ausgewertet +1=Rücktritt, 0=kein Rücktritt + + +Fach der Abschlussarbeit + +Anzahl der Prüfungen + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +Kombinationen von TSG in einem MSG + + ggf. pseudonymisiert, bei Datenquelle HIS1 ist dies die student.id - - +Erster/Zweiter Studiengang etc. +Erstes / Zweites Fach etc. +0=Tagesaktuell im Studiengangsverzeichnis lehr_stg_ab 1=Männlich, 2=Weiblich @@ -26,16 +344,17 @@ -Klassifizierung der Kombination +Name der Kombination im Studiengangsverzeichnis lehr_stg_ab Im jew. Semester und Studiengang die Anzahl der kombinierten Fächer +Im jew. Semester und Studiengang die Anzahl der kombinierten Fächer Sprachen - - - + + + @@ -75,87 +394,247 @@ - -
+ + + - - - - - - - - + + + - - - + + -
+ + + $MSG_PFAD/masken + + + $MSG_PFAD/masken + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - + + + + + + +
diff --git a/src-modules/module/msg/datentabellen/trans_msg_abp.sql b/src-modules/module/msg/datentabellen/trans_msg_abp.sql new file mode 100644 index 0000000..32b2a38 --- /dev/null +++ b/src-modules/module/msg/datentabellen/trans_msg_abp.sql @@ -0,0 +1,500 @@ +--freemarker template +<#include "SQL_lingua_franca"/> +<#include "SuperX_general"/> + + + +select apnr from konstanten where beschreibung='SOS_Quellsystem' + + +select apnr from konstanten where beschreibung='Start_POS_Semester' + + + +<#if Quellsystem_var=15> + +update msg_abp_neu set ch39_vertief = '' where ch39_vertief is null; +update msg_abp_neu set schwerpunkt = '' where schwerpunkt is null; +update msg_abp_neu set kz_fach = '' where kz_fach is null; +update msg_abp_neu set pversion = -1 where pversion is null; + + +CREATE temp TABLE tmp_msg_abp ( + matrikel_nr integer NOT NULL, + studiengang_nr smallint, + fach_nr smallint, + ch40_studientyp smallint, + ch35_ang_abschluss char(10) NOT NULL, + ch35_art_abg_pruef smallint, + sem_der_pruefung smallint, + d_abg_pruefung date, + ch30_fach char(10) NOT NULL, + ch39_vertief char(10) NOT NULL, + schwerpunkt char(10), + kz_fach char(10) NOT NULL, + pruefungsamt integer, + haupt_pruef_note numeric(8,2), + vor_haupt_pruefung character(1) NOT NULL, + pnr integer, + degree_program_id integer, + degree_program_id_tsg integer, + pversion INTEGER, + spo_version char(10), + spo_version_tsg char(10), + pstatus char(10), + fach_sem_zahl smallint, + stort char(10), + part character(10), + leistungs_id integer, +pversuch SMALLINT , +ppruef1 CHAR(10) , +ppruef2 CHAR(10) , +malus FLOAT , +bonus FLOAT , +pordnr INTEGER , +pvermerk char(10), +prueck integer, +zeitabschnitt char(10), +sourcesystem integer, +pruefungsamt_nr CHAR(7), +panerk char(10), +pstatkennz integer, +stuart VARCHAR(10), +stufrm VARCHAR(10), +stutyp char(10), +sem_der_pruefung_tsg SMALLINT , +d_abg_pruefung_tsg date, +note_tsg numeric(8,2), +fach_sem_zahl_tsg smallint, +leistungs_id_msg integer, +pstatus_tsg char(10), +studienidentifikator varchar(255), +studienidentifikator_tsg varchar(255), +fach_abschlussarbeit CHAR(10) + +); + + +insert into tmp_msg_abp +(matrikel_nr, +studiengang_nr, +fach_nr, +ch35_ang_abschluss, +sem_der_pruefung, +d_abg_pruefung, +ch30_fach, +ch39_vertief, +schwerpunkt, +kz_fach, +haupt_pruef_note, +vor_haupt_pruefung, +pnr, +degree_program_id, +degree_program_id_tsg, +pversion, +spo_version, +spo_version_tsg, +pstatus, +fach_sem_zahl, +fach_sem_zahl_tsg, +part, +leistungs_id, +pversuch , +ppruef1 , +ppruef2 , +malus , +bonus , +pordnr , +pvermerk, +prueck , +zeitabschnitt , +sourcesystem , +pruefungsamt_nr, +panerk, +pstatkennz, +stuart, +stufrm, +stutyp, + sem_der_pruefung_tsg, + d_abg_pruefung_tsg, + note_tsg, + pstatus_tsg, + studienidentifikator , +studienidentifikator_tsg, +fach_abschlussarbeit +) +select +matrikel_nr, +to_number(studiengang_nr,'9'), +to_number(fach_nr,'9'), + ch35_ang_abschluss, +sem_der_pruefung, +d_abg_pruefung, +ch30_fach, +ch39_vertief, +schwerpunkt, +kz_fach, +haupt_pruef_note::float, +'H', +pnr, +degree_program_id, +degree_program_id_tsg, +val('' || pversion), +(case when part='TSAB' then null::char(10) else pversion end) as spo_version, +(case when part='TSAB' then pversion else null::char(10) end) as spo_version_tsg, +pstatus, +fach_sem_zahl, +fach_sem_zahl_tsg, +part, +leistungs_id, +pversuch , +ppruef1 , +ppruef2 , +malus , +bonus , +pordnr, +pvermerk , +prueck , +zeitabschnitt , +${Quellsystem_var}, +pruefungsamt_nr, +panerk, +val(pstatkennz), +stuart, +stufrm, +stutyp, + sem_der_pruefung_tsg, + d_abg_pruefung_tsg, + note_tsg, + pstatus_tsg, + studienidentifikator , +studienidentifikator_tsg, +fach_abschlussarbeit +from msg_abp_neu P +where + P.ch35_ang_abschluss is not NULL + and P.ch30_fach is not NULL + and P.kz_fach is not NULL + --and P.pnr in + --(select apnr from sos_vdhdpnr) +; +DELETE FROM tmp_msg_abp WHERE leistungs_id IS NULL; + +<#if SOS_ABSCHLUSSTYP_VORPRUEFUNG?exists> +update tmp_msg_abp set vor_haupt_pruefung='V' +where ${SOS_ABSCHLUSSTYP_VORPRUEFUNG}; + + +update tmp_msg_abp set leistungs_id_msg=L.labnrzu +from sos_labzuord L +where L.labnr=tmp_msg_abp.leistungs_id; + +--spo-Version des MSG bei TSAB nachladen: +update tmp_msg_abp set spo_version=L.pversion +from msg_abp_neu L +where L.leistungs_id=tmp_msg_abp.leistungs_id_msg +and tmp_msg_abp.part='TSAB' +; + +--bei MSG wird studiengang_nr aus dem TSG +--der Abschlussarbeit ermittelt: +update tmp_msg_abp set studiengang_nr=val(P.studiengang_nr) --, +--fach_nr=val(P.fach_nr) +from msg_abp_neu P, sos_labzuord L +where P.leistungs_id=L.labnr +and tmp_msg_abp.leistungs_id= L.labnrzu +and tmp_msg_abp.ch30_fach=P.ch30_fach +and tmp_msg_abp.ch35_ang_abschluss=P.ch35_ang_abschluss +; + + +--wenn das nicht klappt aus studienverlauf: +update tmp_msg_abp set +studiengang_nr = F.studiengang_nr +from sos_stg F where +tmp_msg_abp.matrikel_nr =F.matrikel_nr +and tmp_msg_abp.sem_der_pruefung >= F.sem_rueck_beur_ein +and tmp_msg_abp.ch30_fach = F.ch30_fach +and tmp_msg_abp.ch39_vertief = F.ch39_vertief +and (tmp_msg_abp.schwerpunkt = F.schwerpunkt or tmp_msg_abp.schwerpunkt='') +and tmp_msg_abp.kz_fach = F.kz_fach +and tmp_msg_abp.ch35_ang_abschluss = F.ch35_ang_abschluss +and ( tmp_msg_abp.studiengang_nr is null or tmp_msg_abp.studiengang_nr=0 +); +update tmp_msg_abp set +fach_nr = F.fach_nr +from sos_stg F where +tmp_msg_abp.matrikel_nr =F.matrikel_nr +and tmp_msg_abp.sem_der_pruefung >= F.sem_rueck_beur_ein +and tmp_msg_abp.ch30_fach = F.ch30_fach +and tmp_msg_abp.ch39_vertief = F.ch39_vertief +and (tmp_msg_abp.schwerpunkt = F.schwerpunkt or tmp_msg_abp.schwerpunkt='') +and tmp_msg_abp.kz_fach = F.kz_fach +and tmp_msg_abp.ch35_ang_abschluss = F.ch35_ang_abschluss +and ( tmp_msg_abp.fach_nr is null or tmp_msg_abp.fach_nr=0 +) +and zeitabschnitt!='MSG' +; +update tmp_msg_abp set +fach_sem_zahl = F.fach_sem_zahl +from sos_stg F where +tmp_msg_abp.matrikel_nr =F.matrikel_nr +and tmp_msg_abp.sem_der_pruefung >= F.sem_rueck_beur_ein +and tmp_msg_abp.ch30_fach = F.ch30_fach +and tmp_msg_abp.ch39_vertief = F.ch39_vertief +and (tmp_msg_abp.schwerpunkt = F.schwerpunkt or tmp_msg_abp.schwerpunkt='') +and tmp_msg_abp.kz_fach = F.kz_fach +and tmp_msg_abp.ch35_ang_abschluss = F.ch35_ang_abschluss +and tmp_msg_abp.fach_sem_zahl is null +and part!='TSAB'; + +SELECT 'lookup stutyp and stuart:' || now() FROM xdummy; + +CREATE TEMP TABLE tmp_stg +( + matrikel_nr INTEGER , + ch35_ang_abschluss CHAR(10), + ch30_fach CHAR(10), + stuart CHAR(10), + stutyp CHAR(10), + sem_rueck_beur_ein_max SMALLINT +); +INSERT INTO tmp_stg( + matrikel_nr, + ch35_ang_abschluss, + ch30_fach, + stuart, + stutyp, + sem_rueck_beur_ein_max +) +SELECT + matrikel_nr, + ch35_ang_abschluss, + ch30_fach, + stuart, + stutyp, + max(sem_rueck_beur_ein) +FROM + sos_stg +WHERE + today() BETWEEN gueltig_von AND gueltig_bis + and matrikel_nr in (select distinct T.matrikel_nr from tmp_msg_abp T) + --and 1=0 +GROUP BY + 1,2,3,4,5 +; + +CREATE INDEX tmp_ix1 ON tmp_stg(matrikel_nr); +CREATE INDEX tmp_ix2 ON tmp_stg(ch35_ang_abschluss,ch30_fach); + + + +UPDATE + tmp_msg_abp +SET + stuart = stg.stuart +FROM + tmp_stg stg +WHERE + tmp_msg_abp.matrikel_nr = stg.matrikel_nr + AND tmp_msg_abp.ch35_ang_abschluss = stg.ch35_ang_abschluss + AND tmp_msg_abp.ch30_fach = stg.ch30_fach + AND stg.sem_rueck_beur_ein_max <= tmp_msg_abp.sem_der_pruefung + AND stg.stuart IS NOT NULL + and tmp_msg_abp.stuart IS NULL + AND tmp_msg_abp.vor_haupt_pruefung IN ('V','H') + ; + --jetzt TSG: +UPDATE + tmp_msg_abp +SET + stuart = stg.stuart +FROM + tmp_stg stg +WHERE + tmp_msg_abp.matrikel_nr = stg.matrikel_nr + AND tmp_msg_abp.ch35_ang_abschluss = stg.ch35_ang_abschluss + AND tmp_msg_abp.ch30_fach = stg.ch30_fach + AND stg.sem_rueck_beur_ein_max <= tmp_msg_abp.sem_der_pruefung_tsg + AND stg.stuart IS NOT NULL + and tmp_msg_abp.stuart IS NULL + AND tmp_msg_abp.vor_haupt_pruefung IN ('V','H') + ; + +UPDATE + tmp_msg_abp +SET + stutyp = stg.stutyp +FROM + tmp_stg stg +WHERE + tmp_msg_abp.matrikel_nr = stg.matrikel_nr + AND tmp_msg_abp.ch35_ang_abschluss = stg.ch35_ang_abschluss + AND tmp_msg_abp.ch30_fach = stg.ch30_fach + AND stg.sem_rueck_beur_ein_max <= tmp_msg_abp.sem_der_pruefung + AND stg.stutyp IS NOT NULL + and tmp_msg_abp.stutyp IS NULL + AND tmp_msg_abp.vor_haupt_pruefung IN ('V','H') + ; +--TSG: + UPDATE + tmp_msg_abp +SET + stutyp = stg.stutyp +FROM + tmp_stg stg +WHERE + tmp_msg_abp.matrikel_nr = stg.matrikel_nr + AND tmp_msg_abp.ch35_ang_abschluss = stg.ch35_ang_abschluss + AND tmp_msg_abp.ch30_fach = stg.ch30_fach + AND stg.sem_rueck_beur_ein_max <= tmp_msg_abp.sem_der_pruefung_tsg + AND stg.stutyp IS NOT NULL + and tmp_msg_abp.stutyp IS NULL + AND tmp_msg_abp.vor_haupt_pruefung IN ('V','H') + ; + + +drop table tmp_stg; + + +-- end of 'stufrm'/'stuart' lookup +select 'end of lookup stufrm,stutyp and stuart:' || now() from xdummy; + +--keine Fach-nr. bei MSG Abschlüssen: +update tmp_msg_abp set fach_nr=null where zeitabschnitt='MSG'; + +--Prüfroutine +insert into sos_pruefrout +( +tabelle, +tabelle_sos, +matrikel_nr, +semester, +problem, +aktion +) +select +'msg_abp_neu', +'abp', +matrikel_nr,sem_der_pruefung, +'studiengang_nr/fach_nr unbekannt, Prüfung wird gelöscht', +'Warnung' +from tmp_msg_abp +where (studiengang_nr is null +or fach_nr is null) +; + +--insert in echte Tabelle: +delete from msg_abp +where (sourcesystem=${Quellsystem_var} +or sourcesystem is null) +and (matrikel_nr,sourcesystem,ch35_ang_abschluss) +in (select matrikel_nr,sourcesystem,ch35_ang_abschluss +from tmp_msg_abp) +; + + +insert into msg_abp +(matrikel_nr, +studiengang_nr, +fach_nr, +ch35_ang_abschluss, +sem_der_pruefung, +d_abg_pruefung, +ch30_fach, +ch39_vertief, +schwerpunkt, +kz_fach, +haupt_pruef_note, +vor_haupt_pruefung, +pnr, +pversion, +spo_version, +spo_version_tsg, +pstatus, +fach_sem_zahl, +part, +leistungs_id, +pversuch , +ppruef1 , +ppruef2 , +malus , +bonus , +pordnr , +stort, +pvermerk, +prueck , +zeitabschnitt, +sourcesystem, +pruefungsamt_nr, +panerk, +pstatkennz, +stuart, +stufrm, +stutyp, +degree_program_id, +degree_program_id_tsg, +sem_der_pruefung_tsg, +d_abg_pruefung_tsg, +note_tsg, +fach_sem_zahl_tsg, +pstatus_tsg, + studienidentifikator , +studienidentifikator_tsg, +fach_abschlussarbeit +) +select matrikel_nr, +studiengang_nr, +fach_nr, +ch35_ang_abschluss, +sem_der_pruefung, +d_abg_pruefung, +ch30_fach, +ch39_vertief, +schwerpunkt, +kz_fach, +haupt_pruef_note, +vor_haupt_pruefung, +pnr, +pversion, +spo_version, +spo_version_tsg, +pstatus, +fach_sem_zahl, +part, +leistungs_id, +pversuch , +ppruef1 , +ppruef2 , +malus , +bonus , +pordnr , +stort, +pvermerk, +prueck , +zeitabschnitt, +sourcesystem, +pruefungsamt_nr, +panerk, +pstatkennz, +stuart, +stufrm, +stutyp, +degree_program_id, +degree_program_id_tsg, +sem_der_pruefung_tsg, +d_abg_pruefung_tsg, +note_tsg, +fach_sem_zahl_tsg, +pstatus_tsg, + studienidentifikator , +studienidentifikator_tsg, +fach_abschlussarbeit +from tmp_msg_abp +; + + +drop TABLE tmp_msg_abp; + + + diff --git a/src-modules/module/msg/datentabellen/trans_msg_abp_pre.sql b/src-modules/module/msg/datentabellen/trans_msg_abp_pre.sql new file mode 100644 index 0000000..0ebcdbb --- /dev/null +++ b/src-modules/module/msg/datentabellen/trans_msg_abp_pre.sql @@ -0,0 +1,54 @@ +--freemarker template + +<#include "SQL_lingua_franca"/> +<#include "SuperX_general"/> + + + + +select apnr from konstanten where beschreibung='SOS_Quellsystem'; + + + + + +select S.leistungs_id +into temp tmp_delete + from msg_abp S left outer join msg_abp_neu N on ( + S.matrikel_nr=N.matrikel_nr + and S.leistungs_id=N.leistungs_id) + where S.sourcesystem=${Quellsystem_var} +and coalesce(S.sem_der_pruefung,S.sem_der_pruefung_tsg) >= ${K_Start_POS_Semester} +and N.leistungs_id is null +; + +insert into sos_pruefrout +( + datum, + semester, + tabelle, + tabelle_sos, + matrikel_nr, + problem, + aktion +) + +select today(), +coalesce(S.sem_der_pruefung,S.sem_der_pruefung_tsg) as sem_der_pruefung, +'msg_abp', +'abp', +S.matrikel_nr, +'Die Hauptprüfung mit der ID: ' || S.leistungs_id || ' wurde gelöscht, da diese nicht im Vorsystem zu finden ist', +'Info' + from msg_abp S, tmp_delete D + where D.leistungs_id=S.leistungs_id +; + +delete from msg_abp +where leistungs_id in (select leistungs_id +from tmp_delete); + + +drop table tmp_delete; + + diff --git a/src-modules/module/msg/datentabellen/vacuum_pg.sql b/src-modules/module/msg/datentabellen/vacuum_pg.sql new file mode 100644 index 0000000..45cdad2 --- /dev/null +++ b/src-modules/module/msg/datentabellen/vacuum_pg.sql @@ -0,0 +1,12 @@ + +select * from xdummy; + +--bei Postgres in HIS1 laufen alle Scripte in Transaktionen, daher muss man +--für vacuum erst committen + +commit; + +vacuum msg_abp; +vacuum msg_abp_aggr; +vacuum msg_abp_aggr_gew; +vacuum msg_fkombi_aggr; diff --git a/src-modules/module/msg/hilfstabellen/msg_abp_aggr_fuellen.sql b/src-modules/module/msg/hilfstabellen/msg_abp_aggr_fuellen.sql new file mode 100644 index 0000000..dcd4120 --- /dev/null +++ b/src-modules/module/msg/hilfstabellen/msg_abp_aggr_fuellen.sql @@ -0,0 +1,660 @@ +--freemarker template + +--(c) 2024 Daniel Quathamer + + +SELECT apnr FROM konstanten WHERE beschreibung = 'pruef_sem_zahl_decimal'; + + +SELECT apnr FROM konstanten WHERE beschreibung = 'Start_POS_Semester'; + + +SELECT apnr FROM konstanten WHERE beschreibung = 'matrikelnr_min'; + + +SELECT apnr FROM konstanten WHERE beschreibung = 'matrikelnr_max'; + + +SELECT apnr FROM konstanten WHERE beschreibung = 'SOS_status_prom'; + + +SELECT tid FROM sos_stichtag WHERE appl_key = '2'; + + +SELECT 1 FROM xdummy WHERE 0 != + (SELECT count(*) FROM konstanten WHERE beschreibung = 'SOS_MTKNR_EXT' AND apnr = 1) +UNION +SELECT 0 FROM xdummy WHERE 0 = + (SELECT count(*) FROM konstanten WHERE beschreibung = 'SOS_MTKNR_EXT' AND apnr = 1); + + +SELECT apnr FROM konstanten WHERE beschreibung = 'SOS_Quellsystem'; + + +select 1 from xdummy where 3=(select max(mod(tid,10)) from semester) + union + select 0 from xdummy where 3!=(select max(mod(tid,10)) from semester) + ; + + + +-- Falls es Konstanten nicht gibt, Defaultwert: +<#assign p_start_pos_sem = 19001 /> +<#if p_start_pos_sem_var?exists && p_start_pos_sem_var?string?length > 0> + <#assign p_start_pos_sem = p_start_pos_sem_var /> + + +-- Sollen Fachsem. dezimal berechnet werden, d.h. relativ zum Prüfungsdatum? +-- Falls Variable nicht belegt, default 0 (Ganzzahlig) +<#assign p_pruef_sem_zahl_decimal = 0 /> +<#if p_pruef_sem_zahl_decimal_var?exists && p_pruef_sem_zahl_decimal_var?string?length > 0> + <#assign p_pruef_sem_zahl_decimal = p_pruef_sem_zahl_decimal_var /> + + +<#assign matrikelnr_min = 0 /> +<#if matrikelnr_min_var?exists && matrikelnr_min_var?string?length > 0> + <#assign matrikelnr_min = matrikelnr_min_var /> + + +<#assign matrikelnr_max = 2147483647 /> +<#if matrikelnr_max_var?exists && matrikelnr_max_var?string?length > 0> + <#assign matrikelnr_max = matrikelnr_max_var /> + + + +<#assign p_promotion = 6 /> +<#if p_promotion_var?exists && p_promotion_var?string?length > 0> + <#assign p_promotion = p_promotion_var /> + + +<#assign stichtag_tagesaktuell = 0 /> +<#if stichtag_tagesaktuell_var?exists && stichtag_tagesaktuell_var?string?length > 0> + <#assign stichtag_tagesaktuell = stichtag_tagesaktuell_var /> + +<#if istTrimester==1> + <#assign Trimester="true" /> +<#else> + <#assign Trimester="false" /> + + +<#assign bezugssemester_cond="(case when part='TSAB' then sem_der_pruefung_tsg else sem_der_pruefung end)" /> +<#assign pdatumsfeld_cond="(case when part='TSAB' then d_abg_pruefung_tsg else d_abg_pruefung end)" /> + +<#assign target_fields_except_stichtag=" matrikel_nr, + alter, + geschlecht, + ca12_staat, + ort_der_hzb, + staat_der_hzb, + hzbart_int, + hzbart, + pseudonym, + sem_der_pruefung, + sem_der_pruefung_tsg, + sem_d_abg_pruefung, + sem_d_abg_pruefung_tsg, + d_abg_pruefung, + d_abg_pruefung_tsg, + bezugssemester, + tid_stg, + stufrm, + stuart, + regel, + pordnr, + studiengang_nr, + fach_nr, + st_studium_nr, + st_studium_nr_tsg, + fach_sem_zahl, + fach_sem_zahl_tsg, + part, + leistungs_id, + pnr, + pversuch, + sourcesystem, + pvermerk, + note, + note_tsg, + notenskala, + pstatus, + pstatus_tsg, + prueck, + ects, + ects_tsg, + studiengangstyp, + abschnitt, + spo_version, + spo_version_tsg, + studienidentifikator , + studienidentifikator_tsg, + fach_abschlussarbeit, + summe" /> + +<#if Quellsystem_var=15> + + +SELECT 'Matrikelnr. Max: ${matrikelnr_max} '::CHAR(30) FROM xdummy; +SELECT 'Matrikelnr. Min: ${matrikelnr_min} '::CHAR(30) FROM xdummy; +SELECT 'SOS_MTKNR_EXT: ${SOS_MTKNR_EXT} '::CHAR(30) FROM xdummy; +SELECT 'Startsemester ${K_SOS_start_lab}'::CHAR(30) FROM xdummy; +SELECT 'Startsemester Vorsemester ${K_SOS_start_lab_vorsemester}'::CHAR(30) FROM xdummy; + +SELECT now(),'Anzahl Sätze in msg_abp_aggr:'::CHAR(30),count(*) FROM msg_abp_aggr GROUP BY 1,2; + +CREATE TEMP TABLE tmp_abp_aggr( + matrikel_nr INTEGER , +alter decimal(14,2) , +d_geburt date, +geschlecht SMALLINT , +ca12_staat SMALLINT , +ort_der_hzb SMALLINT , +staat_der_hzb INTEGER , +hzbart_int CHAR(10) , +hzbart SMALLINT , +pseudonym VARCHAR(255) , +sem_der_pruefung SMALLINT , +sem_der_pruefung_tsg SMALLINT , +sem_d_abg_pruefung SMALLINT , +sem_d_abg_pruefung_tsg SMALLINT , +d_abg_pruefung DATE , +d_abg_pruefung_tsg DATE , +stichtag INTEGER , +tid_stg INTEGER , +--Studiengang einzeln: +ch35_ang_abschluss CHAR(10) , + ch30_fach CHAR(10), + ch39_vertief CHAR(10), + schwerpunkt CHAR(10), + kz_fach CHAR(10), + stort CHAR(10), + stutyp CHAR(10), + pversion integer, + spo_version CHAR(10), + spo_version_tsg CHAR(10), + studienidentifikator varchar(255), + studienidentifikator_tsg varchar(255), +--Ende Studiengang +stufrm CHAR(10) , +stuart CHAR(10) , +regel SMALLINT , +pordnr INTEGER , +studiengang_nr SMALLINT , +fach_nr SMALLINT , +st_studium_nr INTEGER , +st_studium_nr_tsg INTEGER , +st_studium_nr_tmp INTEGER , --wird später zum st_studium_nr und st_studium_nr_tsg +fach_sem_zahl decimal(10,2) , +fach_sem_zahl_tsg SMALLINT , +part CHAR(10) , +leistungs_id INTEGER , +pnr INTEGER , +pversuch INTEGER , +sourcesystem INTEGER , +pvermerk CHAR(10) , +note decimal(8,2) , +note_tsg decimal(8,2) , +notenskala CHAR(10) , +pstatus CHAR(10) , +pstatus_tsg CHAR(10) , +prueck SMALLINT , +ects FLOAT , +ects_tsg FLOAT , +summe INTEGER , +studiengangstyp char(10), +abschnitt smallint, +bezugssemester integer, +pdatumsfeld date, +fach_abschlussarbeit CHAR(10) +) +; + + +-- Zuerst werden die lab-Sätze temporär gespeichert und um das Semester laut Prüfungsdatum ergänzt. +INSERT INTO tmp_abp_aggr( + matrikel_nr, + -- alter, + -- geschlecht, + -- ca12_staat, + -- ort_der_hzb, + -- staat_der_hzb, + -- hzbart_int, + -- hzbart, +-- pseudonym, + sem_der_pruefung, + sem_der_pruefung_tsg, +-- sem_d_abg_pruefung, +-- sem_d_abg_pruefung_tsg, + d_abg_pruefung, + d_abg_pruefung_tsg, + stichtag, +-- tid_stg, + stufrm, + stuart, +-- regel, + pordnr, + studiengang_nr, + fach_nr, + studienidentifikator , + studienidentifikator_tsg, +-- st_studium_nr, +-- st_studium_nr_tsg, +st_studium_nr_tmp, +st_studium_nr_tsg, + fach_sem_zahl, + fach_sem_zahl_tsg, + part, + leistungs_id, + pnr, + pversuch, + sourcesystem, + pvermerk, + note, + note_tsg, + notenskala, + pstatus, + pstatus_tsg, + prueck, + ects, + ects_tsg, + summe, + ch35_ang_abschluss, + ch30_fach, + ch39_vertief, + schwerpunkt, + kz_fach, + pversion, + spo_version, + spo_version_tsg, + stort, + stutyp, + abschnitt, + studiengangstyp, +bezugssemester , +pdatumsfeld, +fach_abschlussarbeit +) +SELECT + matrikel_nr, + -- alter, + -- geschlecht, + -- ca12_staat, + -- ort_der_hzb, + -- staat_der_hzb, + -- hzbart_int, + -- hzbart, + -- pseudonym, + sem_der_pruefung, + sem_der_pruefung_tsg, + d_abg_pruefung, + d_abg_pruefung_tsg, + I.tid as stichtag, +-- tid_stg, + stufrm, + stuart, +-- regel, + pordnr, + studiengang_nr, + fach_nr, + studienidentifikator , + studienidentifikator_tsg, + degree_program_id as st_studium_nr_tmp, + degree_program_id_tsg as st_studium_nr_tsg, + fach_sem_zahl, + fach_sem_zahl_tsg, + part, + leistungs_id, + pnr, + pversuch, + sourcesystem, + pvermerk, + haupt_pruef_note as note, + note_tsg, + null::char(10) as notenskala, --TODO + pstatus, + pstatus_tsg, + prueck, + null::float as ects,--TODO + null::float as ects_tsg,--TODO + 1 as summe, + ch35_ang_abschluss, + ch30_fach, + ch39_vertief, + schwerpunkt, + kz_fach, + pversion, + spo_version, + spo_version_tsg, + stort, + stutyp, + (case when vor_haupt_pruefung='V' then 1 + when vor_haupt_pruefung='H' then 2 end ) as abschnitt, + zeitabschnitt, +${bezugssemester_cond} as bezugssemester , +${pdatumsfeld_cond} as pdatumsfeld, +fach_abschlussarbeit +FROM + msg_abp L, sos_stichtag I + +WHERE I.appl_key='2' --Prüfungen tagesaktuell +and vor_haupt_pruefung in ('H','V') +and L.matrikel_nr <= ${matrikelnr_max} +<#if matrikelnr_min != 0 > + AND L.matrikel_nr >= ${matrikelnr_min} + +and sourcesystem=${Quellsystem_var} +--hier noch keine Filterung aufs Startsemester, erst später +; +--denormalize: + + +--TODO: Abschnitt=1 (Zwischenprüfung ermitteln) + +update tmp_abp_aggr set st_studium_nr=st_studium_nr_tmp +--where studiengangstyp in ('ESG','MSG') +; + +--für TSG die studium_nr aus dem MSG nachladen: +update tmp_abp_aggr set st_studium_nr=A.degree_program_id, +spo_version=A.spo_version +from msg_abp A, sos_labzuord L +where L.labnr=tmp_abp_aggr.leistungs_id +and L.labnrzu=A.leistungs_id +and tmp_abp_aggr.studiengangstyp='TSG' +and tmp_abp_aggr.st_studium_nr is null; + + +UPDATE tmp_abp_aggr +SET sem_d_abg_pruefung = ( + SELECT min(tid) FROM semester S + WHERE d_abg_pruefung BETWEEN S.sem_beginn AND S.sem_ende +) +WHERE d_abg_pruefung IS NOT NULL; + +UPDATE tmp_abp_aggr +SET sem_d_abg_pruefung_tsg = ( + SELECT min(tid) FROM semester S + WHERE d_abg_pruefung_tsg BETWEEN S.sem_beginn AND S.sem_ende +) +WHERE d_abg_pruefung_tsg IS NOT NULL; + + +-- Wenn Datum nicht gefüllt ist, dann wird Originalsemester (psem) genommen: +UPDATE tmp_abp_aggr +SET sem_d_abg_pruefung = sem_der_pruefung +WHERE sem_d_abg_pruefung IS NULL; + +UPDATE tmp_abp_aggr +SET sem_d_abg_pruefung_tsg = sem_der_pruefung_tsg +WHERE sem_d_abg_pruefung_tsg IS NULL; + + +SELECT now(),'Persondaten ermitteln:' FROM xdummy; + + +UPDATE tmp_abp_aggr +SET d_geburt =S.d_geburt, + geschlecht = S.geschlecht, + ca12_staat = S.ca12_staat, + hzbart_int = S.hzbart +FROM sos_sos S +WHERE + S.matrikel_nr = tmp_abp_aggr.matrikel_nr + ; + +update tmp_abp_aggr set alter = trunc((E.sem_beginn-tmp_abp_aggr.d_geburt) / 365.25 , 0) +from semester E +where E.tid=tmp_abp_aggr.sem_d_abg_pruefung +and tmp_abp_aggr.studiengangstyp in ('ESG','MSG'); + +update tmp_abp_aggr set alter = trunc((E.sem_beginn-tmp_abp_aggr.d_geburt) / 365.25 , 0) +from semester E +where E.tid=tmp_abp_aggr.sem_d_abg_pruefung_tsg +and tmp_abp_aggr.studiengangstyp='TSG'; + + + +<#if SOS_MTKNR_EXT = 1> + update tmp_abp_aggr set pseudonym=M.pseudonym + from sos_mtknr_ext M where M.matrikel_nr = tmp_abp_aggr.matrikel_nr; + + + +SELECT now(),'hzbart ermitteln:' FROM xdummy; + +UPDATE tmp_abp_aggr SET hzbart = ( + SELECT grupp + FROM k_hzbart + WHERE hzbart = tmp_abp_aggr.hzbart_int +); + +update tmp_abp_aggr set + ort_der_hzb=S.hzbkfz +from sos_sos S +where S.matrikel_nr=tmp_abp_aggr.matrikel_nr +and today() between S.gueltig_von and S.gueltig_bis +and S.hzbkfzkz=0; +update tmp_abp_aggr set + staat_der_hzb=S.hzbkfz +from sos_sos S +where S.matrikel_nr=tmp_abp_aggr.matrikel_nr +and today() between S.gueltig_von and S.gueltig_bis +and S.hzbkfzkz=1; + +-- Tid-stg ermitteln: +SELECT now(),'Tid-stg ermitteln:' FROM xdummy; + +-- erster Durchgang: alle Angaben stimmen überein +-- [Vorsicht: ein gleichen Studiengängen an 2 Standorten kommen zwei Sätze raus. +UPDATE tmp_abp_aggr +SET tid_stg = ( + SELECT min(tid) + FROM + lehr_stg_ab L + WHERE + tmp_abp_aggr.ch30_fach = L.stg + AND tmp_abp_aggr.ch39_vertief = L.vertfg + AND tmp_abp_aggr.ch35_ang_abschluss = L.abschluss + AND tmp_abp_aggr.pversion = L.pversion + AND tmp_abp_aggr.schwerpunkt = L.schwerpunkt + --AND L.semester_von <= tmp_abp_aggr.sem_der_pruefung + --AND L.semester_bis >= tmp_abp_aggr.sem_der_pruefung + AND L.kz_fach = tmp_abp_aggr.kz_fach + AND L.stort = tmp_abp_aggr.stort + AND L.stutyp = tmp_abp_aggr.stutyp +); + +UPDATE tmp_abp_aggr +SET tid_stg = ( + SELECT min(tid) + FROM + lehr_stg_ab L + WHERE + tmp_abp_aggr.ch30_fach = L.stg + AND tmp_abp_aggr.ch39_vertief = L.vertfg + AND tmp_abp_aggr.ch35_ang_abschluss = L.abschluss + --AND L.semester_von <= tmp_abp_aggr.sem_der_pruefung + --AND L.semester_bis >= tmp_abp_aggr.sem_der_pruefung + AND L.kz_fach = tmp_abp_aggr.kz_fach + AND L.stort = tmp_abp_aggr.stort + AND L.stutyp = tmp_abp_aggr.stutyp +) +WHERE tid_stg IS NULL; + +UPDATE tmp_abp_aggr +SET tid_stg = ( + SELECT min(tid) + FROM + lehr_stg_ab L + WHERE + tmp_abp_aggr.ch30_fach = L.stg + AND tmp_abp_aggr.ch39_vertief = L.vertfg + AND tmp_abp_aggr.ch35_ang_abschluss = L.abschluss + AND tmp_abp_aggr.pversion = L.pversion + AND tmp_abp_aggr.schwerpunkt = L.schwerpunkt + --AND L.semester_von <= tmp_abp_aggr.sem_der_pruefung + --AND L.semester_bis >= tmp_abp_aggr.sem_der_pruefung + AND L.kz_fach = tmp_abp_aggr.kz_fach + AND L.stutyp = tmp_abp_aggr.stutyp +) +WHERE tid_stg IS NULL; + +UPDATE tmp_abp_aggr +SET tid_stg = ( + SELECT min(tid) + FROM + lehr_stg_ab L + WHERE + tmp_abp_aggr.ch30_fach = L.stg + AND tmp_abp_aggr.ch39_vertief = L.vertfg + AND tmp_abp_aggr.ch35_ang_abschluss = L.abschluss + AND tmp_abp_aggr.schwerpunkt = L.schwerpunkt + --AND L.semester_von <= tmp_abp_aggr.sem_der_pruefung + --AND L.semester_bis >= tmp_abp_aggr.sem_der_pruefung + AND L.kz_fach = tmp_abp_aggr.kz_fach + AND L.stutyp = tmp_abp_aggr.stutyp +) +WHERE tid_stg IS NULL; + +UPDATE tmp_abp_aggr +SET tid_stg = ( + SELECT min(tid) + FROM + lehr_stg_ab L + WHERE + tmp_abp_aggr.ch30_fach = L.stg + AND tmp_abp_aggr.ch39_vertief = L.vertfg + AND tmp_abp_aggr.ch35_ang_abschluss = L.abschluss + --AND L.semester_von <= tmp_abp_aggr.sem_der_pruefung + --AND L.semester_bis >= tmp_abp_aggr.sem_der_pruefung + AND L.kz_fach = tmp_abp_aggr.kz_fach + AND L.stutyp = tmp_abp_aggr.stutyp + ) +WHERE tid_stg IS NULL; + +--jetzt ohne stutyp: +UPDATE tmp_abp_aggr +SET tid_stg = ( + SELECT min(tid) + FROM + lehr_stg_ab L + WHERE + tmp_abp_aggr.ch30_fach = L.stg + AND tmp_abp_aggr.ch39_vertief = L.vertfg + AND tmp_abp_aggr.ch35_ang_abschluss = L.abschluss + --AND L.semester_von <= tmp_abp_aggr.sem_der_pruefung + ---AND L.semester_bis >= tmp_abp_aggr.sem_der_pruefung + AND L.kz_fach = tmp_abp_aggr.kz_fach + --AND L.stutyp = tmp_abp_aggr.stutyp + ) +WHERE tid_stg IS NULL; + +insert into sos_pruefrout +( +tabelle, +tabelle_sos, +matrikel_nr, +semester, +problem, +aktion +) +select +'msg_abp_aggr', +'lab', +matrikel_nr, +bezugssemester, +'Studiengang unbekannt, Hauptprüfung wird gelöscht', +'Warnung' +from tmp_abp_aggr +where tid_stg is null +and bezugssemester >= ${K_SOS_start_lab} +; + +update tmp_abp_aggr set regel=L.regel +from lehr_stg_ab L +where L.tid=tmp_abp_aggr.tid_stg; + + + +-- neu zu ladende Datensätze aus der 'msg_abp_aggr' entfernen +DELETE FROM + msg_abp_aggr +WHERE +--Hauptprüfungen bei Stichtagsbezug nur laden wenn Startsemester gesetzt ist, +--Tagesaktuelle Daten werden immer geladen: +( + bezugssemester >= ${K_SOS_start_lab} + AND sourcesystem = ${Quellsystem_var} + AND bezugssemester >= ( + SELECT T.einfriersemester + FROM sos_stichtag T + WHERE T.tid = msg_abp_aggr.stichtag + ) +) +OR +( + stichtag = ${stichtag_tagesaktuell_var} + AND sourcesystem = ${Quellsystem_var} + AND bezugssemester >= ( + SELECT T.einfriersemester + FROM sos_stichtag T + WHERE T.tid = msg_abp_aggr.stichtag + ) +) +; + + +-- Zuerst stichtagsbezogen füllen +SELECT now(),'Prüfungsdatum nach Stichtag?' FROM xdummy; + +INSERT INTO msg_abp_aggr( + ${target_fields_except_stichtag} , + stichtag +) +SELECT + ${target_fields_except_stichtag} , + D.stichtag +FROM tmp_abp_aggr P, sos_stichtag ST, sos_stichtag_datum D +WHERE + ST.tid = D.stichtag + AND D.semester = P.bezugssemester + AND ST.stichtagsart = 'Prüfungen' + AND ( + ST.appl_key NOT IN ('2', '3') + OR ST.appl_key IS NULL + ) --(2,3) sind "kein Stichtag/parstg-Stichtag" + -- Hauptprüfungen nur laden wenn Startsemester gesetzt ist, + AND P.bezugssemester >= ${K_SOS_start_lab} + + AND P.bezugssemester >= ST.einfriersemester + and D.datum >= P.pdatumsfeld; + + +-- Nur die tagesaktuellen Zahlen, haben in Stichtag eine 2 +SELECT now(),'Nun die tagesaktuallen Zahlen' FROM xdummy; + +INSERT INTO msg_abp_aggr( + ${target_fields_except_stichtag} , + stichtag +) +SELECT + ${target_fields_except_stichtag} , + ST.tid as stichtag +FROM + tmp_abp_aggr P, sos_stichtag ST +WHERE + ${stichtag_tagesaktuell} = ST.tid + AND bezugssemester >= ST.einfriersemester + ; + + + +DROP TABLE tmp_abp_aggr; + +SELECT + now(), + 'Anzahl Sätze in msg_abp_aggr:'::CHAR(30), + count(*) +FROM msg_abp_aggr +GROUP BY 1,2; + + diff --git a/src-modules/module/msg/hilfstabellen/msg_abp_aggr_gew_fuellen.sql b/src-modules/module/msg/hilfstabellen/msg_abp_aggr_gew_fuellen.sql new file mode 100644 index 0000000..f31c41c --- /dev/null +++ b/src-modules/module/msg/hilfstabellen/msg_abp_aggr_gew_fuellen.sql @@ -0,0 +1,626 @@ +--freemarker template + +--(c) 2024 Daniel Quathamer + + +SELECT apnr FROM konstanten WHERE beschreibung = 'pruef_sem_zahl_decimal'; + + +SELECT apnr FROM konstanten WHERE beschreibung = 'Start_POS_Semester'; + + +SELECT apnr FROM konstanten WHERE beschreibung = 'matrikelnr_min'; + + +SELECT apnr FROM konstanten WHERE beschreibung = 'matrikelnr_max'; + + +SELECT apnr FROM konstanten WHERE beschreibung = 'SOS_status_prom'; + + +SELECT tid FROM sos_stichtag WHERE appl_key = '2'; + + +SELECT 1 FROM xdummy WHERE 0 != + (SELECT count(*) FROM konstanten WHERE beschreibung = 'SOS_MTKNR_EXT' AND apnr = 1) +UNION +SELECT 0 FROM xdummy WHERE 0 = + (SELECT count(*) FROM konstanten WHERE beschreibung = 'SOS_MTKNR_EXT' AND apnr = 1); + + +SELECT apnr FROM konstanten WHERE beschreibung = 'SOS_Quellsystem'; + + +select 1 from xdummy where 3=(select max(mod(tid,10)) from semester) +union +select 0 from xdummy where 3!=(select max(mod(tid,10)) from semester) +; + + +select apnr from konstanten where beschreibung='SOS_start_lab_gew' + +select count(*) from sos_gewichtungsvariante; -- für Anpassungen der Sichten im Konnektorlauf genutzt + +> */ + /* union select -1 from xdummy where <>=-1 */ ]]> + + >) */ + <#if !Maskennummer?exists>and sem_der_pruefung>=${K_SOS_start_lab_gew} + order by 1 desc]]> + >) */]]> + >) */ +order by student_weighting_variant_id,sortorder;]]> + + select tid from sos_stichtag where appl_key='5'; + + +-- Falls es Konstanten nicht gibt, Defaultwert: +<#assign p_start_pos_sem = 19001 /> +<#if p_start_pos_sem_var?exists && p_start_pos_sem_var?string?length > 0> +<#assign p_start_pos_sem = p_start_pos_sem_var /> + + +-- Sollen Fachsem. dezimal berechnet werden, d.h. relativ zum Prüfungsdatum? +-- Falls Variable nicht belegt, default 0 (Ganzzahlig) +<#assign p_pruef_sem_zahl_decimal = 0 /> +<#if p_pruef_sem_zahl_decimal_var?exists && p_pruef_sem_zahl_decimal_var?string?length > 0> +<#assign p_pruef_sem_zahl_decimal = p_pruef_sem_zahl_decimal_var /> + + +<#assign matrikelnr_min = 0 /> +<#if matrikelnr_min_var?exists && matrikelnr_min_var?string?length > 0> +<#assign matrikelnr_min = matrikelnr_min_var /> + + +<#assign matrikelnr_max = 2147483647 /> +<#if matrikelnr_max_var?exists && matrikelnr_max_var?string?length > 0> +<#assign matrikelnr_max = matrikelnr_max_var /> + + +<#assign p_promotion = 6 /> +<#if p_promotion_var?exists && p_promotion_var?string?length > 0> +<#assign p_promotion = p_promotion_var /> + + +<#assign stichtag_tagesaktuell = 0 /> +<#if stichtag_tagesaktuell_var?exists && stichtag_tagesaktuell_var?string?length > 0> +<#assign stichtag_tagesaktuell = stichtag_tagesaktuell_var /> + +<#if istTrimester==1> +<#assign Trimester="true" /> +<#else> +<#assign Trimester="false" /> + + +<#assign bezugssemester_cond="(case when part='TSAB' then sem_der_pruefung_exa else sem_der_pruefung end)" /> +<#assign pdatumsfeld_cond="(case when part='TSAB' then d_abg_pruefung_exa else d_abg_pruefung end)" /> + +<#assign target_fields_except_stichtag_summe=" matrikel_nr, +alter, +geschlecht, +ca12_staat, +ort_der_hzb, +staat_der_hzb, +hzbart_int, +hzbart, +pseudonym, +sem_der_pruefung, +sem_der_pruefung_tsg, +sem_d_abg_pruefung, +sem_d_abg_pruefung_tsg, +d_abg_pruefung, +d_abg_pruefung_tsg, +bezugssemester, +tid_stg, +stufrm, +stuart, +--regel, +pordnr, +studiengang_nr, +fach_nr, +st_studium_nr, +st_studium_nr_tsg, +fach_sem_zahl, +fach_sem_zahl_tsg, +part, +leistungs_id, +pnr, +pversuch, +sourcesystem, +pvermerk, +note, +note_tsg, +notenskala, +pstatus, +pstatus_tsg, +prueck, +--ects, +ects_tsg, +studiengangstyp, +abschnitt, +fach_abschlussarbeit +" /> + + +<#if Quellsystem_var=15> + + +SELECT 'Matrikelnr. Max: ${matrikelnr_max} '::CHAR(30) FROM xdummy; +SELECT 'Matrikelnr. Min: ${matrikelnr_min} '::CHAR(30) FROM xdummy; +SELECT 'SOS_MTKNR_EXT: ${SOS_MTKNR_EXT} '::CHAR(30) FROM xdummy; +SELECT 'Startsemester ${K_SOS_start_lab}'::CHAR(30) FROM xdummy; +SELECT 'Startsemester Vorsemester ${K_SOS_start_lab_vorsemester}'::CHAR(30) FROM xdummy; + +SELECT now(),'Anzahl Sätze in msg_abp_aggr_gew:'::CHAR(30),count(*) FROM msg_abp_aggr GROUP BY 1,2; + +<#macro sos_gew_restrict type field operator values> + and ( + <#list values?split("|") as item> +${field}${operator}<#if type=='char'>'${item}<#if type=='char'>' <#if item_has_next> <#if operator="<>">and<#else>or + ) + + +<#macro sos_gew_restrictions regel> + -- has_content liefert seltsamerweise false auch wenn Gewicht Wert enthält, daher hier mit length gearbeitet + where 1=1 + <#if regel.weighting_ident_list?length>0> <@sos_gew_restrict type="char" field="gewichtungs_ident" operator=regel.weighting_ident_operator_id values=regel.weighting_ident_list/> + <#if regel.degree_counter_list?length>0> <@sos_gew_restrict type="integer" field="studiengang_nr" operator=regel.degree_counter_operator_id values=regel.degree_counter_list/> + <#if regel.subject_counter_list?length>0> <@sos_gew_restrict type="integer" field="fach_nr" operator=regel.subject_counter_operator_id values=regel.subject_counter_list/> + <#if regel.subject_count_list?length>0> <@sos_gew_restrict type="integer" field="fachanzahl" operator=regel.subject_count_operator_id values=regel.subject_count_list/> + <#if regel.degree_count_list?length>0> <@sos_gew_restrict type="integer" field="abschlussanzahl" operator=regel.degree_count_operator_id values=regel.degree_count_list/> + <#if regel.ects_list?length>0> <@sos_gew_restrict type="integer" field="ects" operator=regel.ects_operator_id values=regel.ects_list/> + <#if regel.teaching_unit_list?length>0> <@sos_gew_restrict type="char" field="lehr" operator=regel.teaching_unit_operator_id values=regel.teaching_unit_list/> + <#if regel.department_list?length>0> <@sos_gew_restrict type="char" field="fb" operator=regel.department_operator_id values=regel.department_list/> + <#if regel.subject_list?length>0> <@sos_gew_restrict type="char" field="ch30_fach" operator=regel.subject_operator_id values=regel.subject_list/> + <#if regel.degree_list?length>0> <@sos_gew_restrict type="char" field="ch35_ang_abschluss" operator=regel.degree_operator_id values=regel.degree_list/> + <#if regel.subject_indicator_list?length>0> <@sos_gew_restrict type="char" field="kz_fach" operator=regel.subject_indicator_operator_id values=regel.subject_indicator_list/> + <#if regel.type_of_study_list?length>0> <@sos_gew_restrict type="char" field="stuart" operator=regel.type_of_study_operator_id values=regel.type_of_study_list/> + <#if regel.form_of_study_list?length>0> <@sos_gew_restrict type="char" field="stufrm" operator=regel.form_of_study_operator_id values=regel.form_of_study_list/> + + +<#macro sos_gew_updates table regel> + <#switch regel.k_student_weighting_action_type_id?number> + <#case 5> +-- Normierung je Matrikelnummer + truncate table tmp_zaehlung; +insert into tmp_zaehlung(matrikel_nr,gewichtsumme) +select matrikel_nr,sum(gewicht) from ${table} group by 1; +update ${table} set gewichtsumme=(select sum(gewichtsumme) from tmp_zaehlung where ${table}.matrikel_nr=tmp_zaehlung.matrikel_nr); +update ${table} set gewicht= gewicht/gewichtsumme <@sos_gew_restrictions regel=regel/> and gewichtsumme!=0; + <#break> + <#case 4> + -- Normierung je Matrikelnummer und Fach + truncate table tmp_zaehlung; +insert into tmp_zaehlung(matrikel_nr,studiengang_nr,gewichtsumme) +select matrikel_nr,studiengang_nr,sum(gewicht) from ${table} group by 1,2; +update ${table} set gewichtsumme_pro_abschluss=(select sum(gewichtsumme) from tmp_zaehlung where ${table}.matrikel_nr=tmp_zaehlung.matrikel_nr +and ${table}.studiengang_nr=tmp_zaehlung.studiengang_nr); + update ${table} set gewicht=gewicht/gewichtsumme_pro_abschluss <@sos_gew_restrictions regel=regel/> and gewichtsumme_pro_abschluss!=0; + <#break> + <#default> +<#if regel.weight?length>0> + update ${table} set gewicht=<#if regel.k_student_weighting_weight_usage_type_id?number=2>gewicht*${regel.weight?string?replace(',','.')} <@sos_gew_restrictions regel=regel/>; + + + + <#assign new_a_needed=false/> + update ${table} set dummy1=0 + <#if regel.new_weighting_ident?length>0> , gewichtungs_ident='${regel.new_weighting_ident?replace("\x0027","\x0027\x0027")}' + <#if regel.new_degree_counter?length>0>,studiengang_nr=${regel.new_degree_counter} <#assign new_a_needed=true/> + <#if regel.new_subject_counter?length>0>, fach_nr=${regel.new_subject_counter} <#assign new_a_needed=true/> + <#if regel.newects?length>0> , ects=${regel.newects} <#assign new_a_needed=true/> + <#if regel.new_degree?length>0> , ch35_ang_abschluss='${regel.new_degree}' <#assign new_a_needed=true/> + <#if regel.new_teaching_unit?length>0> , lehr='${regel.new_teaching_unit}' <#assign new_a_needed=true/> + <#if regel.new_department?length>0> , fb='${regel.new_department}' <#assign new_a_needed=true/> + <#if regel.new_subject?length>0> ,ch30_fach='${regel.new_subject}' <#assign new_a_needed=true/> + <#if regel.new_subject_indicator?length>0> , kz_fach='${regel.new_subject_indicator}' <#assign new_a_needed=true/> + <#if regel.new_type_of_study?length>0> , stuart='${regel.new_type_of_study}' <#assign new_a_needed=true/> + <#if regel.new_form_of_study?length>0> ,stufrm='${regel.new_form_of_study}' <#assign new_a_needed=true/> + <#if new_a_needed>, artifical_id=null + ,dummy2=0 <@sos_gew_restrictions regel=regel/>; + + + +<#macro update_art_id> +'fb:'||fb||'l:'||lehr||'stg:'||ch30_fach||'ab:'||ch35_ang_abschluss||'v:'||trim(nvl(ch39_vertief,'n'::char(1)))||'s:'||trim(nvl(schwerpunkt,'n'::char(1)))||'p:'||pversion||'k:'||trim(nvl(kz_fach,'n'::char(1)))||'s:'||trim(nvl(stort,'n'::char(1)))||'von:'||semester_von||'bis:'||semester_bis + + +<#compress> --entfernt whitespace + + <#if !Maskennummer?exists> -- wenn das Script nachts ausgeführt wird + --delete from sos_stg_aggr where summe=0; + <#assign durchfuehrungsart="konnektorlauf"/> + <#else> + <#assign durchfuehrungsart="<>"?replace("'","")/> + + + <#assign target_lehr_stg_ab="lehr_stg_ab_gew"/> + + <#if "Tabellenerzeugung"!=""> + + <#if !Maskennummer?exists> + truncate table msg_abp_aggr_gew; --wenn im Browser läuft wird unten sicherheitshalber noch mal delete pro gewichtung/semester/stichtag gemacht + + create temp table tmp_regelord (tid serial,dummy integer); + create temp table tmp_zaehlung (matrikel_nr integer,abschlussanzahl integer default 0,studiengang_nr integer,fachanzahl integer default 0, + gewichtsumme decimal(19,6)) <@informixnolog/>; + create index tmp_iz1 on tmp_zaehlung (matrikel_nr); + + CREATE TEMP TABLE tmp_sos + ( + --aus msg_abp_aggr + matrikel_nr INTEGER , + alter decimal(14,2) , + geschlecht SMALLINT , + ca12_staat SMALLINT , + ort_der_hzb SMALLINT , + staat_der_hzb INTEGER , + hzbart_int CHAR(10) , + hzbart SMALLINT , + pseudonym VARCHAR(255) , + sem_der_pruefung SMALLINT , + sem_der_pruefung_tsg SMALLINT , + sem_d_abg_pruefung SMALLINT , + sem_d_abg_pruefung_tsg SMALLINT , + bezugssemester SMALLINT , + d_abg_pruefung DATE , + d_abg_pruefung_tsg DATE , + stichtag INTEGER , + tid_stg INTEGER , + stufrm CHAR(10) , + stuart CHAR(10) , + regel SMALLINT , + pordnr INTEGER , + studiengang_nr SMALLINT , + fach_nr SMALLINT , + st_studium_nr INTEGER , + st_studium_nr_tsg INTEGER , + fach_sem_zahl decimal(10,2) , + fach_sem_zahl_tsg SMALLINT , + abschnitt SMALLINT , + studiengangstyp CHAR(10) , + part CHAR(10) , + leistungs_id INTEGER , + pnr INTEGER , + pversuch INTEGER , + sourcesystem INTEGER , + pvermerk CHAR(10) , + note decimal(8,2) , + note_tsg decimal(8,2) , + notenskala CHAR(10) , + pstatus CHAR(10) , + pstatus_tsg CHAR(10) , + prueck SMALLINT , + ects FLOAT , + ects_tsg FLOAT , + summe INTEGER , + ch30_fach char(10), + ch35_ang_abschluss char(10), + ch39_vertief char(10), + schwerpunkt char(10), + pversion integer, + kz_fach char(10), + stort char(10), + lehr char(10), + -- weitere Feld aus lehr_stg_ab + semester_von integer, + semester_bis integer , + text char(255), + fach_zaehler smallint,anteil decimal(3,2), abstgvnr integer, + --bis hier + stichtagname varchar(255), + fachname varchar(255), + abschlussname varchar(255), + gewicht decimal(19,6) default 1, + gewichtungs_ident varchar(255), + original_fb char(10),-- falls der FB geändert wird, wird hiermit kontrolliert, ob überhaupt auf einen anderen FB geändert + fb char(10), + fachanzahl integer, + abschlussanzahl integer, + --datensatzanzahl integer, + gewichtsumme decimal(19,6), + gewichtsumme_pro_abschluss decimal(19,6), + regelord integer default 0, + dummy1 smallint, + dummy2 smallint, + artifical_id varchar(255), + fach_abschlussarbeit char(10) + ) + ; + create index tmp_ix0 on tmp_sos (gewichtungs_ident); + create index tmp_ix1 on tmp_sos (studiengang_nr); + create index tmp_ix2 on tmp_sos (fach_nr); + create index tmp_ix3 on tmp_sos (fachanzahl); + create index tmp_ix4 on tmp_sos (abschlussanzahl); + create index tmp_ix5 on tmp_sos (ects); + create index tmp_ix7 on tmp_sos (fb); + + create index tmp_ix11 on tmp_sos (stuart); + create index tmp_ix12 on tmp_sos (stufrm); + create index tmp_ix13 on tmp_sos (matrikel_nr); + + create index tmp_ix15 on tmp_sos (artifical_id); + --wenn "Tabellenerzeugung"!="" + + + <#foreach gewichtung in gewichtungen> + --war hier:truncate table tmp_sos; + select setval('${target_lehr_stg_ab}_tid_neu_seq', (select max(tid)+1 from ${target_lehr_stg_ab})); + <#foreach einStichtag in stichtage> + select 'Stichtag: ${einStichtag.id}' from xdummy; + + <#foreach einSemester in semester> + select 'Semester: ${einSemester.id}' from xdummy; + --jetzt hier + truncate table tmp_sos; + <#if "tmp_sos fuellen"!=""> + INSERT INTO tmp_sos ( + ${target_fields_except_stichtag_summe}, + summe, + ch30_fach, + ch35_ang_abschluss, + ch39_vertief, + schwerpunkt, + pversion , + stort, + kz_fach, + lehr , + original_fb, + fb, + semester_von, + semester_bis, + text, + fach_zaehler , + anteil, + abstgvnr, + --ects, + gewichtungs_ident --, + --stutyp + ) + SELECT ${target_fields_except_stichtag_summe}, + summe, + L.stg as ch30_fach, + L.abschluss as ch35_ang_abschluss, + L.vertfg as ch39_vertief, + L.schwerpunkt, + L.pversion , + L.stort, + L.kz_fach, + L.lehr , + L.fb, + L.fb, + L.semester_von, + L.semester_bis, + L.text, + L.fach_zaehler , + L.anteil, + L.abstgvnr, + --L.ects, + 'Default' as gewichtungs_ident + + FROM msg_abp_aggr S, lehr_stg_ab_gew L + WHERE + S.abschnitt in (1,2) and --nur Haupt und Vorprüfungen + <#assign semester_feld="bezugssemester" /> + <#assign stichtag_filter="stichtag = "+ einStichtag.id/> + + <#if einStichtag.id?string = sembez_daten?string > + <#assign semester_feld="bezugssemester" /> + <#assign stichtag_filter="stichtag = 2" /> + + S.${semester_feld}=${einSemester.id} and + ${stichtag_filter} + and S.tid_stg=L.tid + <#if Maskennummer?exists&&"<>"!=''> and 's_' || L.tid in <@printkeys Studiengang.allNeededKeysList/> + <#if Maskennummer?exists&&"<>"!=''> and L.abschluss in (<>) + <#if Maskennummer?exists&&"<>"!=''> and L.kz_fach = <> + <#if Maskennummer?exists&&"<>"!=''> and stufrm = <> + + <#if Matrikelnr?exists> + /* and matrikel_nr in (${Matrikelnr?replace("'","")}) -- <>) */ + + ; + --TODO ects evtl direkt aus lehr_stg_ab + update tmp_sos set artifical_id=<@update_art_id/> where artifical_id is null; + + --wenn "tmp_sos fuellen"!="" + <#if gewichtung.id!=-1> -- -1 heisst keine Gewichtung (für reine Vorschau) + + <#foreach regel in gewichtungsregeln> + <#if regel.student_weighting_variant_id=gewichtung.id> + select 'Regel-ID:${regel.id}-${regel.name?replace("\x0027","\x0027\x0027")}' from xdummy; + insert into tmp_regelord (dummy) values (1); + truncate table tmp_zaehlung; + --aus Performancegründen nur wenn abschluss/fach-anzahl benötigt wird + <#if regel.degree_count_list?length>0||(Maskennummer?exists&&"<>"!=''&&!"<>"?starts_with('z.B.'))> + insert into tmp_zaehlung (matrikel_nr,abschlussanzahl) + select matrikel_nr,count(distinct studiengang_nr) from tmp_sos group by 1; + update tmp_sos set abschlussanzahl=(select sum(abschlussanzahl) from tmp_zaehlung where tmp_sos.matrikel_nr=tmp_zaehlung.matrikel_nr); + + <#if Maskennummer?exists&&"<>"!=''&&!"<>"?starts_with('z.B.')> + delete from tmp_sos where not (abschlussanzahl <>); + + + + <#if regel.subject_count_list?length>0||(Maskennummer?exists&&"<>"!=''&&!"<>"?starts_with('z.B.'))> + insert into tmp_zaehlung (matrikel_nr,studiengang_nr,fachanzahl) + select matrikel_nr,studiengang_nr,count(distinct ch30_fach) from tmp_sos group by 1,2; + update tmp_sos set fachanzahl=(select sum(fachanzahl) from tmp_zaehlung where tmp_sos.matrikel_nr=tmp_zaehlung.matrikel_nr and + tmp_sos.studiengang_nr=tmp_zaehlung.studiengang_nr); + <#if Maskennummer?exists&&"<>"!=''&&!"<>"?starts_with('z.B.')> + delete from tmp_sos where not (fachanzahl <>); + + + <#switch regel.k_student_weighting_action_type_id?number> + <#case 1> --überschreiben + <@sos_gew_updates table='tmp_sos' regel=regel/>; + <#break> + <#case 2> --kopieren + <@selectintotmp source="tmp_sos" target="tmp_kopie" select="*"> + <@sos_gew_restrictions regel=regel/> + --and sem_der_pruefung=${einSemester.id} + --and stichtag=${einStichtag.id} + <@informixnolog/>; + <@sos_gew_updates table='tmp_kopie' regel=regel/> + + update tmp_kopie set regelord=(select max(tid) from tmp_regelord); + insert into tmp_sos select * from tmp_kopie; + drop table tmp_kopie; + <#break> + <#case 3> --löschen + delete from tmp_sos <@sos_gew_restrictions regel=regel/> ; + <#break> + + <#case 4> + -- Normierung nach Matrkelnr und Abschluss + <@sos_gew_updates table='tmp_sos' regel=regel/>; + <#break> + <#case 5> + -- Normierung nach Matrkelnr + <@sos_gew_updates table='tmp_sos' regel=regel/>; + + <#break> + + + --wenn regel.student_weighting_variant_id=gewichtung.id + + --wenn gewichtung.id!=-1 + + <#if durchfuehrungsart="konnektorlauf"> + update tmp_sos set artifical_id=<@update_art_id/> where artifical_id is null; + update tmp_sos set tid_stg=(select min(tid) from lehr_stg_ab_gew where tmp_sos.artifical_id=lehr_stg_ab_gew.artifical_id + -- bugfix #173885 + and (lehr_stg_ab_gew.gewichtung_id is null or lehr_stg_ab_gew.gewichtung_id=${gewichtung.id}) + ); + --Gewichtung füllen + delete from msg_abp_aggr_gew where gewichtung_id=${gewichtung.id} and + ${semester_feld}=${einSemester.id} and stichtag=${einStichtag.id}; + insert into msg_abp_aggr_gew ( ${target_fields_except_stichtag_summe}, + stichtag, + gewichtung_id, + summe + ) + select + ${target_fields_except_stichtag_summe}, + ${einStichtag.id} , + ${gewichtung.id}, + gewicht + from tmp_sos; + + + --Schleife Semester + --Schleife Stichtag + --Schleife gewichtung + + +drop table tmp_regelord; + +<#if !Maskennummer?exists> + drop table tmp_sos; drop table tmp_zaehlung; ANALYZE msg_abp_aggr_gew; + +<#if Maskennummer?exists> + --dieser Block wird nur gebraucht für eine Vorschau bei denen aber Fachanzahl oder Abschlussanzahl eingeschränkt ist + <#if "<>"=="'-1'"> + <#foreach einStichtag in stichtage> + <#foreach einSemester in semester> + truncate table tmp_zaehlung; + insert into tmp_zaehlung (matrikel_nr,abschlussanzahl) + select matrikel_nr,count(distinct studiengang_nr) from tmp_sos + where sem_der_pruefung = ${einSemester.id} and stichtag = ${einStichtag.id} + group by 1; + update tmp_sos set abschlussanzahl=(select sum(abschlussanzahl) from tmp_zaehlung where tmp_sos.matrikel_nr=tmp_zaehlung.matrikel_nr) + where sem_der_pruefung = ${einSemester.id} and stichtag = ${einStichtag.id}; + + insert into tmp_zaehlung (matrikel_nr,studiengang_nr,fachanzahl) + select matrikel_nr,studiengang_nr,count(distinct ch30_fach) from tmp_sos + where sem_der_pruefung = ${einSemester.id} and stichtag = ${einStichtag.id} group by 1,2; + update tmp_sos set fachanzahl=(select sum(fachanzahl) from tmp_zaehlung where tmp_sos.matrikel_nr=tmp_zaehlung.matrikel_nr and + tmp_sos.studiengang_nr=tmp_zaehlung.studiengang_nr) + where sem_der_pruefung = ${einSemester.id} and stichtag = ${einStichtag.id}; + + <#if "<>"!=''&&!"<>"?starts_with('z.B.')> + delete from tmp_sos where not (fachanzahl <>); + + <#if "<>"!=''&&!"<>"?starts_with('z.B.')> + delete from tmp_sos where not (abschlussanzahl <>); + + + + --Gewichtungsvariante -1 + analyze tmp_sos; + update tmp_sos set ch30_fach=(select L.stg from ${target_lehr_stg_ab} L where L.tid=tid_stg); + update tmp_sos set kz_fach=(select L.kz_fach from ${target_lehr_stg_ab} L where L.tid=tid_stg); + update tmp_sos set ch35_ang_abschluss=(select L.abschluss from ${target_lehr_stg_ab} L where L.tid=tid_stg); + --update tmp_sos set gewichtungs_ident=null; + update tmp_sos set fachname = (select druck from cifx where key = 30 and apnr = ch30_fach); + update tmp_sos set abschlussname = (select druck from cifx where key = 35 and apnr = ch35_ang_abschluss); + update tmp_sos set stichtagname=(select name from sos_stichtag where tmp_sos.stichtag=sos_stichtag.tid); + update tmp_sos set fachname=nvl(fachname,''::char(1))||' Achtung kein passender Studiengang gefunden!' where tid_stg is null; + update tmp_sos set fb=(select min(fb) from ${target_lehr_stg_ab} L where L.tid=tid_stg) where (fb is null or fb=''); + update tmp_sos set lehr=(select min(lehr) from ${target_lehr_stg_ab} L where L.tid=tid_stg) where lehr is null; + drop table tmp_zaehlung; + --Maskennummer + --Übertragung in sos_lab_aggr + <#if durchfuehrungsart="konnektorlauf"> + + <#if Maskennummer?exists> + select stichtagname,sem_der_pruefung,matrikel_nr,studiengang_nr,fach_nr,ch30_fach,fachname,kz_fach,ch35_ang_abschluss,abschlussname,stuart,stufrm,ects, + round(gewicht,2), <#if durchfuehrungsart=="vorschau">gewichtungs_ident, lehr,fb from tmp_sos + order by stichtagname,sem_der_pruefung,matrikel_nr,studiengang_nr,fach_nr,regelord; + + + SELECT + now(), + 'Anzahl Sätze in msg_abp_aggr_gew:'::CHAR(30), + count(*) + FROM msg_abp_aggr_gew + GROUP BY 1,2; + --konnektorlauf + +--sourcesystem CO diff --git a/src-modules/module/msg/hilfstabellen/msg_fkombi_aggr_fuellen.sql b/src-modules/module/msg/hilfstabellen/msg_fkombi_aggr_fuellen.sql index 1a17e06..0334d8d 100644 --- a/src-modules/module/msg/hilfstabellen/msg_fkombi_aggr_fuellen.sql +++ b/src-modules/module/msg/hilfstabellen/msg_fkombi_aggr_fuellen.sql @@ -1,4 +1,10 @@ --freemarker template + + +select id,content from sx_repository where art='MSG_FKOMBI_KENNZ' and aktiv=1 order by sort1,sort2,sort3; + + + <#assign max_fachnr=6 /> <#if MSG_FKOMBI_TID_STG?exists> @@ -17,12 +23,41 @@ hrst CHAR(10) , stufrm char(10), fach_sem_zahl SMALLINT not null, kz_rueck_beur_ein SMALLINT not null, -kombi_kennz CHAR(10) , +pversion_uniquename varchar(255), +kombi_kennz varchar(255), kombi_tid_stg_2 INTEGER , kombi_fach_nr SMALLINT , kombi_fach_sem_zahl SMALLINT , kombi_ch30_fach CHAR(10) , kombi_anz smallint, +kombi_anz_spr smallint, +summe decimal(19,6) +) +; + +create temp table tmp_msg_fkombi_aggr2( + matrikel_nr INTEGER , +studiengang_nr SMALLINT not null, +fach_nr SMALLINT not null, +sem_rueck_beur_ein SMALLINT not null, +tid_stg INTEGER , +ca12_staat SMALLINT not null, +geschlecht SMALLINT not null, +alter decimal(14,2) , +hzbart SMALLINT , +hrst CHAR(10) , +stufrm CHAR(10), +fach_sem_zahl SMALLINT not null, +kz_rueck_beur_ein SMALLINT not null, +pversion_uniquename varchar(255), +kombi_kennz varchar(255), +kombi_anz smallint, +kombi_anz_spr INTEGER , +kombi_ist_auszuschliessen INTEGER default 0, +kombi_tid_stg INTEGER , +kombi_fach_nr SMALLINT not null, +kombi_fach_sem_zahl SMALLINT not null, +kombi_ch30_fach CHAR(10) , summe decimal(19,6) ) ; @@ -41,6 +76,7 @@ matrikel_nr, stufrm, fach_sem_zahl, kz_rueck_beur_ein, + pversion_uniquename, summe) select matrikel_nr, studiengang_nr, @@ -55,18 +91,17 @@ select matrikel_nr, stufrm, fach_sem_zahl, kz_rueck_beur_ein, + pversion_uniquename, summe - from sos_stg_aggr S, sos_stichtag I + from sos_stg_aggr S, dim_studiengang D,sos_stichtag I where S.stichtag=I.tid + and S.tid_stg=D.tid and I.appl_key='0' and ${MSG_FKOMBI_TID_STG} ; -truncate table msg_fkombi_aggr; -<#list 1..max_fachnr as fach_nr> - -insert into msg_fkombi_aggr +insert into tmp_msg_fkombi_aggr2 (matrikel_nr, studiengang_nr, fach_nr, @@ -80,6 +115,7 @@ insert into msg_fkombi_aggr stufrm, fach_sem_zahl, kz_rueck_beur_ein, + pversion_uniquename, kombi_kennz, kombi_tid_stg, kombi_fach_nr, @@ -100,7 +136,8 @@ T.hrst, T.stufrm, T.fach_sem_zahl, T.kz_rueck_beur_ein, -''::varchar(10) as kombi_kennz, +T.pversion_uniquename, +''::varchar(255) as kombi_kennz, S.tid_stg as kombi_tid_stg, S.fach_nr as kombi_fach_nr, S.fach_sem_zahl as kombi_fach_sem_zahl, @@ -113,10 +150,10 @@ and D.tid=S.tid_stg and T.matrikel_nr=S.matrikel_nr and T.studiengang_nr=S.studiengang_nr and T.sem_rueck_beur_ein=S.sem_rueck_beur_ein ---and T.fach_nr !=S.fach_nr +and S.tid_stg != T.tid_stg ; -update msg_fkombi_aggr F set kombi_anz=(select count(*) +update tmp_msg_fkombi_aggr2 F set kombi_anz=(select count(*) from sos_stg_aggr S, dim_studiengang D, sos_stichtag I where S.stichtag=I.tid and I.appl_key='0' @@ -126,19 +163,61 @@ and S.sem_rueck_beur_ein=F.sem_rueck_beur_ein and S.studiengang_nr=F.studiengang_nr ); ---TODO: Hildesheim spezifisch: -update msg_fkombi_aggr F set kombi_kennz='SPRACHE_F3' -where exists(select S.matrikel_nr -from sos_stg_aggr S, dim_studiengang D, sos_stichtag I -where S.stichtag=I.tid -and I.appl_key='0' -and D.tid=S.tid_stg -and S.matrikel_nr=F.matrikel_nr -and S.sem_rueck_beur_ein=F.sem_rueck_beur_ein -and S.studiengang_nr=F.studiengang_nr -and D.stg in ('008','150','059') -and S.fach_nr=3 -); +<#if kombi_kennz?has_content> +<#foreach kennz in kombi_kennz> +update tmp_msg_fkombi_aggr2 set kombi_kennz='${kennz.id}' +where ${kennz.content}; + + + + + +truncate table msg_fkombi_aggr; + + +insert into msg_fkombi_aggr +(matrikel_nr, + studiengang_nr, + fach_nr, + sem_rueck_beur_ein, + tid_stg, + ca12_staat, + geschlecht, + alter, + hzbart, + hrst, + stufrm, + fach_sem_zahl, + kz_rueck_beur_ein, + kombi_anz, + kombi_kennz, + kombi_tid_stg, + kombi_fach_nr, + kombi_fach_sem_zahl, + kombi_ch30_fach, + summe) + select + matrikel_nr, + studiengang_nr, + fach_nr, + sem_rueck_beur_ein, + tid_stg, + ca12_staat, + geschlecht, + alter, + hzbart, + hrst, + stufrm, + fach_sem_zahl, + kz_rueck_beur_ein, + kombi_anz, + kombi_kennz, + kombi_tid_stg, + kombi_fach_nr, + kombi_fach_sem_zahl, + kombi_ch30_fach, + summe + from tmp_msg_fkombi_aggr2; drop table tmp_msg_fkombi_aggr; diff --git a/src-modules/module/msg/masken/160770_felderinfo.unl b/src-modules/module/msg/masken/160770_felderinfo.unl new file mode 100644 index 0000000..03b0ebe --- /dev/null +++ b/src-modules/module/msg/masken/160770_felderinfo.unl @@ -0,0 +1,45 @@ +160770^Köpfe oder Fälle ?^1^0^0^140^150^1^sql^70^0^1^<> select apnr, eintrag from koepfe_oder_faelle order by 2^apnr, eintrag^<> select apnr, eintrag from koepfe_oder_faelle where eintrag = 'Fälle';^ +160771^Seit Semester^3^0^0^140^80^1^integer^30^0^1^<> select tid, eintrag from semester order by 1 DESC;^ ^<> select tid, eintrag from semester where today()-365 between sem_beginn and sem_ende;^ +160772^Studiengang^6^0^0^140^150^50^char^30^0^12^<> select tid,name,sortnr from sichten where art in ('SOS-Kostenstellen-Sicht', 'SOS-Studiengang-Sicht') order by 3,2;^ ^ ^ +160773^Staatsangehörigkeit^36^0^0^130^150^10^char^30^0^12^<> select tid,name,sortnr from sichten where art='SOS-Staaten-Sicht' order by 3,2;^ ^ ^ +160774^Stichtag Prüfungen^1^350^-1^140^100^1^sql^30^0^1^<> select tid, name from sos_stichtag where stichtagsart='Prüfungen' order by 2;^ ^<> select tid, name from sos_stichtag where stichtagsart='Prüfungen' and appl_key='2';^ +160775^Prüfungsstatus^13^0^0^140^70^1^char^30^0^1^<> select apnr,druck from sos_k_pstatus;^hidden^ ^ +160776^Weitere Tabellen^123^0^0^140^140^10^char^30^0^1^<> \ +--freemarker template\ +select name,string_not_null(caption) || ' - ' || name from sx_tables where name in ('dim_studiengang')\ +<#if <>!='tabelle_html_datenblatt.xsl'>\ + and name in (select distinct tablename from stylesheet_field where stylesheet_id in (select tid from sx_stylesheets where filename=<>)) \ +\ +order by 2^ ^ ^ +160777^bis Fachsemester^20^350^-1^140^10^1^integer^30^0^0^^ ^ ^ +160778^Studienabschnitt^12^330^-1^130^150^1^integer^4^1^1^<> select tid, eintrag from studienabschnitt where tid <= 2 order by 1;^hidden^<> select tid, eintrag from studienabschnitt where tid = 2;^ +160779^Bis Semester^4^350^-1^140^80^1^integer^30^0^1^<> select tid, eintrag from semester order by 1 DESC;^ ^<> select tid, eintrag from semester where today() between sem_beginn and sem_ende;^ +160780^Prüfungsart^15^0^0^140^150^1^char^4^0^1^<> select apnr,druck from sos_k_part order by 2^ ^ ^ +160781^Geschlecht^37^0^0^140^80^1^integer^30^0^1^<> SELECT apnr,druck FROM cif WHERE cif.key = 9003 order by 2;^ ^ ^ +160782^Felder^125^0^0^150^190^10^char^30^0^1^<>\ +--freemarker template\ + select trim(F.table_name) || '.' || F.name,trim(T.caption) || ':' || trim(F.caption) || ' - ' || trim(F.name) from sx_fields F,\ + sx_tables T where F.table_name=T.name and F.currentlyused=1\ + <#if <>='tabelle_html_datenblatt.xsl'>\ + and (F.table_name ='msg_abp_aggr'\ + /* or F.table_name in (<>) */) \ +<#else>\ +and trim(F.table_name) || '.' || F.name in (select trim(tablename)||'.'||trim(fieldname) from stylesheet_field where stylesheet_id in \ +(select tid from sx_stylesheets where filename=<>))\ +\ + order by 2;^ ^ ^ +160783^Fächer^8^0^0^150^200^6^char^30^0^12^<> select tid,name,sortnr from sichten where art='Fächer-Sicht' order by 3,2;^ ^ ^ +160784^Schlüssel anzeigen^150^0^0^100^100^1^integer^30^1^1^<> select 1,'Ja' from xdummy union select 0,'Nein' from xdummy^ ^<> select 1,'Ja' from xdummy^ +160785^tablestylesheet^121^0^0^100^200^1^char^200^1^1^<> select distinct filename,X.caption,ord from sx_stylesheets X,sx_mask_style S where X.tid=S.stylesheet_id and S.maskeninfo_id=160770 order by ord^ ^<> select distinct filename,X.caption,ord from sx_stylesheets X,sx_mask_style S where X.tid=S.stylesheet_id and S.maskeninfo_id=160770 order by ord limit 1^ +160786^Ausgabeformat^2001^0^0^100^150^1^char^200^1^1^<> select element_value,description from menu_element where element='Ausgabeformat' and nature::smallint<100 order by nature::smallint^ ^<> select element_value,description from menu_element where element='Ausgabeformat' and description='HTML'^ +160789^AbsolventInnen oder Abschlussprüfungen^11^0^0^100^200^1^integer^255^1^1^<> \ +select 1,'AbsolventInnen'\ +union select 2,'Abschlussprüfungen'\ +union select 3,'AbsolventInnenfachfälle'\ +union select 4,'Teilstudienabschlussprüfungen'\ +from xdummy \ +order by 1^ ^<> select 2,'Abschlussprüfungen' from xdummy^ +160790^##line##^10^0^0^100^100^1^char^5000^0^8^^ ^1^ +160791^Abschluss^9^0^0^140^170^5^char^30^0^12^<> select tid,name,sortnr from sichten where art in ('SOS-Abschluss-Sicht') and aktiv=1 order by 3,2;^ ^ ^ +160792^Matrikel-Nr.^30^350^-1^150^180^1^char^200^0^0^^ ^ ^ +160793^##line##^40^0^0^100^100^1^char^5000^0^8^^ ^1^ diff --git a/src-modules/module/msg/masken/160770_maske_system_bez.unl b/src-modules/module/msg/masken/160770_maske_system_bez.unl new file mode 100644 index 0000000..9b35bc4 --- /dev/null +++ b/src-modules/module/msg/masken/160770_maske_system_bez.unl @@ -0,0 +1 @@ +160770^7^ diff --git a/src-modules/module/msg/masken/160770_masken_felder_bez.unl b/src-modules/module/msg/masken/160770_masken_felder_bez.unl new file mode 100644 index 0000000..aa9d3b5 --- /dev/null +++ b/src-modules/module/msg/masken/160770_masken_felder_bez.unl @@ -0,0 +1,22 @@ +160770^160770^ +160770^160771^ +160770^160772^ +160770^160773^ +160770^160774^ +160770^160775^ +160770^160776^ +160770^160777^ +160770^160778^ +160770^160779^ +160770^160780^ +160770^160781^ +160770^160782^ +160770^160783^ +160770^160784^ +160770^160785^ +160770^160786^ +160770^160789^ +160770^160790^ +160770^160791^ +160770^160792^ +160770^160793^ diff --git a/src-modules/module/msg/masken/160770_maskeninfo.unl b/src-modules/module/msg/masken/160770_maskeninfo.unl new file mode 100644 index 0000000..4d0a53b --- /dev/null +++ b/src-modules/module/msg/masken/160770_maskeninfo.unl @@ -0,0 +1,140 @@ +160770^Abschlussprüfungen Datenblatt^--Freemarker Template\ +<#include "SQL_lingua_franca"/>\ +<#include "SuperX_general"/>\ +<#include "DatenblattSQLGenerator"/>\ +\ +--ram excelexport \ +\ +\ +\ +\ +>,"<>",.vars["Weitere TabellenObject"].allKeys)}\ + \ + )\ + order by 1;]]>\ +\ +>,"<>",.vars["Weitere TabellenObject"].allKeys)} )\ +and foreignkey_tab in ('-xy'\ + ${DatenblattTables(<>,"<>",.vars["Weitere TabellenObject"].allKeys)})\ +;]]>\ +\ +>,"<>",.vars["Weitere TabellenObject"].allKeys)}\ + )\ + and currentlyused=1\ + ${DatenblattFields(<>,"<>",FelderObject.allKeys)}\ + order by 2,3;]]>\ +\ +\ +\ +--#### Filter Abschlusstyp festlegen #########################\ +--Filterbedingung für select der Prüfungsdatensätze und zu verwendendes Prüfungssemester (1,2,3: des Gesamtabschlusses, 4: des Teilstudienabschlusses) festlegen\ +-- S für quelltabelle (da im Filter "Köpfe oder Fälle?" verwendet)\ +<#if "<>" == "1" > --AbsolventInnen\ +<#assign pruefabschlusstyp = " and ${SOS_ABSCHLUSSTYP_GES} and studiengangstyp in ('ESG','MSG') " />\ +<#assign pruefstatus = " and pstatus = 'BE' " />\ +<#assign pruefsemester = "sem_der_pruefung" />\ +<#elseif "<>" == "2" > --Abschlussprüfungen\ +<#assign pruefabschlusstyp = " and ${SOS_ABSCHLUSSTYP_GES} and studiengangstyp in ('ESG','MSG') " />\ +<#assign pruefstatus = " " />\ +<#assign pruefsemester = "sem_der_pruefung" />\ +<#elseif "<>" == "3" > --AbsolventInnenfachfälle\ +<#assign pruefabschlusstyp = " and ((studiengangstyp='ESG' and ${SOS_ABSCHLUSSTYP_GES}) or (studiengangstyp='TSG' and ${SOS_ABSCHLUSSTYP_TSTG})) " />\ +<#assign pruefstatus = " and pstatus = 'BE' and ((studiengangstyp='TSG' and pstatus_tsg = 'BE') or studiengangstyp='ESG') " />\ +<#assign pruefsemester = "sem_der_pruefung" />\ +<#elseif "<>" == "4" > --Teilstudienabschlussprüfungen\ +<#assign pruefabschlusstyp = " and ${SOS_ABSCHLUSSTYP_TSTG} and studiengangstyp in ('TSG') " />\ +<#assign pruefstatus = " " />\ +<#assign pruefsemester = "sem_der_pruefung_tsg" />\ +\ +\ +\ +<#assign filter="and prueck=0\ +/* AND fach_sem_zahl <= <> */\ +/* and stichtag = <> */\ +/* and geschlecht=<> */\ +/* and part = <> */\ +/* and matrikel_nr=<> */\ +" />\ +<#if "<>"?index_of("S.gewichtung_id=")!=-1>\ + <#assign filter=filter+" and "+.vars["Köpfe oder Fälle ?"]?replace('S.','msg_abp_aggr_gew.')/>\ + <#if "<>"?index_of("dim_studiengang_gew")>-1>\ + <#assign filter=filter+" and (dim_studiengang_gew.gewichtid is null or "+.vars["Köpfe oder Fälle ?"]?replace('S.','dim_studiengang_gew.')?replace("gewichtung_id","gewichtid")+")"/>\ + \ +<#elseif "<>"!="">\ +<#assign filter=filter+" and "+.vars["Köpfe oder Fälle ?"]/>\ +\ + \ +<#assign filter = filter + " and 's_' || tid_stg in "+Studiengang.allNeededKeysList /> --<> \ +/* <#assign filter = filter + " and tid_stg in (select L2.tid from lehr_stg_ab L2 where L2.stg in "+Fächer.allNeededKeysList +")" /> --<> */\ +\ +/* <#assign filter = filter + " and '' || ca12_staat in "+Staatsangehörigkeit.allNeededKeysList /> --<> */\ +/* <#assign filter = filter + " and tid_stg in (select L2.tid from lehr_stg_ab L2 where L2.abschluss in " + Abschluss.allNeededKeysList +")" /> --<> */\ +\ +\ +/* <#assign filter=filter+ " and "+ pruefsemester+" >= <> " /> */\ +/* <#assign filter=filter+ " and "+ pruefsemester+" <= <> " /> */\ +<#assign filter=filter+ pruefstatus /> \ +<#assign filter=filter+ pruefabschlusstyp /> \ + \ +\ +\ +\ +\ +\ +<@generateDatenblatt \ +p_basetable = basetable\ +p_joinTables = getJoinTables\ +p_joinWhereClauses = getJoinWhereClauses\ +p_selectClause = getSelectClause\ +p_aggregationsfeld ="summe"\ +p_aggregatfunktion = "sum("\ +p_filter = filter\ +p_show_keys= <>\ +p_postProcessing= ""\ +/>^--Freemarker Template \ +XIL List\ + sizable_columns horizontal_scrolling\ + white_space_color=COLOR_WHITE fixed_columns=1\ + min_heading_height=35\ +<#assign i=1 />\ +<#if getSelectClause?has_content >\ +<#foreach myfield in getSelectClause>\ +<#assign i=i+1 />\ +Column CID=${i} heading_text="${myfield.caption}" explanation="" center_heading\ + row_selectable col_selectable rightJust heading_platform readonly\ + width=20\ +<#if myfield.foreignkey_tab != '' && <>==1>\ +<#assign i=i+1 />\ +Column CID=${i} heading_text="${myfield.caption}\\n(Schlüssel)" explanation="" center_heading\ + row_selectable col_selectable rightJust heading_platform readonly\ + width=20\ + \ +\ +\ +@@@^Altersgruppe^Anzahl^Abschlussprüfungen Einfach,- Mehrfach- und Teilstudiengänge^drop table tmp_tabelle;^^2^700^360^^1^ ^ diff --git a/src-modules/module/msg/masken/160770_sachgeb_maske_bez.unl b/src-modules/module/msg/masken/160770_sachgeb_maske_bez.unl new file mode 100644 index 0000000..faf25f2 --- /dev/null +++ b/src-modules/module/msg/masken/160770_sachgeb_maske_bez.unl @@ -0,0 +1 @@ +16^160770^ diff --git a/src-modules/module/msg/masken/49000_felderinfo.unl b/src-modules/module/msg/masken/49000_felderinfo.unl new file mode 100644 index 0000000..0d410a8 --- /dev/null +++ b/src-modules/module/msg/masken/49000_felderinfo.unl @@ -0,0 +1,45 @@ +49000^Köpfe oder Fälle ?^1^0^0^140^150^1^sql^70^0^1^<> select apnr, eintrag from koepfe_oder_faelle order by 2^apnr, eintrag^<> select apnr, eintrag from koepfe_oder_faelle where eintrag = 'Fälle';^ +49001^Seit Semester^3^0^0^140^80^1^integer^30^0^1^<> select tid, eintrag from semester order by 1 DESC;^ ^<> select tid, eintrag from semester where today()-365 between sem_beginn and sem_ende;^ +49002^Studiengang^6^0^0^140^150^50^char^30^0^12^<> select tid,name,sortnr from sichten where art in ('SOS-Kostenstellen-Sicht', 'SOS-Studiengang-Sicht') order by 3,2;^ ^ ^ +49003^Staatsangehörigkeit^36^0^0^130^150^10^char^30^0^12^<> select tid,name,sortnr from sichten where art='SOS-Staaten-Sicht' order by 3,2;^ ^ ^ +49004^Stichtag Prüfungen^1^350^-1^140^100^1^sql^30^0^1^<> select tid, name from sos_stichtag where stichtagsart='Prüfungen' order by 2;^ ^<> select tid, name from sos_stichtag where stichtagsart='Prüfungen' and appl_key='2';^ +49005^Prüfungsstatus^13^0^0^140^70^1^char^30^0^1^<> select apnr,druck from sos_k_pstatus;^hidden^ ^ +49006^Weitere Tabellen^123^0^0^140^140^10^char^30^0^1^<> \ +--freemarker template\ +select name,string_not_null(caption) || ' - ' || name from sx_tables where name in ('dim_studiengang')\ +<#if <>!='tabelle_html_datenblatt.xsl'>\ + and name in (select distinct tablename from stylesheet_field where stylesheet_id in (select tid from sx_stylesheets where filename=<>)) \ +\ +order by 2^ ^ ^ +49007^bis Fachsemester^20^350^-1^140^10^1^integer^30^0^0^^ ^ ^ +49008^Studienabschnitt^12^330^-1^130^150^1^integer^4^1^1^<> select tid, eintrag from studienabschnitt where tid <= 2 order by 1;^hidden^<> select tid, eintrag from studienabschnitt where tid = 2;^ +49009^Bis Semester^4^350^-1^140^80^1^integer^30^0^1^<> select tid, eintrag from semester order by 1 DESC;^ ^<> select tid, eintrag from semester where today() between sem_beginn and sem_ende;^ +49010^Prüfungsart^15^0^0^140^150^1^char^4^0^1^<> select apnr,druck from sos_k_part order by 2^ ^ ^ +49011^Geschlecht^37^0^0^140^80^1^integer^30^0^1^<> SELECT apnr,druck FROM cif WHERE cif.key = 9003 order by 2;^ ^ ^ +49012^Felder^125^0^0^150^190^10^char^30^0^1^<>\ +--freemarker template\ + select trim(F.table_name) || '.' || F.name,trim(T.caption) || ':' || trim(F.caption) || ' - ' || trim(F.name) from sx_fields F,\ + sx_tables T where F.table_name=T.name and F.currentlyused=1\ + <#if <>='tabelle_html_datenblatt.xsl'>\ + and (F.table_name ='msg_abp_aggr'\ + /* or F.table_name in (<>) */) \ +<#else>\ +and trim(F.table_name) || '.' || F.name in (select trim(tablename)||'.'||trim(fieldname) from stylesheet_field where stylesheet_id in \ +(select tid from sx_stylesheets where filename=<>))\ +\ + order by 2;^ ^ ^ +49013^Fächer^8^0^0^150^200^6^char^30^0^12^<> select tid,name,sortnr from sichten where art='Fächer-Sicht' order by 3,2;^ ^ ^ +49014^Schlüssel anzeigen^150^0^0^100^100^1^integer^30^1^1^<> select 1,'Ja' from xdummy union select 0,'Nein' from xdummy^ ^<> select 1,'Ja' from xdummy^ +49015^tablestylesheet^121^0^0^100^200^1^char^200^1^1^<> select distinct filename,X.caption,ord from sx_stylesheets X,sx_mask_style S where X.tid=S.stylesheet_id and S.maskeninfo_id=49000 order by ord^ ^<> select distinct filename,X.caption,ord from sx_stylesheets X,sx_mask_style S where X.tid=S.stylesheet_id and S.maskeninfo_id=49000 order by ord limit 1^ +49016^Ausgabeformat^2001^0^0^100^150^1^char^200^1^1^<> select element_value,description from menu_element where element='Ausgabeformat' and nature::smallint<100 order by nature::smallint^ ^<> select element_value,description from menu_element where element='Ausgabeformat' and description='HTML'^ +49019^AbsolventInnen oder Abschlussprüfungen^11^0^0^100^200^1^integer^255^1^1^<> \ +select 1,'AbsolventInnen'\ +union select 2,'Abschlussprüfungen'\ +union select 3,'AbsolventInnenfachfälle'\ +union select 4,'Teilstudienabschlussprüfungen'\ +from xdummy \ +order by 1^ ^<> select 2,'Abschlussprüfungen' from xdummy^ +49020^##line##^10^0^0^100^100^1^char^5000^0^8^^ ^1^ +49021^Abschluss^9^0^0^140^170^5^char^30^0^12^<> select tid,name,sortnr from sichten where art in ('SOS-Abschluss-Sicht') and aktiv=1 order by 3,2;^ ^ ^ +49022^Matrikel-Nr.^30^350^-1^150^180^1^char^200^0^0^^ ^ ^ +49023^##line##^40^0^0^100^100^1^char^5000^0^8^^ ^1^ diff --git a/src-modules/module/msg/masken/49000_maske_system_bez.unl b/src-modules/module/msg/masken/49000_maske_system_bez.unl new file mode 100644 index 0000000..0df1418 --- /dev/null +++ b/src-modules/module/msg/masken/49000_maske_system_bez.unl @@ -0,0 +1 @@ +49000^370^ diff --git a/src-modules/module/msg/masken/49000_masken_felder_bez.unl b/src-modules/module/msg/masken/49000_masken_felder_bez.unl new file mode 100644 index 0000000..1bb468d --- /dev/null +++ b/src-modules/module/msg/masken/49000_masken_felder_bez.unl @@ -0,0 +1,22 @@ +49000^49000^ +49000^49001^ +49000^49002^ +49000^49003^ +49000^49004^ +49000^49005^ +49000^49006^ +49000^49007^ +49000^49008^ +49000^49009^ +49000^49010^ +49000^49011^ +49000^49012^ +49000^49013^ +49000^49014^ +49000^49015^ +49000^49016^ +49000^49019^ +49000^49020^ +49000^49021^ +49000^49022^ +49000^49023^ diff --git a/src-modules/module/msg/masken/49000_maskeninfo.unl b/src-modules/module/msg/masken/49000_maskeninfo.unl new file mode 100644 index 0000000..9b25f20 --- /dev/null +++ b/src-modules/module/msg/masken/49000_maskeninfo.unl @@ -0,0 +1,140 @@ +49000^Abschlussprüfungen Datenblatt^--Freemarker Template\ +<#include "SQL_lingua_franca"/>\ +<#include "SuperX_general"/>\ +<#include "DatenblattSQLGenerator"/>\ +\ +--ram excelexport \ +\ +\ +\ +\ +>,"<>",.vars["Weitere TabellenObject"].allKeys)}\ + \ + )\ + order by 1;]]>\ +\ +>,"<>",.vars["Weitere TabellenObject"].allKeys)} )\ +and foreignkey_tab in ('-xy'\ + ${DatenblattTables(<>,"<>",.vars["Weitere TabellenObject"].allKeys)})\ +;]]>\ +\ +>,"<>",.vars["Weitere TabellenObject"].allKeys)}\ + )\ + and currentlyused=1\ + ${DatenblattFields(<>,"<>",FelderObject.allKeys)}\ + order by 2,3;]]>\ +\ +\ +\ +--#### Filter Abschlusstyp festlegen #########################\ +--Filterbedingung für select der Prüfungsdatensätze und zu verwendendes Prüfungssemester (1,2,3: des Gesamtabschlusses, 4: des Teilstudienabschlusses) festlegen\ +-- S für quelltabelle (da im Filter "Köpfe oder Fälle?" verwendet)\ +<#if "<>" == "1" > --AbsolventInnen\ +<#assign pruefabschlusstyp = " and ${SOS_ABSCHLUSSTYP_GES} and studiengangstyp in ('ESG','MSG') " />\ +<#assign pruefstatus = " and pstatus = 'BE' " />\ +<#assign pruefsemester = "sem_der_pruefung" />\ +<#elseif "<>" == "2" > --Abschlussprüfungen\ +<#assign pruefabschlusstyp = " and ${SOS_ABSCHLUSSTYP_GES} and studiengangstyp in ('ESG','MSG') " />\ +<#assign pruefstatus = " " />\ +<#assign pruefsemester = "sem_der_pruefung" />\ +<#elseif "<>" == "3" > --AbsolventInnenfachfälle\ +<#assign pruefabschlusstyp = " and ((studiengangstyp='ESG' and ${SOS_ABSCHLUSSTYP_GES}) or (studiengangstyp='TSG' and ${SOS_ABSCHLUSSTYP_TSTG})) " />\ +<#assign pruefstatus = " and pstatus = 'BE' and ((studiengangstyp='TSG' and pstatus_tsg = 'BE') or studiengangstyp='ESG') " />\ +<#assign pruefsemester = "sem_der_pruefung" />\ +<#elseif "<>" == "4" > --Teilstudienabschlussprüfungen\ +<#assign pruefabschlusstyp = " and ${SOS_ABSCHLUSSTYP_TSTG} and studiengangstyp in ('TSG') " />\ +<#assign pruefstatus = " " />\ +<#assign pruefsemester = "sem_der_pruefung_tsg" />\ +\ +\ +\ +<#assign filter="and prueck=0\ +/* AND fach_sem_zahl <= <> */\ +/* and stichtag = <> */\ +/* and geschlecht=<> */\ +/* and part = <> */\ +/* and matrikel_nr=<> */\ +" />\ +<#if "<>"?index_of("S.gewichtung_id=")!=-1>\ + <#assign filter=filter+" and "+.vars["Köpfe oder Fälle ?"]?replace('S.','sos_abp_aggr_gew.')/>\ + <#if "<>"?index_of("dim_studiengang_gew")>-1>\ + <#assign filter=filter+" and (dim_studiengang_gew.gewichtid is null or "+.vars["Köpfe oder Fälle ?"]?replace('S.','dim_studiengang_gew.')?replace("gewichtung_id","gewichtid")+")"/>\ + \ +<#elseif "<>"!="">\ +<#assign filter=filter+" and "+.vars["Köpfe oder Fälle ?"]/>\ +\ + \ +<#assign filter = filter + " and 's_' || tid_stg in "+Studiengang.allNeededKeysList /> --<> \ +/* <#assign filter = filter + " and tid_stg in (select L2.tid from lehr_stg_ab L2 where L2.stg in "+Fächer.allNeededKeysList +")" /> --<> */\ +\ +/* <#assign filter = filter + " and '' || ca12_staat in "+Staatsangehörigkeit.allNeededKeysList /> --<> */\ +/* <#assign filter = filter + " and tid_stg in (select L2.tid from lehr_stg_ab L2 where L2.abschluss in " + Abschluss.allNeededKeysList +")" /> --<> */\ +\ +\ +/* <#assign filter=filter+ " and "+ pruefsemester+" >= <> " /> */\ +/* <#assign filter=filter+ " and "+ pruefsemester+" <= <> " /> */\ +<#assign filter=filter+ pruefstatus /> \ +<#assign filter=filter+ pruefabschlusstyp /> \ + \ +\ +\ +\ +\ +\ +<@generateDatenblatt \ +p_basetable = basetable\ +p_joinTables = getJoinTables\ +p_joinWhereClauses = getJoinWhereClauses\ +p_selectClause = getSelectClause\ +p_aggregationsfeld ="summe"\ +p_aggregatfunktion = "sum("\ +p_filter = filter\ +p_show_keys= <>\ +p_postProcessing= ""\ +/>^--Freemarker Template \ +XIL List\ + sizable_columns horizontal_scrolling\ + white_space_color=COLOR_WHITE fixed_columns=1\ + min_heading_height=35\ +<#assign i=1 />\ +<#if getSelectClause?has_content >\ +<#foreach myfield in getSelectClause>\ +<#assign i=i+1 />\ +Column CID=${i} heading_text="${myfield.caption}" explanation="" center_heading\ + row_selectable col_selectable rightJust heading_platform readonly\ + width=20\ +<#if myfield.foreignkey_tab != '' && <>==1>\ +<#assign i=i+1 />\ +Column CID=${i} heading_text="${myfield.caption}\\n(Schlüssel)" explanation="" center_heading\ + row_selectable col_selectable rightJust heading_platform readonly\ + width=20\ + \ +\ +\ +@@@^Altersgruppe^Anzahl^Abschlussprüfungen Einfach,- Mehrfach- und Teilstudiengänge^drop table tmp_tabelle;^^2^700^360^^1^ ^ diff --git a/src-modules/module/msg/masken/49000_sachgeb_maske_bez.unl b/src-modules/module/msg/masken/49000_sachgeb_maske_bez.unl new file mode 100644 index 0000000..d5165e9 --- /dev/null +++ b/src-modules/module/msg/masken/49000_sachgeb_maske_bez.unl @@ -0,0 +1 @@ +370^49000^ diff --git a/src-modules/module/msg/masken/49040_felderinfo.unl b/src-modules/module/msg/masken/49040_felderinfo.unl new file mode 100644 index 0000000..6e6d7ac --- /dev/null +++ b/src-modules/module/msg/masken/49040_felderinfo.unl @@ -0,0 +1,34 @@ +49040^Filter Kombinationen^60^0^0^140^150^1^sql^70^0^1^<> select id,caption from sx_repository where art='MSG_FKOMBI_FILTER' order by 2^ ^ ^ +49041^Seit Semester^3^0^0^140^80^1^integer^30^0^1^<> select tid, eintrag from semester order by 1 DESC;^ ^<> select tid, eintrag from semester where today()-365 between sem_beginn and sem_ende;^ +49042^Studiengang^6^0^0^140^150^50^char^30^0^12^<> select tid,name,sortnr from sichten where art in ('SOS-Kostenstellen-Sicht', 'SOS-Studiengang-Sicht') order by 3,2;^ ^ ^ +49043^Staatsangehörigkeit^36^0^0^130^150^10^char^30^0^12^<> select tid,name,sortnr from sichten where art='SOS-Staaten-Sicht' order by 3,2;^ ^ ^ +49046^Weitere Tabellen^123^0^0^140^140^10^char^30^0^1^<> \ +--freemarker template\ +select name,string_not_null(caption) || ' - ' || name from sx_tables where name in ('dim_studiengang')\ +<#if <>!='tabelle_html_datenblatt.xsl'>\ + and name in (select distinct tablename from stylesheet_field where stylesheet_id in (select tid from sx_stylesheets where filename=<>)) \ +\ +order by 2^ ^ ^ +49047^bis Fachsemester^20^350^-1^140^10^1^integer^30^0^0^^ ^ ^ +49049^Bis Semester^4^350^-1^140^80^1^integer^30^0^1^<> select tid, eintrag from semester order by 1 DESC;^ ^<> select tid, eintrag from semester where today() between sem_beginn and sem_ende;^ +49051^Geschlecht^37^0^0^140^80^1^integer^30^0^1^<> SELECT apnr,druck FROM cif WHERE cif.key = 9003 order by 2;^ ^ ^ +49052^Felder^125^0^0^150^190^10^char^30^0^1^<>\ +--freemarker template\ + select trim(F.table_name) || '.' || F.name,trim(T.caption) || ':' || trim(F.caption) || ' - ' || trim(F.name) from sx_fields F,\ + sx_tables T where F.table_name=T.name and F.currentlyused=1\ + <#if <>='tabelle_html_datenblatt.xsl'>\ + and (F.table_name ='msg_fkombi_aggr'\ + /* or F.table_name in (<>) */) \ +<#else>\ +and trim(F.table_name) || '.' || F.name in (select trim(tablename)||'.'||trim(fieldname) from stylesheet_field where stylesheet_id in \ +(select tid from sx_stylesheets where filename=<>))\ +\ + order by 2;^ ^ ^ +49053^Fächer^8^0^0^150^200^6^char^30^0^12^<> select tid,name,sortnr from sichten where art='Fächer-Sicht' order by 3,2;^ ^ ^ +49054^Schlüssel anzeigen^150^0^0^100^100^1^integer^30^1^1^<> select 1,'Ja' from xdummy union select 0,'Nein' from xdummy^ ^<> select 1,'Ja' from xdummy^ +49055^tablestylesheet^121^0^0^100^200^1^char^200^1^1^<> select distinct filename,X.caption,ord from sx_stylesheets X,sx_mask_style S where X.tid=S.stylesheet_id and S.maskeninfo_id=49040 order by ord^ ^<> select distinct filename,X.caption,ord from sx_stylesheets X,sx_mask_style S where X.tid=S.stylesheet_id and S.maskeninfo_id=49040 order by ord limit 1^ +49056^Ausgabeformat^2001^0^0^100^150^1^char^200^1^1^<> select element_value,description from menu_element where element='Ausgabeformat' and nature::smallint<100 order by nature::smallint^ ^<> select element_value,description from menu_element where element='Ausgabeformat' and description='HTML'^ +49060^##line##^10^0^0^100^100^1^char^5000^0^8^^ ^1^ +49061^Abschluss^9^0^0^140^170^5^char^30^0^12^<> select tid,name,sortnr from sichten where art in ('SOS-Abschluss-Sicht') and aktiv=1 order by 3,2;^ ^ ^ +49062^Matrikel-Nr.^30^350^-1^150^180^1^char^200^0^0^^ ^ ^ +49063^##line##^40^0^0^100^100^1^char^5000^0^8^^ ^1^ diff --git a/src-modules/module/msg/masken/49040_maske_system_bez.unl b/src-modules/module/msg/masken/49040_maske_system_bez.unl new file mode 100644 index 0000000..8f12e89 --- /dev/null +++ b/src-modules/module/msg/masken/49040_maske_system_bez.unl @@ -0,0 +1 @@ +49040^370^ diff --git a/src-modules/module/msg/masken/49040_masken_felder_bez.unl b/src-modules/module/msg/masken/49040_masken_felder_bez.unl new file mode 100644 index 0000000..d8ec2a5 --- /dev/null +++ b/src-modules/module/msg/masken/49040_masken_felder_bez.unl @@ -0,0 +1,17 @@ +49040^49040^ +49040^49041^ +49040^49042^ +49040^49043^ +49040^49046^ +49040^49047^ +49040^49049^ +49040^49051^ +49040^49052^ +49040^49053^ +49040^49054^ +49040^49055^ +49040^49056^ +49040^49060^ +49040^49061^ +49040^49062^ +49040^49063^ diff --git a/src-modules/module/msg/masken/49040_maskeninfo.unl b/src-modules/module/msg/masken/49040_maskeninfo.unl new file mode 100644 index 0000000..9bae993 --- /dev/null +++ b/src-modules/module/msg/masken/49040_maskeninfo.unl @@ -0,0 +1,109 @@ +49040^Fächerkombinatorik Datenblatt^--Freemarker Template\ +<#include "SQL_lingua_franca"/>\ +<#include "SuperX_general"/>\ +<#include "DatenblattSQLGenerator"/>\ +\ +--ram excelexport \ +\ +\ +\ +\ +>,"<>",.vars["Weitere TabellenObject"].allKeys)}\ + \ + )\ + order by 1;]]>\ +\ +>,"<>",.vars["Weitere TabellenObject"].allKeys)} )\ +and foreignkey_tab in ('-xy'\ + ${DatenblattTables(<>,"<>",.vars["Weitere TabellenObject"].allKeys)})\ +;]]>\ +\ +>,"<>",.vars["Weitere TabellenObject"].allKeys)}\ + )\ + and currentlyused=1\ + ${DatenblattFields(<>,"<>",FelderObject.allKeys)}\ + order by 2,3;]]>\ +\ +\ +\ +\ +\ +<#assign filter="and 1=1\ +/* AND fach_sem_zahl <= <> */\ +/* and geschlecht=<> */\ +/* and matrikel_nr=<> */\ +" />\ +\ + \ +<#assign filter = filter + " and 's_' || tid_stg in "+Studiengang.allNeededKeysList /> --<> \ +/* <#assign filter = filter + " and tid_stg in (select L2.tid from lehr_stg_ab L2 where L2.stg in "+Fächer.allNeededKeysList +")" /> --<> */\ +\ +/* <#assign filter = filter + " and '' || ca12_staat in "+Staatsangehörigkeit.allNeededKeysList /> --<> */\ +/* <#assign filter = filter + " and tid_stg in (select L2.tid from lehr_stg_ab L2 where L2.abschluss in " + Abschluss.allNeededKeysList +")" /> --<> */\ +\ +\ +/* <#assign filter=filter+ " and sem_rueck_beur_ein >= <> " /> */\ +/* <#assign filter=filter+ " and sem_rueck_beur_ein <= <> " /> */\ + \ +\ +\ +\ +\ +\ +<@generateDatenblatt \ +p_basetable = basetable\ +p_joinTables = getJoinTables\ +p_joinWhereClauses = getJoinWhereClauses\ +p_selectClause = getSelectClause\ +p_aggregationsfeld ="summe"\ +p_aggregatfunktion = "sum("\ +p_filter = filter\ +p_show_keys= <>\ +p_postProcessing= ""\ +/>^--Freemarker Template \ +XIL List\ + sizable_columns horizontal_scrolling\ + white_space_color=COLOR_WHITE fixed_columns=1\ + min_heading_height=35\ +<#assign i=1 />\ +<#if getSelectClause?has_content >\ +<#foreach myfield in getSelectClause>\ +<#assign i=i+1 />\ +Column CID=${i} heading_text="${myfield.caption}" explanation="" center_heading\ + row_selectable col_selectable rightJust heading_platform readonly\ + width=20\ +<#if myfield.foreignkey_tab != '' && <>==1>\ +<#assign i=i+1 />\ +Column CID=${i} heading_text="${myfield.caption}\\n(Schlüssel)" explanation="" center_heading\ + row_selectable col_selectable rightJust heading_platform readonly\ + width=20\ + \ +\ +\ +@@@^Altersgruppe^Anzahl^Auswertung von Fächerkombinationen^drop table tmp_tabelle;^^2^700^360^^1^ ^ diff --git a/src-modules/module/msg/masken/49040_sachgeb_maske_bez.unl b/src-modules/module/msg/masken/49040_sachgeb_maske_bez.unl new file mode 100644 index 0000000..32f539a --- /dev/null +++ b/src-modules/module/msg/masken/49040_sachgeb_maske_bez.unl @@ -0,0 +1 @@ +370^49040^ diff --git a/src-modules/module/msg/msg_modul_entfernen.x b/src-modules/module/msg/msg_modul_entfernen.x new file mode 100755 index 0000000..d194f92 --- /dev/null +++ b/src-modules/module/msg/msg_modul_entfernen.x @@ -0,0 +1,5 @@ +#!/bin/bash +echo "------------------------------------------------------------" +echo +module_drop.x lm $LM_PFAD + diff --git a/src-modules/module/msg/msg_modul_erzeugen.x b/src-modules/module/msg/msg_modul_erzeugen.x new file mode 100755 index 0000000..d7a2241 --- /dev/null +++ b/src-modules/module/msg/msg_modul_erzeugen.x @@ -0,0 +1,4 @@ +#!/bin/bash + +module_install.x lm $LM_PFAD + diff --git a/src-modules/module/msg/msg_update.x b/src-modules/module/msg/msg_update.x new file mode 100755 index 0000000..e1be22e --- /dev/null +++ b/src-modules/module/msg/msg_update.x @@ -0,0 +1,65 @@ +#!/bin/bash + +#Arbeitsverzeichnis fuer crontab +PFAD=$2 +if [ "$PFAD" != "" ] +then + +cd $PFAD + +fi +#Umgebung einlesen: +if [ "$MSG_PFAD" = "" ] +then +echo "ACHTUNG: Die Umgebungsvariable MSG_PFAD ist nicht gesetzt. Bitte prüfen Sie $SUPERX_DIR/db/bin/SQL_ENV" + +exit 1 + +fi +if [ "$MSG_ERRORMAIL" != "" ] +then +ERRORMAIL=$MSG_ERRORMAIL +export ERRORMAIL +fi +if [ "$MSG_LOGMAIL" != "" ] +then +LOGMAIL=$MSG_LOGMAIL +export LOGMAIL +fi +if [ "$MSG_BACKUP" != "" ] +then +MODULE_BACKUP=$MSG_BACKUP +export MODULE_BACKUP +fi + +#hier geht es los +#runAndCheck.x path command (EXIT_ON_ERROR|CONT_ON_ERROR) (SEND_ERRORMAIL|NO_ERRORMAIL) (SEND_LOGMAIL|NO_LOGMAIL) [description] " +echo "msg-Update startet" >$MSG_ERRORDAT +#Tagesdatum für Systeminfo +date +'%d.%m.%Y' > $MSG_LOAD_PFAD/superx.datum + +runAndCheck.x $MSG_PFAD "module_etl.x msg $MSG_PFAD $MSG_LOAD_PFAD" EXIT_ON_ERROR SEND_ERRORMAIL SEND_LOGMAIL "MSG update$MANDANTID" +cat $MSG_PFAD/L_MSG_update$MANDANTID.log >>$MSG_ERRORDAT + + +fgrep -s "not found" $MSG_ERRORDAT +FLAG1=$? +fgrep -i -s "error" $MSG_ERRORDAT +FLAG2=$? +fgrep -i -s "nicht gefunden" $MSG_ERRORDAT +FLAG3=$? +if [ $FLAG1 -eq 0 -o $FLAG2 -eq 0 -o $FLAG3 -eq 0 ] +then + echo "Fehler beim MSG-Update " + echo "---------------------------------------" + echo "Fehlerprotokoll in $MSG_ERRORDAT" + echo "---------------------------------------" + cp $MSG_LOAD_PFAD/superx.datum.alt $MSG_LOAD_PFAD/superx.datum +else + echo "MSG-Update erfolgreich" +fi + +echo "---------------------------Beginn Prüfroutine-----------------------------------" >>$MSG_ERRORDAT +#cat $MSG_PFAD/L_msg_Test$MANDANTID.log >>$MSG_ERRORDAT +pruefmail.x $MSG_PFAD/L_msg_Test$MANDANTID.log $ERRORMAIL + diff --git a/src-modules/module/msg/msg_update_cron.x.sam b/src-modules/module/msg/msg_update_cron.x.sam new file mode 100644 index 0000000..cc07462 --- /dev/null +++ b/src-modules/module/msg/msg_update_cron.x.sam @@ -0,0 +1,18 @@ +#!/bin/bash + +#Beispielscript für cronjobs +#Im cronjob ist keine Umgebung vorhanden, deshalb vorher laden. +#Selbstredend als normaler user, nicht als root z.B. +. /home/superx/db/bin/SQL_ENV + +cd $MSG_LOAD_PFAD +./msg_unload.x + + +$MSG_PFAD/msg_update.x $MSG_PFAD + +#In der crontab sähe das so aus: +# msg-Update +# -0 4 * * 2,3,4,5,6 /home/superx/db/module/msg/msg_update_cron.x >/home/superx/db/module/msg/msg_update_cron.log 2>&1 +# Bedeutung: Der MSG-Update wird Di-Sa morgens um 4:00 Uhr ausgeführt + diff --git a/src-modules/module/msg/msg_update_cron_costage.x.sam b/src-modules/module/msg/msg_update_cron_costage.x.sam new file mode 100644 index 0000000..3376b2b --- /dev/null +++ b/src-modules/module/msg/msg_update_cron_costage.x.sam @@ -0,0 +1,18 @@ +#!/bin/bash + +#Beispielscript für cronjobs +#Im cronjob ist keine Umgebung vorhanden, deshalb vorher laden. +#Selbstredend als normaler user, nicht als root z.B. +. /home/superx/db/bin/SQL_ENV + +cd $MSG_LOAD_PFAD +./msg_costage_unload.x + + +$MSG_PFAD/msg_update.x $MSG_PFAD + +#In der crontab sähe das so aus: +# msg-Update +# -0 4 * * 2,3,4,5,6 /home/superx/db/module/msg/msg_update_cron.x >/home/superx/db/module/msg/msg_update_cron.log 2>&1 +# Bedeutung: Der MSG-Update wird Di-Sa morgens um 4:00 Uhr ausgeführt + diff --git a/src-modules/module/msg/rohdaten/MSG_ENV.sam b/src-modules/module/msg/rohdaten/MSG_ENV.sam new file mode 100644 index 0000000..7c3abff --- /dev/null +++ b/src-modules/module/msg/rohdaten/MSG_ENV.sam @@ -0,0 +1,207 @@ +#!/bin/bash + +#Entladeumgebung für SuperX +#Die folgenden Parameter müssen angepasst werden + +# SX_CLIENT ist die Client-Anwendung zum Zugriff auf die DB +# Mögliche Werte: dbaccess (Informix), psql (Postgres), jdbc (Alle anderen) +#SX_CLIENT=dbaccess; export SX_CLIENT +SX_CLIENT=psql; export SX_CLIENT +#SX_CLIENT=jdbc; export SX_CLIENT +#Wichtig bei jdbc und psql: Die Umgebungsvariable DB_PROPERTIES gibt des Pfad zur db-xxx.properties an. +#Dies wird in allen Programmen des jdbc-Clients genutzt. +#DB_PROPERTIES=./db-sos_pg.properties +#export DB_PROPERTIES +#auch die Logging-Ausgabe kann variiert werden: (./logging.properties.sam umbenennen) +#LOGGER_PROPERTIES=./logging.properties.sam +#export LOGGER_PROPERTIES +#Für jdbc auch JAVA_OPTS: viel RAM +#JAVA_OPTS="-Xmx500M" +#export JAVA_OPTS +#Database: POSTGRES, INFORMIX +DATABASE=POSTGRES +export DATABASE +#Aus welchem System wird entladen ? SOSPOS-GX oder HISinOne? +#SOURCESYSTEM=hisinone +SOURCESYSTEM=sospos +export SOURCESYSTEM + + +#Achtung: Wichtig ist unter UNIX, dass LANG korrekt (auf UTF-8,ISO-8859-1 oder de_DE@euro) gesetzt ist. +#Wir haben die Variable hier nicht definiert, weil das eigentlich +#sytsemweit definiert sein muss. LANG ist bereits beim Entpacken +#den Kernmoduls massgeblich. +#LANG=de_DE@euro +#LANG=de_DE.UTF-8 +#export LANG + +case $SX_CLIENT in + +dbaccess) + + +INFORMIXDIR=/home/informix +export INFORMIXDIR +INFORMIXSERVER=sospos_host +export INFORMIXSERVER +ONCONFIG=onconfig.sospos +export ONCONFIG +INF_BIN=$INFORMIXDIR/bin +export INF_BIN + +DBMONEY=. ; export DBMONEY +DBDATE=DMY4. ; export DBDATE +DBDELIMITER="^" ; export DBDELIMITER +CLIENT_LOCALE=de_de.8859-1@bund +export CLIENT_LOCALE +SERVER_LOCALE=de_de.8859-1@bund +export SERVER_LOCALE +;; + +psql) + PGPORT=5432 + export PGPORT + #Bei Betrieb von Postgres (remote) muss für psql + #unter cygwin die Umgebungsvariable PGHOST gesetzt sein + #Sonst versucht er eine Socket Connection + #PGHOST und PGPORT müssen auf den SOS-Rechner zeigen + PGHOST=sospos_host + export PGHOST + #PGUSER: nur Datenbank, nicht Betriebssystem + PGUSER=sospos + export PGUSER + #Prüfen ob der PATH erweitert werden muss + #Standard-Installationsverz. von Postgres ist + PGPATH=/usr/local/pgsql + #Nur bei hisinone: + #JDBC_PARAM="set search_path to hisinone;" + #unter Win wäre dies PGPATH=/cygdrive/c/Programme/PostgreSQL/8.0-beta1 + #unter cygwin liegen die binaries direkt in /bin + export PGPATH + #Diese Variablen dürfen nicht verändert werden: + export PGDATESTYLE=German + O_DESCR=$SUPERX_DIR/db/conf/unldescr_postgres_copy.xml + export O_DESCR + +;; + +esac + + +#SOS-Versionsnummer (Ganzzahl) 6,7,8,9,10,11 +#Wenn Sie eine höhere Versionnummer einsetzen, nehmen Sie einfach +#die letztmögliche. +VERSION=11 +export VERSION +#ab hier werden Daten ausgewertet: +start_stud_sem=19881; export start_stud_sem #sos-studenten und fächer +start_pruef_sem=19881; export start_pruef_sem #Prüfungen +# + +#Wird immer komplett entladen, oder nur die Änderungen? (true/false) +#Bie derErstinstallation und in der Implementierungsphase empfehlen wir true +SOS_UNL_COMPLETE=true +export SOS_UNL_COMPLETE + + +#Transaktionen abschalten? +TRANSACTION_OFF="" +#Wenn Transaktionen eingeschaltet sind und die Protokoll-Tabellen groß sind, +#dann sollte dieses ent-kommentiert sein. +#TRANSACTION_OFF="SET ISOLATION TO DIRTY READ;" +export TRANSACTION_OFF + +#Sollen die Daten bzgl. matrikelnr anonymisiert werden (Namen kommen sowieso nicht rüber)? +#Wenn Sie true wählen, müssen Sie das Script ausführen, das die Matrikelnummern +SOS_UNL_ANON=false +export SOS_UNL_ANON + +#setzen Sie POS_PNR auf 0, um alle Prüfungen zu entladen: +POS_PNR=0 +#Vorsicht: viele Daten... +#Sinnvoller ist es die Einzelprüfungen zu entladen, die gewünscht sind +#z.B. +#POS_PNR='9390,9490,9690,9700' +#Dies sind Prüfungsnummern, die nicht in hskonst verzeichnet sind. +export POS_PNR + + +#gibt es weitere Filter für die LAB oder nicht. +#Standardmäßig werden anerkannte Prüfungen gefiltert mit dem Ausdruck +LAB_FILTER="AND (lab.panerk is null or lab.panerk != 'J')" +export LAB_FILTER + +#Sollen Name/Vorname/Handynr(Semesteranschrift) der Studierenden entladen werden? +#Wenn ja, dann ist der Wert "true", wenn nein, dann ist es "false" +STUD_IDENT=false +export STUD_IDENT +#Sollen Name/Vorname der Prüfer entladen werden? +#Wenn ja, dann ist der Wert "true", wenn nein, dann ist es "false" +PRUEFER_NAME=false +export PRUEFER_NAME + +#Nur HISinOne-STU: sollen Personattribute entladen werden, z.B. personattributetype.id 1,2,3: +#PERSONATTRIBUTE_IDS="1,2,3" +#export PERSONATTRIBUTE_IDS + + +ERRORMAIL=superx@localhost +export ERRORMAIL +LOGMAIL="$ERRORMAIL" +export LOGMAIL +#Name des ausführbaren Mailprogramms, mail oder mutt: +MAILPROG="mail" +export MAILPROG + + + +#Die folgenden Parameter müssen wahrscheinlich nicht geändert werden: +#DBNLS=2 ; export DBNLS +#PATH=${PATH}:${INFORMIXDIR}/bin ; export PATH +DBASE=sospos ; export DBASE +DBDELIMITER="^" ; export DBDELIMITER +## +DBDATE=DMY4. ; export DBDATE +##Pfad für Entladedaten: +SOS_PFAD=. +export SOS_PFAD +SOS_LOAD_PFAD=$SOS_PFAD +export SOS_LOAD_PFAD +##hier muss Unterverzeichnis unl existieren! +LOG=$SOS_PFAD/sos_unload.err +export LOG +DATEFILE=$SOS_PFAD/superx.datum +export DATEFILE + +if [ "$SOS_UNL_COMPLETE" = "true" ] +then +DATUM="01.01.1900" +else +DATUM=`tail -1 $SOS_PFAD/superx.datum` +fi + +#Beim Push Entladen benötigte jars nach ./lib/kopieren: +#jfor-0.7.2rc1.jar, postgresql-9.2-1002.jdbc4.jar, superx4.9.jar +#LIB_PATH=$SOS_LOAD_PFAD/lib +#JDBC_CLASSPATH="." ; for i in `ls $LIB_PATH/*.jar` ; do JDBC_CLASSPATH=$JDBC_CLASSPATH:$i ; done +#export JDBC_CLASSPATH +#XML_CLASSPATH="" +#export XML_CLASSPATH + + +#COPY_METHOD kann rsync oder scp sein +COPY_METHOD=rsync; export COPY_METHOD +#OPTIONEN für scp z.B. +#SCP_OPTS="-p -B -i /home/sospos/.ssh/superxkey" +#export SCP_OPTS +#Default für $SOS_LOAD_PFAD: Hier muss Unterverzeichnus unl existieren. +REMOTE_DIR="/home/superx/db/module/sos/rohdaten" +export REMOTE_DIR +#Defaultuser +REMOTE_USER="superx" +export REMOTE_USER +#Defaulthostname / IP-Nr. des SuperX-DB-Servers, auf den die Rohdaten kopiert werden +REMOTE_HOST="superx" +export REMOTE_HOST + + diff --git a/src-modules/module/msg/rohdaten/msg_unload.xml b/src-modules/module/msg/rohdaten/msg_unload.xml new file mode 100644 index 0000000..7c00a7c --- /dev/null +++ b/src-modules/module/msg/rohdaten/msg_unload.xml @@ -0,0 +1,33 @@ + + +MSG-Modul + + + + + Wird nicht mehr gepflegt. Ab SOSPOS-Version 13 immer auf 13 setzen, bei HISinOne wird sie automatisch gesetzt. + + Ab welchem Prüfungssemester sollen Prüfungen entladen werden? z.B. 20221 für SoSe 2022 + Wenn ja, dann ist der Wert "true", wenn nein, dann ist er "false" + + + + + + + + + + Abschlussprüfungen + + + + + + diff --git a/src-modules/module/msg/schluesseltabellen/sx_repository_fuellen.sql b/src-modules/module/msg/schluesseltabellen/sx_repository_fuellen.sql index fb425d7..9ba7fd4 100644 --- a/src-modules/module/msg/schluesseltabellen/sx_repository_fuellen.sql +++ b/src-modules/module/msg/schluesseltabellen/sx_repository_fuellen.sql @@ -3,7 +3,16 @@ <#assign systeminfo_id="370" /> <#assign repos = [ {"id":"MSG_FKOMBI_TID_STG", "caption":"Studiengänge für Fächerkombinationen", "art":"MSG_TID_STG", "art2":"", -"content":" tid_stg in (select D.tid from dim_studiengang D where D.ist_lehramt=1)"} +"content":" tid_stg in (select D.tid from dim_studiengang D where D.ist_lehramt=1)"}, + +{"id":"SOS_ABSCHLUSSTYP_GES", "caption":"Gesamtabschluss", "art":"SOS_ABSCHLUSSTYP", "art2":"", +"content":"pnr=9000"}, + +{"id":"SOS_ABSCHLUSSTYP_TSTG", "caption":"Teilstudienabschluss", "art":"SOS_ABSCHLUSSTYP", "art2":"", +"content":"pnr=8600"} + +{"id":"MSG_FKOMBI_KENNZ_MINT", "caption":"MINT-Fach", "art":"MSG_FKOMBI_KENNZ", "art2":"", +"content":"kombi_ch30_fach in (select distinct D.stg from dim_studiengang D where D.fgrp in (''04'',''08''))"} ] /> diff --git a/src-modules/module/msg/schluesseltabellen/sx_stylesheets_fuellen.sql b/src-modules/module/msg/schluesseltabellen/sx_stylesheets_fuellen.sql new file mode 100644 index 0000000..30bbdac --- /dev/null +++ b/src-modules/module/msg/schluesseltabellen/sx_stylesheets_fuellen.sql @@ -0,0 +1,208 @@ +--(c) 2011 Andre Knieschewski +--Freemarker Template +--Achtung: Macro fügt Inhalte ein +--Bitte nur Freemarker Variablen füllen + +<#assign masken = [ +{"mask":"49000", "filename":"tabelle_html_datenblatt.xsl", "ord":"1"}, +{"mask":"49040", "filename":"tabelle_html_datenblatt.xsl", "ord":"1"} +] /> + +<#assign stylesheet = [ +] /> + +<#assign stylesheet_field = [ + +] /> + +--Hier eventuell notwendige updates/delete's auf die Tabellen sx_mask_style, sx_stylesheets oder stylesheet_field einfügen. + + + <@sx_stylesheets_insert +m_masken=masken +m_stylesheet=stylesheet +m_stylesheet_field=stylesheet_field +/> + + +<#macro sx_stylesheets_insert m_masken m_stylesheet m_stylesheet_field> + +--Sicherstellen, dass keine Duplikate vorkommen: +--#################################################################################################### +<#foreach column in m_masken> +delete from sx_mask_style where maskeninfo_id=${column.mask} and stylesheet_id in (select tid from sx_stylesheets where filename ='${column.filename}') and ord=${column.ord}; + + +<#foreach column in m_stylesheet_field> +delete from stylesheet_field where stylesheet_id in (select tid from sx_stylesheets where filename ='${column.filename}'); + + + + + +-- Stylesheets füllen +--#################################################################################################### +create temp table tmp_stylesheets ( +tid serial not null, +filename CHAR(255) , +caption CHAR(255) , +description CHAR(255) , +relation CHAR(10) , +useragent CHAR(255) , +contenttype CHAR(200) , +is_generic smallint, +toolbar_icon_filepath VARCHAR(255) , +usage_resultset_data CHAR(10) default 'T' , +stylesheet_type CHAR(10) default 'XSL' , +jr_datasource CHAR(10) + +); + +create temp table tmp_hilf (tid integer); +insert into tmp_hilf select max(tid) from sx_stylesheets; +update tmp_hilf set tid=1 where tid is null; + +<#assign counter_tid = 1 /> +<#foreach column in m_stylesheet> +insert into tmp_stylesheets (tid, +filename, +caption, +description, +relation, +contenttype, +is_generic, +toolbar_icon_filepath , +usage_resultset_data , +stylesheet_type , +jr_datasource) +select max(tid)+${counter_tid},'${column.filename}', +'${column.caption}', + '${column.description}', + '${column.relation}', +'${column.contenttype}', +${column.is_generic}, +'${column.toolbar_icon_filepath}' , +'${column.usage_resultset_data}' , +'${column.stylesheet_type}' , +'${column.jr_datasource}' +from tmp_hilf; +<#assign counter_tid = counter_tid + 1 /> + + +<#if TableFieldExists?exists && TableFieldExists('sx_stylesheets','is_generic')> +update sx_stylesheets set is_generic=1 +where filename in (select T.filename from tmp_stylesheets T where T.is_generic=1); + + +<#if TableFieldExists?exists && TableFieldExists('sx_stylesheets','stylesheet_type')> +update sx_stylesheets set stylesheet_type=T.stylesheet_type, +contenttype=T.contenttype, +usage_resultset_data=T.usage_resultset_data, +jr_datasource=T.jr_datasource +from tmp_stylesheets T +where T.filename=sx_stylesheets.filename +and sx_stylesheets.filename in (select T2.filename from tmp_stylesheets T2); + + +--delete für tml_stylesheets hinzugefügt #ak 06.03.2013 +delete from tmp_stylesheets where filename in (select filename from sx_stylesheets); + + +insert into sx_stylesheets (tid, +filename, caption, description, relation, useragent, contenttype +<#if TableFieldExists?exists && TableFieldExists('sx_stylesheets','is_generic')> +,is_generic + +<#if TableFieldExists?exists && TableFieldExists('sx_stylesheets','toolbar_icon_filepath')> +,toolbar_icon_filepath , +usage_resultset_data , +stylesheet_type , +jr_datasource + +) +SELECT tid, filename, caption, description, relation, useragent, contenttype +<#if TableFieldExists?exists && TableFieldExists('sx_stylesheets','is_generic')> +,is_generic + +<#if TableFieldExists?exists && TableFieldExists('sx_stylesheets','toolbar_icon_filepath')> +,toolbar_icon_filepath , +usage_resultset_data , +stylesheet_type , +jr_datasource + +FROM tmp_stylesheets; + +drop table tmp_stylesheets; + + +-- Mask Style füllen +--#################################################################################################### +create temp table tmp_mask_style ( +tid serial not null, +maskeninfo_id INTEGER , +stylesheet_id INTEGER , +ord SMALLINT, +filename char(255) +); + +delete from tmp_hilf; +insert into tmp_hilf select max(tid) from sx_mask_style; +update tmp_hilf set tid=1 where tid is null; + +<#assign counter_tid = 1 /> +<#foreach column in m_masken> +insert into tmp_mask_style (tid,maskeninfo_id,ord,filename) +select max(tid)+${counter_tid},${column.mask},${column.ord},'${column.filename}' from tmp_hilf; + +update tmp_mask_style set stylesheet_id=(select max(tid) from sx_stylesheets where filename='${column.filename}') +where filename='${column.filename}'; +<#assign counter_tid = counter_tid + 1 /> + + +insert into sx_mask_style ( tid, maskeninfo_id, stylesheet_id, ord) +SELECT tid, maskeninfo_id, stylesheet_id, ord +FROM tmp_mask_style; + +drop table tmp_mask_style; + + +--Field zu Stylesheet Zuordnungen: +--#################################################################################################### +CREATE temp TABLE tmp_stylesheet_field +( +tid serial NOT NULL, +stylesheet_id INTEGER, +tablename char(255), +fieldname char(255), +filename char(255) +); + +delete from tmp_hilf; +insert into tmp_hilf select max(tid) from stylesheet_field; +update tmp_hilf set tid=1 where tid is null; + +<#assign counter_tid = 1 /> +<#foreach column in m_stylesheet_field> +INSERT INTO tmp_stylesheet_field (tid, filename, tablename, fieldname) +select max(tid)+${counter_tid}, '${column.filename}', '${column.tablename}', '${column.fieldname}' from tmp_hilf; + +update tmp_stylesheet_field set stylesheet_id=(select max(tid) from sx_stylesheets where filename='${column.filename}') +where filename='${column.filename}'; +<#assign counter_tid = counter_tid + 1 /> + + +insert into stylesheet_field ( tid, stylesheet_id, tablename, fieldname) +SELECT tid, stylesheet_id, tablename, fieldname +FROM tmp_stylesheet_field; + +drop table tmp_stylesheet_field; +drop table tmp_hilf; + + +<#if SQLdialect='Postgres'> +select sp_update_sequence('sx_stylesheets'); +select sp_update_sequence('sx_mask_style'); +select sp_update_sequence('stylesheet_field'); + + + diff --git a/src-modules/module/msg/upgrade/msg_modul_upgrade_man.sql b/src-modules/module/msg/upgrade/msg_modul_upgrade_man.sql new file mode 100644 index 0000000..d5c0cfc --- /dev/null +++ b/src-modules/module/msg/upgrade/msg_modul_upgrade_man.sql @@ -0,0 +1,3 @@ +-- +alter table msg_fkombi_aggr alter column kombi_kennz type varchar(255); +