Browse Source

TSG Generierung Korrektur stgnr, Bewerbungen Datenblatt left outer join #16

basisressourcen
Daniel Quathamer 8 months ago
parent
commit
5a57bb716e
  1. 277
      src-modules/module/costage/hilfstabellen/costage_st_studien_aggr_fuellen.sql
  2. 110
      src-modules/module/costage/masken/43110_maskeninfo.unl

277
src-modules/module/costage/hilfstabellen/costage_st_studien_aggr_fuellen.sql

@ -341,69 +341,107 @@ select 70,timestamp_str(now()) from xdummy;
<#if K_COSTAGE_TSG_GENERATE == 1> <#if K_COSTAGE_TSG_GENERATE == 1>
select T.*,M.st_studiengang_nr_msg as st_studiengang_nr_msg_possible,ST.st_studium_nr as st_studium_nr_msg_possible --was ist das min/max. Semester eines TSG?
into temp tmp_studien3 select T.st_studiengang_nr as st_studiengang_nr_tsg,
from tmp_studien2 T, costage_st_studiengaenge_mtsg M, costage_st_studien ST T.st_studstamm_nr,
null::integer as st_studiengang_nr_msg_end,
--M.st_studiengang_nr_msg as st_studiengang_nr_msg_end,
min(ST.semester) as startsemester,max(ST.semester) as endsemester
into temp tmp_studien_msg_tsg
from
tmp_studien2 T, costage_st_studiengaenge_mtsg M, tmp_studien ST --costage_st_studien ST
where ST.st_studiengang_nr=M.st_studiengang_nr_msg where ST.st_studiengang_nr=M.st_studiengang_nr_msg
and ST.st_studstamm_nr=T.st_studstamm_nr and ST.st_studstamm_nr=T.st_studstamm_nr
and M.st_studiengang_nr_tsg=T.st_studiengang_nr and M.st_studiengang_nr_tsg=T.st_studiengang_nr
and T.studiengangs_typ_kb ='TSG' and T.studiengangs_typ_kb ='TSG'
; and ST.studiengangs_typ_kb ='MSG'
and ST.studienstatustyp in ('U','B','E','I','X','Z') --nur tatsächlich eingeschrieben
and ST.status_historie=1
--Start- und Endsemester aller MSG pro Student: group by 1,2,3 --,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51
drop table if exists tmp_studien_msg; ;
select T.st_studiengang_nr as st_studiengang_nr_msg, --letzten MSG zuweisen:
T.st_studstamm_nr, update tmp_studien_msg_tsg set st_studiengang_nr_msg_end=ST.st_studiengang_nr
min(T.semester) as startsemester, from costage_st_studiengaenge_mtsg M, tmp_studien ST
max(T.semester) as endsemester where ST.st_studiengang_nr=M.st_studiengang_nr_msg
into temp tmp_studien_msg and M.st_studiengang_nr_tsg=tmp_studien_msg_tsg.st_studiengang_nr_tsg
from tmp_studien T and ST.st_studstamm_nr=tmp_studien_msg_tsg.st_studstamm_nr
where T.studienstatustyp in ('U','B','E','I','X','Z') --nur tatsächlich eingeschrieben and ST.semester = tmp_studien_msg_tsg.endsemester
and T.studiengangs_typ_kb ='MSG'--enthält die MSG and ST.studiengangs_typ_kb ='MSG'
and T.status_historie=1 and ST.studienstatustyp in ('U','B','E','I','X','Z') --nur tatsächlich eingeschrieben
group by 1,2 and ST.status_historie=1
;
--Verknüpfung mit TSG über alle möglichen Semester:
drop table if exists tmp_studien_msg_tsg;
select distinct
G.studiengangs_identifikator as studiengangs_identifikator_msg,
M.st_studiengang_nr_msg,
T.st_studiengang_nr as st_studiengang_nr_tsg,
M.st_studstamm_nr,
E.semester_tid as semester,
E.semester_anfang,
E.semester_ende,
E.st_sem_nr,
M.startsemester,
M.endsemester
into temp tmp_studien_msg_tsg
from costage_st_studiengaenge G,tmp_studien_msg M, tmp_studien3 T,costage_st_semester E
where G.st_studiengang_nr=M.st_studiengang_nr_msg
and M.st_studiengang_nr_msg=T.st_studiengang_nr_msg_possible
and M.st_studstamm_nr=T.st_studstamm_nr
--and T.semester between M.startsemester and M.endsemester
and E.semester_tid between M.startsemester and M.endsemester
and T.studiengangs_typ_kb ='TSG'
; ;
select 100,timestamp_str(now()) from xdummy; select 100,timestamp_str(now()) from xdummy;
--nun fehlende Datensätze ermitteln: --nun fehlende Datensätze ermitteln:
drop table if exists tmp_studien_msg_tsg_fehlend; drop table if exists tmp_studien_msg_tsg_fehlend;
select T.* select distinct S.semester_tid as semester,
S.semester_anfang,
S.semester_ende,
S.st_sem_nr,
T.st_studstamm_nr,
T.st_studiengang_nr_tsg,
T.st_studiengang_nr_msg_end
into temp tmp_studien_msg_tsg_fehlend into temp tmp_studien_msg_tsg_fehlend
from tmp_studien_msg_tsg T --enthält alle möglichen TSG from costage_st_semester S inner join tmp_studien_msg_tsg T on (S.semester_tid between T.startsemester and T.endsemester) --enthält alle möglichen TSG
left outer join tmp_studien2 T2 --enthält die tatsächlich vorhandenen TSG left outer join tmp_studien2 T2 --enthält die tatsächlich vorhandenen TSG
on (--T2.st_studiengang_nr_msg=T.st_studiengang_nr_msg on (T2.st_studiengang_nr=T.st_studiengang_nr_tsg
--and
T2.st_studiengang_nr=T.st_studiengang_nr_tsg
and T2.st_studstamm_nr=T.st_studstamm_nr and T2.st_studstamm_nr=T.st_studstamm_nr
and T2.studiengangs_typ_kb ='TSG' and T2.studiengangs_typ_kb ='TSG'
and T.semester=T2.semester) and S.semester_tid=T2.semester)
where T2.st_studstamm_nr is null where
T2.st_studstamm_nr is null
;
drop table if exists tmp_studien_msg_tsg_fehlend2;
--Studiengangsdaten des TSG nachladen:
select F.semester,
F.semester_anfang,
F.semester_ende,
T.st_absz_nr,
T.st_skz_nr,
T.studiengangs_identifikator,
T.studiengangs_bezeichnung,
F.st_sem_nr,
T.st_studium_nr,
T.st_studstamm_nr,
T.studiengangs_typ_kb,
T.matrikelnummer,
T.geschlecht,
T.ca12_staat,
T.second_nationality,
T.fachkennzeichen,
T.studienform_statistik_code,
--T.st_studiengang_nr_msg,
F.st_studiengang_nr_msg_end,
-- T.studiengangs_identifikator_msg,
T.st_studiengang_nr_tsg,
T.hrst,
T.hssem,
T.studienstatustyp,
T.statustyp_tsg,
1::integer as tsg_generated,
T.primaerflag,
T.hzb_art_nr,
T.hzb_land_sub_r_nr ,
T.hzb_jahr,
T.hzb_datum ,
T.hzb_note,
T.abm_art_s,
T.studienfach_sortierung,
max(T.semester) as letztes_tsg_semester,
max(T.fachsemester) as fachsemester
into temp tmp_studien_msg_tsg_fehlend2
from tmp_studien_msg_tsg_fehlend F, tmp_studien2 T
where F.st_studstamm_nr=T.st_studstamm_nr
and F.st_studiengang_nr_tsg=T.st_studiengang_nr_tsg
and T.abm_art_s is not null
group by 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,23,24,25,26,27,28,29,30,31,32 --,33
; ;
--fehlende Semester nachtragen: --fehlende Semester nachtragen:
insert into tmp_studien2(semester, insert into tmp_studien2(semester,
semester_anfang, semester_anfang,
@ -417,7 +455,7 @@ st_studium_nr,
st_studstamm_nr, st_studstamm_nr,
st_studiengang_nr, st_studiengang_nr,
studiengangs_typ_kb, studiengangs_typ_kb,
--studienstatustyp, studienstatustyp,
--st_studienstatus_nr, --st_studienstatus_nr,
--beginn_datum, --beginn_datum,
--gueltig_ab, --gueltig_ab,
@ -442,108 +480,73 @@ hzb_datum ,
hzb_note, hzb_note,
abm_art_s, abm_art_s,
fachsemester, fachsemester,
studienfach_sortierung,
letztes_tsg_semester) letztes_tsg_semester)
select M.semester, select distinct semester,
M.semester_anfang, semester_anfang,
M.semester_ende, semester_ende,
st_absz_nr, F.st_absz_nr,
S.st_skz_nr, F.st_skz_nr,
S.studiengangs_identifikator, F.studiengangs_identifikator,
S.studiengangs_bezeichnung, F.studiengangs_bezeichnung,
M.st_sem_nr, st_sem_nr,
S.st_studium_nr, st_studium_nr,
S.st_studstamm_nr, st_studstamm_nr,
S.st_studiengang_nr, st_studiengang_nr_tsg,
S.studiengangs_typ_kb, F.studiengangs_typ_kb,
--M.studienstatustyp_msg, studienstatustyp,
--M.st_studienstatus_nr_msg, --st_studienstatus_nr,
--M.beginn_datum, --beginn_datum,
--M.gueltig_ab, --gueltig_ab,
S.matrikelnummer, matrikelnummer,
S.geschlecht, geschlecht,
S.ca12_staat, ca12_staat,
S.second_nationality, second_nationality,
S.fachkennzeichen, F.fachkennzeichen,
S.studienform_statistik_code, studienform_statistik_code,
M.st_studiengang_nr_msg, st_studiengang_nr_msg_end,
M.studiengangs_identifikator_msg, G.studiengangs_identifikator as studiengangs_identifikator_msg,
S.st_studiengang_nr_tsg, st_studiengang_nr_tsg,
null::char(10) as hrst,--hrst kann im Studienverlauf wechseln, daher nachher vom MSG nachladen hrst,
S.hssem, hssem,
null::char(10) as statustyp_tsg, 'X' as statustyp_tsg, -- generierte TSG sind immer geschlossen S.statustyp_tsg,
1 as tsg_generated, 1::integer as tsg_generated,
0 as primaerflag, --geschlossene TSG können kein Primärflag haben 0 as primaerflag, --geschlossene TSG können kein Primärflag haben
S.hzb_art_nr, hzb_art_nr,
S.hzb_land_sub_r_nr , hzb_land_sub_r_nr ,
S.hzb_jahr, hzb_jahr,
S.hzb_datum , hzb_datum ,
S.hzb_note, hzb_note,
null::char(10) as abm_art_s, abm_art_s,
null::integer as fachsemester, fachsemester,
max(S.semester) studienfach_sortierung,
from tmp_studien_msg_tsg_fehlend M, tmp_studien2 S, costage_st_studiengaenge_mtsg MT letztes_tsg_semester
where M.st_studiengang_nr_msg=MT.st_studiengang_nr_msg from tmp_studien_msg_tsg_fehlend2 F, costage_st_studiengaenge G
and MT.st_studiengang_nr_tsg=M.st_studiengang_nr_tsg where G.st_studiengang_nr=F.st_studiengang_nr_msg_end
and MT.st_studiengang_nr_tsg=S.st_studiengang_nr
and M.st_studstamm_nr=S.st_studstamm_nr
and S.studiengangs_typ_kb ='TSG'
and M.semester != S.semester
--and E.st_sem_nr=M.st_sem_nr
--and S.st_studiengang_nr_msg=34454
--and S.studiengangs_bezeichnung='Bildungswissenschaften'
--and M.semester=20211
group by 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,23,24,25,26,27,28,29,30,31,32,33
; ;
select 110,timestamp_str(now()) from xdummy; select 110,timestamp_str(now()) from xdummy;
--statustyp und hrst nachladen: --statustyp und hrst nachladen:
update tmp_studien2 set studienstatustyp=S.studienstatustyp, -- update tmp_studien2 set studienstatustyp=S.studienstatustyp,
hrst=S.hrst -- hrst=S.hrst
from tmp_studien S -- from tmp_studien S
where tmp_studien2.st_studiengang_nr_msg=S.st_studiengang_nr -- where tmp_studien2.st_studiengang_nr_msg=S.st_studiengang_nr
and tmp_studien2.st_studstamm_nr=S.st_studstamm_nr -- and tmp_studien2.st_studstamm_nr=S.st_studstamm_nr
and S.studiengangs_typ_kb ='MSG' -- and S.studiengangs_typ_kb ='MSG'
and tmp_studien2.tsg_generated=1 -- and tmp_studien2.tsg_generated=1
and tmp_studien2.st_sem_nr=S.st_sem_nr -- and tmp_studien2.st_sem_nr=S.st_sem_nr
--Defaultmäßig den letzten Status im Semester nehmen (status_historie=1) -- --Defaultmäßig den letzten Status im Semester nehmen (status_historie=1)
and S.status_historie=1 -- and S.status_historie=1
--Ausnahme: wenn der MSG bis zum Semesterende läuft und Status X hat, -- ;
--wird er auf den vorherigen Status gesetzt, weil der Studi
--bis Semesterende studiert hat
-- and (
-- (S.status_historie=1 and
-- (
-- S.gueltig_ab < S.semester_ende or (S.gueltig_ab >= S.semester_ende and S.studienstatustyp !='X')
-- )
-- )
-- or
-- (S.status_historie=2 and S.gueltig_ab < S.semester_ende)
-- )
;
select 120,timestamp_str(now()) from xdummy; select 120,timestamp_str(now()) from xdummy;
--statustyp_tsg nachladen:
update tmp_studien2 set statustyp_tsg='X' , -- generierte TSG sind immer geschlossen S.statustyp_tsg,
fachsemester=S.fachsemester,
abm_art_s=S.abm_art_s
from tmp_studien S
where tmp_studien2.st_studium_nr=S.st_studium_nr
and tmp_studien2.st_studstamm_nr=S.st_studstamm_nr
and S.studiengangs_typ_kb ='TSG'
and tmp_studien2.tsg_generated=1
and tmp_studien2.letztes_tsg_semester=S.semester
and S.status_historie=1
;
select 130,timestamp_str(now()) from xdummy;
drop table tmp_studien_msg_tsg_fehlend; drop table tmp_studien_msg_tsg_fehlend;
drop table tmp_studien_msg_tsg_fehlend2;
drop table tmp_studien_msg_tsg; drop table tmp_studien_msg_tsg;
drop table tmp_studien_msg;
drop table tmp_studien3;
</#if> </#if>

110
src-modules/module/costage/masken/43110_maskeninfo.unl

@ -1,65 +1,57 @@
43110^Bewerbungen Datenblatt (CO)^--Freemarker Template\ 43110^Bewerbungen Datenblatt (CO)^--Freemarker Template\
<#include "SQL_lingua_franca"/>\ <#include "SQL_lingua_franca"/>\
<#include "SuperX_general"/>\ <#include "SuperX_general"/>\
<#include "SQL_multitable_output"/>\ <#include "DatenblattSQLGenerator"/>\
\ \
--ram excelexport \ --ram excelexport \
\ \
<sqlvars>\ <sqlvars>\
<sqlvar name="get_tables"><![CDATA[\ <sqlvar name="basetable" ><![CDATA[\
SELECT distinct name,name\ SELECT distinct name\
from sx_tables\ from sx_tables\
where name in ('costage_bw_antr_aggr'\ where name in ('costage_bw_antr_aggr');]]>\
</sqlvar>\
<sqlvar name="getJoinTables" type="hashsequence"><![CDATA[\
SELECT distinct name\
from sx_tables\
where name in (''\
${DatenblattTables(<<tablestylesheet>>,"<<Weitere Tabellen>>",.vars["Weitere TabellenObject"].allKeys)}\ ${DatenblattTables(<<tablestylesheet>>,"<<Weitere Tabellen>>",.vars["Weitere TabellenObject"].allKeys)}\
\ \
)\ )\
order by 2;]]>\ order by 1;]]>\
</sqlvar>\ </sqlvar>\
<sqlvar name="get_table_joins"><![CDATA[\ <sqlvar name="getJoinWhereClauses" type="hashsequence"><![CDATA[\
select table_name || '.' || name || '=' || foreignkey_tab || '.' || foreignkey_col,table_name \ select table_name || '.' || name || '=' || foreignkey_tab || '.' || foreignkey_col as condition,\
from sx_fields where table_name in ('costage_bw_antr_aggr'\ table_name ,\
foreignkey_tab\
from sx_fields where table_name in ('${basetable}'\
${DatenblattTables(<<tablestylesheet>>,"<<Weitere Tabellen>>",.vars["Weitere TabellenObject"].allKeys)} )\ ${DatenblattTables(<<tablestylesheet>>,"<<Weitere Tabellen>>",.vars["Weitere TabellenObject"].allKeys)} )\
and foreignkey_tab in ('costage_bw_antr_aggr'\ and foreignkey_tab in ('-xy'\
${DatenblattTables(<<tablestylesheet>>,"<<Weitere Tabellen>>",.vars["Weitere TabellenObject"].allKeys)})\ ${DatenblattTables(<<tablestylesheet>>,"<<Weitere Tabellen>>",.vars["Weitere TabellenObject"].allKeys)})\
;]]>\ ;]]>\
</sqlvar>\ </sqlvar>\
<sqlvar name="get_felder"><![CDATA[\ <sqlvar name="getSelectClause" type="hashsequence"><![CDATA[\
SELECT name,\ SELECT name,\
caption,\ caption,\
(trim(field_type) || '#' || is_primarykey || '#' || trim(string_not_null(foreignkey_tab)) || '#' || trim(string_not_null(foreignkey_col))\ field_type,\
|| '#' || trim(string_not_null(foreignkey_cap))\ is_primarykey,\
|| '#' || trim(string_not_null(foreignkey_cond))\ foreignkey_tab,\
|| '#' || trim(string_not_null(foreignkey_func))\ foreignkey_col,\
|| '#' || trim(string_not_null(table_name))\ foreignkey_cap,\
|| '#' || trim(string_not_null(foreignkey_uniquename)))::char(255) as strukturStr\ foreignkey_cond,\
foreignkey_func,\
table_name,\
foreignkey_uniquename\
from sx_fields\ from sx_fields\
where table_name in ('costage_bw_antr_aggr'\ where table_name in ('${basetable}'\
${DatenblattTables(<<tablestylesheet>>,"<<Weitere Tabellen>>",.vars["Weitere TabellenObject"].allKeys)}\ ${DatenblattTables(<<tablestylesheet>>,"<<Weitere Tabellen>>",.vars["Weitere TabellenObject"].allKeys)}\
)\ )\
and currentlyused=1\ and currentlyused=1\
${DatenblattFields(<<tablestylesheet>>,"<<Felder>>",FelderObject.allKeys)}\ ${DatenblattFields(<<tablestylesheet>>,"<<Felder>>",FelderObject.allKeys)}\
order by 2,3;]]>\ order by 2,3;]]>\
</sqlvar>\ </sqlvar>\
<sqlvar name="get_felder_fk"><![CDATA[\
SELECT name,\
caption,\
(trim(table_name)\
|| '#' || trim(string_not_null(foreignkey_tab))\
|| '#' || trim(string_not_null(foreignkey_uniquename)))::char(255) as strukturStr\
from sx_fields\
where table_name in ('costage_bw_antr_aggr' ${DatenblattTables(<<tablestylesheet>>,"<<Weitere Tabellen>>",.vars["Weitere TabellenObject"].allKeys)}\
)\
and currentlyused=1\
${DatenblattFields(<<tablestylesheet>>,"<<Felder>>",FelderObject.allKeys)}\
order by 2,3;]]>\
</sqlvar>\
</sqlvars>\ </sqlvars>\
\ \
<@generate_multitable_list />\
<@generate_field_list_multitable aggregationsfeld="summe" aggregatfunktion="sum(" />\
<@generate_foreign_fields_multitable />\
\
\
<#assign filter="and bw_typ_kb not in ('MBW')\ <#assign filter="and bw_typ_kb not in ('MBW')\
/* AND bw_zul_art_nr in (<<Zulassungsart>>) */\ /* AND bw_zul_art_nr in (<<Zulassungsart>>) */\
/* and costage_bw_antr_aggr.st_studiengang_nr in (select G.st_studiengang_nr from costage_st_studiengaenge G where G.abschluss in (<<Abschluss>>)) */\ /* and costage_bw_antr_aggr.st_studiengang_nr in (select G.st_studiengang_nr from costage_st_studiengaenge G where G.abschluss in (<<Abschluss>>)) */\
@ -89,50 +81,36 @@ SELECT name,\
\ \
<#assign filter=filter +" and " + fach_filter />\ <#assign filter=filter +" and " + fach_filter />\
\ \
<@generate_resultset_multitable tabellen=table_list\ --\
p_show_keys=<<Schlüssel anzeigen>>\ \
p_field_list_select=field_list_select\ <@generateDatenblatt \
p_foreign_fields=foreign_fields\ p_basetable = basetable\
p_joinTables = getJoinTables\
p_joinWhereClauses = getJoinWhereClauses\
p_selectClause = getSelectClause\
p_aggregationsfeld ="summe"\
p_aggregatfunktion = "sum("\
p_filter = filter\ p_filter = filter\
p_field_list_groupby=field_list_groupby\ p_show_keys= <<Schlüssel anzeigen>>\
p_join_clause=join_clause\ p_postProcessing= ""\
/>^--Freemarker Template \ />^--Freemarker Template \
<sqlvars>\
<sqlvar name="basetable">select 'costage_bw_antr_aggr' from xdummy</sqlvar>\
<sqlvar name="restriction"><![CDATA[\
<#assign restrict=DatenblattTables(<<tablestylesheet>>,"<<Weitere Tabellen>>",.vars["Weitere TabellenObject"].allKeys)/>;\
select '${restrict?replace("\\x0027","\\x0027\\x0027")}' from xdummy;]]>\
</sqlvar>\
<sqlvar name="get_felder"><![CDATA[\
SELECT caption,\
foreignkey_tab,\
description as strukturStr\
from sx_fields\
where table_name in ('${basetable}'\
${restriction}\
)\
and currentlyused=1\
${DatenblattFields(<<tablestylesheet>>,"<<Felder>>",FelderObject.allKeys)}\
order by 1;]]>\
</sqlvar>\
</sqlvars>\
XIL List\ XIL List\
sizable_columns horizontal_scrolling\ sizable_columns horizontal_scrolling\
white_space_color=COLOR_WHITE fixed_columns=1\ white_space_color=COLOR_WHITE fixed_columns=1\
min_heading_height=35\ min_heading_height=35\
<#assign i=1 />\ <#assign i=1 />\
<#if get_felder?has_content >\ <#if getSelectClause?has_content >\
<#foreach myfield in get_felder>\ <#foreach myfield in getSelectClause>\
<#assign i=i+1 />\ <#assign i=i+1 />\
Column CID=${i} heading_text="${myfield.key}" explanation="${myfield.strukturStr}" center_heading\ Column CID=${i} heading_text="${myfield.caption}" explanation="" center_heading\
row_selectable col_selectable rightJust heading_platform readonly\ row_selectable col_selectable rightJust heading_platform readonly\
width=20\ width=20\
<#if myfield.name != '' && <<Schlüssel anzeigen>>==1>\ <#if myfield.foreignkey_tab != '' && <<Schlüssel anzeigen>>==1>\
<#assign i=i+1 />\ <#assign i=i+1 />\
Column CID=${i} heading_text="${myfield.key}\\n(Schlüssel)" explanation="Schlüssel des Feldes ${myfield.key}" center_heading\ Column CID=${i} heading_text="${myfield.caption}\\n(Schlüssel)" explanation="" center_heading\
row_selectable col_selectable rightJust heading_platform readonly\ row_selectable col_selectable rightJust heading_platform readonly\
width=20\ width=20\
</#if>\ </#if>\
</#foreach>\ </#foreach>\
</#if>\ </#if>\
@@@^Altersgruppe^Anzahl^Bewerbungen Datenblatt aus CO^drop table tmp_tabelle;^ ^2^700^360^0^1^ ^ @@@^Altersgruppe^Anzahl^Bewerbungen Datenblatt aus CO^drop table tmp_tabelle;^^2^700^360^^1^^

Loading…
Cancel
Save