diff --git a/src-modules/module/rpta/conf/rpta.xml b/src-modules/module/rpta/conf/rpta.xml index 1952928..feb4861 100644 --- a/src-modules/module/rpta/conf/rpta.xml +++ b/src-modules/module/rpta/conf/rpta.xml @@ -615,6 +615,7 @@ + @@ -685,6 +686,7 @@ + diff --git a/src-modules/module/rpta/hilfstabellen/fill_rpta_resultset.sql b/src-modules/module/rpta/hilfstabellen/fill_rpta_resultset.sql index 5c1ea53..11ede97 100644 --- a/src-modules/module/rpta/hilfstabellen/fill_rpta_resultset.sql +++ b/src-modules/module/rpta/hilfstabellen/fill_rpta_resultset.sql @@ -49,12 +49,17 @@ R.uniquename as rpta_name <#if basetable.is_virtual==0> <#foreach rpta_clause in rpta_clauses> + +<#assign whereclauseTemplate= "<#assign whereclause=\""+rpta_clause.whereclause +"\">"/> +<#assign t2=whereclauseTemplate?interpret /> +<@t2/> + <#if rpta_clause.rpta_uniquename=basetable.uniquename> <#if rpta_clause.joinclause?exists && rpta_clause.joinclause !=''> -<#assign sqlString = "select current_timestamp as creation_date, " + rpta_clause.fieldclause + " from " + rpta_clause.joinclause + " where 1=1 " + rpta_clause.whereclause /> +<#assign sqlString = "select current_timestamp as creation_date, " + parseRepoVars(rpta_clause.fieldclause) + " from " + rpta_clause.joinclause + " where 1=1 " + parseRepoVars(rpta_clause.whereclause) /> <#else> -<#assign sqlString = "select current_timestamp as creation_date, " + rpta_clause.fieldclause + " where 1=1 " + rpta_clause.whereclause /> +<#assign sqlString = "select current_timestamp as creation_date, " + parseRepoVars(rpta_clause.fieldclause) + " where 1=1 " + parseRepoVars(rpta_clause.whereclause) /> diff --git a/src-modules/module/rpta/masken/48000_maskeninfo.unl b/src-modules/module/rpta/masken/48000_maskeninfo.unl index 2d7c9d9..2cf3709 100644 --- a/src-modules/module/rpta/masken/48000_maskeninfo.unl +++ b/src-modules/module/rpta/masken/48000_maskeninfo.unl @@ -167,11 +167,17 @@ limit 1;\ <#if basetable.is_virtual==1>\ \ create temp table ${basetable.runtime_tablename} as\ -select ${rpta_resultset.fieldclause} \ +select ${parseRepoVars(rpta_resultset.fieldclause)} \ from ${rpta_resultset.joinclause} \ where 1=1\ <#if rpta_resultset.whereclause != ""> \ -${rpta_resultset.whereclause} \ +--damit Repo Variablen interpretiert werden:\ +<#assign whereclauseTemplate= "<#assign whereclause=\\""+rpta_resultset.whereclause +"\\">"/>\ +<#assign t2=whereclauseTemplate?interpret />\ +<@t2/>\ +\ +${whereclause} \ +\ and ${filter}\ ;\ \ diff --git a/src-modules/module/rpta/masken/48250_felderinfo.unl b/src-modules/module/rpta/masken/48250_felderinfo.unl index b380023..38a930d 100644 --- a/src-modules/module/rpta/masken/48250_felderinfo.unl +++ b/src-modules/module/rpta/masken/48250_felderinfo.unl @@ -24,6 +24,7 @@ and R.systeminfo_id=6)\ order by sortnr, caption\ limit 1 \ ;^ +48261^ProfGruppe^1000^0^0^200^150^1^char^30^0^12^<>select tid,type,name,sortnr from sichten where art in ('SVA-PBV-Gruppe-Sicht') and aktiv=1 order by sortnr,type,name;^^^ 48262^Dienstart^3^350^-1^150^150^3^char^30^0^12^<>select tid,type,name from sichten where art ='SVA Dienstart' and aktiv=1 order by type,name;^hidden^^ 48264^BVL-Gruppe^80^350^-1^150^120^10^char^30^0^12^<>select tid,type,name from sichten where art ='SVA BVL-Gruppen' and aktiv=1 order by type,name;^hidden^^ 48267^Personalkategorie^310^0^0^100^200^3^char^30^0^1^<> select id,caption from sx_repository where art='SVA_PERSONALKATEGORIE' and aktiv=1 and gueltig_seit<=date_val(<>) and gueltig_bis>=date_val(<>) order by sort1^hidden^^ diff --git a/src-modules/module/rpta/masken/48250_masken_felder_bez.unl b/src-modules/module/rpta/masken/48250_masken_felder_bez.unl index 7d60b28..2ab41ae 100644 --- a/src-modules/module/rpta/masken/48250_masken_felder_bez.unl +++ b/src-modules/module/rpta/masken/48250_masken_felder_bez.unl @@ -9,6 +9,7 @@ 48250^48258^ 48250^48259^ 48250^48260^ +48250^48261^ 48250^48262^ 48250^48264^ 48250^48267^ diff --git a/src-modules/module/rpta/masken/48250_maskeninfo.unl b/src-modules/module/rpta/masken/48250_maskeninfo.unl index fcdc6c0..bcee439 100644 --- a/src-modules/module/rpta/masken/48250_maskeninfo.unl +++ b/src-modules/module/rpta/masken/48250_maskeninfo.unl @@ -106,7 +106,7 @@ and ${filter}\ \ \ \ -<@rpta_interpret_column_layout nonvirtualTableFilter=filter />\ +<@rpta_interpret_column_layout nonvirtualTableFilter=filter />\ \ --wenn columns?has_content^--Freemarker Template\ XIL List\ diff --git a/src-modules/module/rpta/schluesseltabellen/absolvierende_datenblatt_virtuell.sql b/src-modules/module/rpta/schluesseltabellen/absolvierende_datenblatt_virtuell.sql index 0841186..bdcce47 100644 --- a/src-modules/module/rpta/schluesseltabellen/absolvierende_datenblatt_virtuell.sql +++ b/src-modules/module/rpta/schluesseltabellen/absolvierende_datenblatt_virtuell.sql @@ -217,7 +217,7 @@ joinclause='${fact_table_source} <#foreach added_table in added_tables> left outer join ${added_table.name} on (${added_table.joinclause}) ', -whereclause='and stichtag=(select ST.tid from sos_stichtag ST where ST.appl_key=''2'') and abschnitt=2 and pstatus=''BE'''; +whereclause='and abschnitt=2 and pstatus=''BE'''; select * into temp tmp_rs1 from rpta_resultset diff --git a/src-modules/module/rpta/schluesseltabellen/fm_templates.unl b/src-modules/module/rpta/schluesseltabellen/fm_templates.unl index e948575..c74753a 100644 --- a/src-modules/module/rpta/schluesseltabellen/fm_templates.unl +++ b/src-modules/module/rpta/schluesseltabellen/fm_templates.unl @@ -288,8 +288,10 @@ drop TABLE tmp_rpta_column2layout;\ null::varchar(255) as ${column.targetfieldname},\ <#elseif column.coltype=="physicalColumn">\ ${column.srcfieldname} as ${column.targetfieldname},\ + <#elseif column.coltype=="logicalColumn" && column.colfunction!="">\ + ${parseRepoVars(column.colfunction)} as ${column.targetfieldname},\ <#elseif column.coltype=="logicalColumn">\ - ${column.colfunction} as ${column.targetfieldname},\ + null::varchar(255) as ${column.targetfieldname},\ <#elseif column.coltype=="preparingColumn">\ ${column.colfunction} as ${column.targetfieldname},\ <#elseif column.coltype=="lookupColumn">\ @@ -303,8 +305,13 @@ drop TABLE tmp_rpta_column2layout;\ from ${basetable.runtime_tablename}\ where 1=1 \ <#if rpta_column_layout.whereclause !="">\ - and ${rpta_column_layout.whereclause}\ - \ + \ + --damit Repo Variablen interpretiert werden:\ + \ + <#assign whereclauseTemplate= "<#assign whereclause=\\""+rpta_column_layout.whereclause +"\\">"/>\ + <#assign t2=whereclauseTemplate?interpret />\ + <@t2/>\ + and ${whereclause} \ <#if basetable.is_virtual==0>\ and ${nonvirtualTableFilter}\ \ @@ -323,7 +330,7 @@ drop TABLE tmp_rpta_column2layout;\ <#elseif column.is_aggregate==0 && column.coltype=="processingColumn"> \ <#assign groupby=groupby+1 />\ <#if column.colfunction?has_content>\ - ${column.colfunction} as ${column.targetfieldname},\ + ${parseRepoVars(column.colfunction)} as ${column.targetfieldname},\ <#else>\ ${column.srcfieldname} as ${column.targetfieldname},\ \ @@ -334,9 +341,10 @@ drop TABLE tmp_rpta_column2layout;\ -- computedColumns ausgeschlossen, da später im finalen select verarbeitet\ <#foreach column in columns>\ <#if column.is_aggregate==1 \ - && column.colfunction?has_content \ + && column.colfunction?has_content\ + && column.colfunction !=""\ && column.coltype=="processingColumn"> \ - ${column.colfunction} as ${column.targetfieldname},\ + ${parseRepoVars(column.colfunction)} as ${column.targetfieldname},\ <#elseif column.is_aggregate==1 \ && (column.coltype == "logicalColumn" || column.coltype == "lookupColumn" || column.coltype == "physicalColumn")> \ sum(${column.targetfieldname}) as ${column.targetfieldname},\ @@ -507,7 +515,7 @@ drop TABLE tmp_rpta_column2layout;\ <#assign colnr=colnr+1 />\ <#assign myfieldclause=column.targetfieldname />\ <#if column.coltype=="computedColumn">\ - <#assign myfieldclause=column.colfunction />\ + <#assign myfieldclause=parseRepoVars(column.colfunction) />\ \ <@format_code2sql selectclause=myfieldclause format_code_uniquename=column.format_uniquename format_sql=column.format_sql /> as ${column.targetfieldname}\ \ @@ -875,6 +883,7 @@ where rpta_column_layout.uniquename=(select uniquename from tmp_rpta_column_layo \ drop table tmp_rpta_column_layout_target;\ \ +\ delete from rpta_column2layout\ where layout_id in (select L.tid\ from rpta_column_layout L,rpta_resultset R\ @@ -981,4 +990,14 @@ ${selectclause}\ <#else>\ ${selectclause}${format_sql}\ \ -^Makros zum Umgang mit Spaltenlayouts^ ^1^ +\ +\ +<#function parseRepoVars inputClause>\ +<#if inputClause?exists && inputClause !="">\ + --damit Repo Variablen interpretiert werden:\ + <#assign inputClauseTemplate= "<#assign inputClauseParsed=\\""+inputClause +"\\">"/>\ + <#assign t2=inputClauseTemplate?interpret />\ + <@t2/>\ + <#return inputClauseParsed /> \ +<#else><#return "" /> \ +^Makros zum Umgang mit Spaltenlayouts^ ^1^ diff --git a/src-modules/module/rpta/schluesseltabellen/rpta_column_layout_sos_stud_hssem1_repo_fuellen.sql b/src-modules/module/rpta/schluesseltabellen/rpta_column_layout_sos_stud_hssem1_repo_fuellen.sql new file mode 100644 index 0000000..ec05b88 --- /dev/null +++ b/src-modules/module/rpta/schluesseltabellen/rpta_column_layout_sos_stud_hssem1_repo_fuellen.sql @@ -0,0 +1,58 @@ +--freemarker template +<#include "RPTA-Makros"/> + + +select count(*) from rpta_resultset where uniquename='sos_stud_astat'; + + +<#assign rpta_column_layout = {"uniquename":"sos_stud_astat_hssem_1_repo", +"caption":"Studierende / 1. HS", +"rpta_resultset":"sos_stud_astat", +"whereclause":"${SOS_HH_NH_ZH}", +"description":"Haupt- und Nebenhörer_innen" +} + /> + +<#assign rpta_columns = [ +{"uniquename":"dim_studiengang_stg_str", +"caption_der_spalte":"Studienfach", +"caption_in_ergebnistabelle":"Studienfach", +"srcfieldname":"dim_studiengang_stg_str", +"column_type":"physicalColumn", +"col_function":"", +"is_visible":"1", +"visible_size":"10", +"is_aggregate":"0", +"description":"" +}, +{"uniquename":"sos_stud_astat_hssem1", +"caption_der_spalte":"Summe erstes Hochschulsemester", +"caption_in_ergebnistabelle":"Summe erstes Hochschulsemester", +"srcfieldname":"", +"targetfieldname":"sos_stud_astat_hssem1", +"column_type":"logicalColumn", +"col_function":"case when ${SOS_HSSEM_1} then summe else 0 end", +"is_visible":"1", +"visible_size":"10", +"is_aggregate":"1", +"description":"" +}, +{"uniquename":"summe", +"caption_der_spalte":"Summe der Studierenden", +"caption_in_ergebnistabelle":"Summe der Studierenden", +"srcfieldname":"summe", +"column_type":"physicalColumn", +"col_function":"sum", +"is_visible":"1", +"visible_size":"5", +"is_aggregate":"1", +"description_der_spalte":"Summe der Studierenden", +"description_in_ergebnistabelle":"Summe der Studierenden" + +} +] + /> + + + +<@rpta_column_layout_fuellen /> diff --git a/src-modules/module/rpta/schluesseltabellen/rpta_column_layout_sos_stud_hssem1_repo_fuellen_generated.sql b/src-modules/module/rpta/schluesseltabellen/rpta_column_layout_sos_stud_hssem1_repo_fuellen_generated.sql new file mode 100644 index 0000000..5b3a6b8 --- /dev/null +++ b/src-modules/module/rpta/schluesseltabellen/rpta_column_layout_sos_stud_hssem1_repo_fuellen_generated.sql @@ -0,0 +1,313 @@ +--automatically created by SuperX/Freemarker for Postgres (27.04.2026 07:38:19) + + + + +CREATE temp TABLE tmp_rpta_column +( + uniquename varchar(255) NOT NULL, + caption varchar(255), + caption_in_ergebnistabelle varchar(255), + srcfieldname varchar(255), + targetfieldname varchar(255), + column_type integer, + col_function text, + is_visible smallint, + visible_size smallint, + is_aggregate smallint, + resultset_id integer, + sortnr integer, + description TEXT, + description_in_ergebnistabelle TEXT, + format_code_uniquename varchar(255), + format_code_id integer +); + +CREATE temp TABLE tmp_rpta_column_layout +( + uniquename varchar(255) NOT NULL, + caption varchar(255), + resultset_id integer, + whereclause text, + sortclause text, + description text, + is_virtual smallint default 1 +); + +insert into tmp_rpta_column_layout( +resultset_id, +uniquename, +caption, +whereclause, + description +) +select tid, +'sos_stud_astat_hssem_1_repo', +'Studierende / 1. HS', +'${SOS_HH_NH_ZH}', +'Haupt- und Nebenhörer_innen' +FROM rpta_resultset +where uniquename='sos_stud_astat'; + + +INSERT INTO tmp_rpta_column +(resultset_id, + uniquename, + caption, + caption_in_ergebnistabelle, + srcfieldname, + targetfieldname, + column_type, + col_function, + is_visible, + visible_size, + is_aggregate, + sortnr, + description, + description_in_ergebnistabelle, + format_code_uniquename + ) +select R.tid, +'dim_studiengang_stg_str', +'Studienfach', +'Studienfach', +'dim_studiengang_stg_str', +'dim_studiengang_stg_str' , +T.tid as column_type, +'', +1, +10, +0, +10, +'', +'', +null::varchar +FROM rpta_resultset R, rpta_column_type T +where R.uniquename='sos_stud_astat' +and T.uniquename='physicalColumn'; + + +INSERT INTO tmp_rpta_column +(resultset_id, + uniquename, + caption, + caption_in_ergebnistabelle, + srcfieldname, + targetfieldname, + column_type, + col_function, + is_visible, + visible_size, + is_aggregate, + sortnr, + description, + description_in_ergebnistabelle, + format_code_uniquename + ) +select R.tid, +'sos_stud_astat_hssem1', +'Summe erstes Hochschulsemester', +'Summe erstes Hochschulsemester', +'', +'sos_stud_astat_hssem1' , +T.tid as column_type, +'case when ${SOS_HSSEM_1} then summe else 0 end', +1, +10, +1, +20, +'', +'', +null::varchar +FROM rpta_resultset R, rpta_column_type T +where R.uniquename='sos_stud_astat' +and T.uniquename='logicalColumn'; + + +INSERT INTO tmp_rpta_column +(resultset_id, + uniquename, + caption, + caption_in_ergebnistabelle, + srcfieldname, + targetfieldname, + column_type, + col_function, + is_visible, + visible_size, + is_aggregate, + sortnr, + description, + description_in_ergebnistabelle, + format_code_uniquename + ) +select R.tid, +'summe', +'Summe der Studierenden', +'Summe der Studierenden', +'summe', +'summe' , +T.tid as column_type, +'sum', +1, +5, +1, +30, +'Summe der Studierenden', +'Summe der Studierenden', +null::varchar +FROM rpta_resultset R, rpta_column_type T +where R.uniquename='sos_stud_astat' +and T.uniquename='physicalColumn'; + + +update tmp_rpta_column set format_code_id=C.tid +from rpta_format_code C +where C.uniquename=tmp_rpta_column.format_code_uniquename +and format_code_uniquename is not null; + + +select * into temp tmp_rpta_column2layout +from rpta_column2layout +where layout_id in (select L.tid +from rpta_column_layout L,rpta_resultset R +where R.tid=L.resultset_id +and R.uniquename='sos_stud_astat' +and L.uniquename='sos_stud_astat_hssem_1_repo' +) +; + +select uniquename into temp tmp_rpta_column_layout_target +from rpta_column_layout +where resultset_id in (select tid +FROM rpta_resultset +where uniquename='sos_stud_astat') +and resultset_id in (select tid +FROM rpta_resultset +where uniquename='sos_stud_astat') +; +--falls neu +insert into rpta_column_layout +(uniquename, + caption, + resultset_id, + whereclause, + sortclause, + description, + is_virtual) + select uniquename, + caption, + resultset_id, + whereclause, + null::text as sortclause, + description, + is_virtual +FROM tmp_rpta_column_layout T +where not exists (select T2.uniquename from tmp_rpta_column_layout_target T2 +where T2.uniquename=T.uniquename); + +--falls geändert, uniquename muss bleiben +update rpta_column_layout +set (caption, resultset_id, whereclause,sortclause, description, is_virtual) += ( select caption, resultset_id, + whereclause, + null::text as sortclause, + description, + is_virtual +FROM tmp_rpta_column_layout T +where T.uniquename=rpta_column_layout.uniquename) +where rpta_column_layout.uniquename=(select uniquename from tmp_rpta_column_layout); + +drop table tmp_rpta_column_layout_target; + +delete from rpta_column2layout +where layout_id in (select L.tid +from rpta_column_layout L,rpta_resultset R +where R.tid=L.resultset_id +and R.uniquename='sos_stud_astat' +and L.uniquename='sos_stud_astat_hssem_1_repo' +) +; + +select * into temp tmp_rpta_column2 +from tmp_rpta_column T +where (resultset_id,uniquename) not in +(select resultset_id,uniquename from rpta_column); + +INSERT INTO rpta_column +(resultset_id, + uniquename, + caption, + srcfieldname, + targetfieldname, + column_type, + col_function, + is_aggregate, + description, + custom + ) + select +resultset_id, + uniquename, + caption, + srcfieldname, + targetfieldname, + column_type, + col_function, + is_aggregate, + description, + 0 as custom +from tmp_rpta_column2; + +--evtl. neuen Satz einfügen, dann alle updaten + +update rpta_column set ( caption, + srcfieldname, + targetfieldname, + column_type, + col_function, + is_aggregate, + description) + = (select caption, + srcfieldname, + targetfieldname, + column_type, + col_function, + is_aggregate, + description + from tmp_rpta_column T + where T.resultset_id=rpta_column.resultset_id + and T.uniquename=rpta_column.uniquename) + where custom=0 + and (resultset_id,uniquename) in +(select T.resultset_id,T.uniquename +from tmp_rpta_column T) +; + +drop table tmp_rpta_column2; + +insert into rpta_column2layout(column_id, + layout_id, + sortnr, + is_visible, + visible_size, + caption, + description, + format_code_id) +select C.tid as column_id, + L.tid as layout_id, + T.sortnr, + T.is_visible, + T.visible_size, + T.caption_in_ergebnistabelle, + T.description_in_ergebnistabelle, + T.format_code_id +FROM rpta_column C, rpta_column_layout L, tmp_rpta_column T +where C.uniquename=T.uniquename +and C.resultset_id=T.resultset_id +and L.uniquename='sos_stud_astat_hssem_1_repo' +and L.resultset_id=T.resultset_id + ; +drop table tmp_rpta_column; +drop TABLE tmp_rpta_column_layout; +drop TABLE tmp_rpta_column2layout; diff --git a/superx/xml/rpta_templates.xsl b/superx/xml/rpta_templates.xsl index f5a8e80..3dc89eb 100644 --- a/superx/xml/rpta_templates.xsl +++ b/superx/xml/rpta_templates.xsl @@ -29,6 +29,7 @@ xmlns="http://jasperreports.sourceforge.net/jasperreports"> + @@ -262,10 +263,12 @@ and not(starts-with(f_name,'next')) ]"> - - - - + + + + + +