Browse Source

Virtuelle Tabellen und Spaltenlayouts sollten HS-Repository nutzen #20

master
Daniel Quathamer 2 days ago
parent
commit
273ea4f7d2
  1. 2
      src-modules/module/rpta/conf/rpta.xml
  2. 9
      src-modules/module/rpta/hilfstabellen/fill_rpta_resultset.sql
  3. 10
      src-modules/module/rpta/masken/48000_maskeninfo.unl
  4. 1
      src-modules/module/rpta/masken/48250_felderinfo.unl
  5. 1
      src-modules/module/rpta/masken/48250_masken_felder_bez.unl
  6. 2
      src-modules/module/rpta/masken/48250_maskeninfo.unl
  7. 2
      src-modules/module/rpta/schluesseltabellen/absolvierende_datenblatt_virtuell.sql
  8. 35
      src-modules/module/rpta/schluesseltabellen/fm_templates.unl
  9. 58
      src-modules/module/rpta/schluesseltabellen/rpta_column_layout_sos_stud_hssem1_repo_fuellen.sql
  10. 313
      src-modules/module/rpta/schluesseltabellen/rpta_column_layout_sos_stud_hssem1_repo_fuellen_generated.sql
  11. 11
      superx/xml/rpta_templates.xsl

2
src-modules/module/rpta/conf/rpta.xml

@ -615,6 +615,7 @@ @@ -615,6 +615,7 @@
<nativeaction sql="" scriptfile="$RPTA_PFAD/schluesseltabellen/rpta_column_layout_ba_ma_uebergang_nach_abschluss_fach_fuellen.sql" database="" />
<nativeaction sql="" scriptfile="$RPTA_PFAD/schluesseltabellen/rpta_column_layout_rpta_sos_lab_aggr_rsz_2_fuellen.sql" database="" />
<nativeaction sql="" scriptfile="$RPTA_PFAD/schluesseltabellen/rpta_column_layout__fin_einnahmen_dm_fuellen.sql" database="" />
<nativeaction sql="" scriptfile="$RPTA_PFAD/schluesseltabellen/rpta_column_layout_sos_stud_hssem1_repo_fuellen_generated.sql" database="" />
<nativeaction sql="" scriptfile="$RPTA_PFAD/schluesseltabellen/macro_masken_bez_fuellen.sql" database="" />
<nativeaction sql="" scriptfile="$RPTA_PFAD/schluesseltabellen/sx_repository_fuellen.sql" database=""/>
</action>
@ -685,6 +686,7 @@ @@ -685,6 +686,7 @@
<nativeaction sql="" scriptfile="$RPTA_PFAD/schluesseltabellen/rpta_column_layout_ba_ma_uebergang_nach_abschluss_fach_fuellen.sql" database="" />
<nativeaction sql="" scriptfile="$RPTA_PFAD/schluesseltabellen/rpta_column_layout_rpta_sos_lab_aggr_rsz_2_fuellen.sql" database="" />
<nativeaction sql="" scriptfile="$RPTA_PFAD/schluesseltabellen/rpta_column_layout__fin_einnahmen_dm_fuellen.sql" database="" />
<nativeaction sql="" scriptfile="$RPTA_PFAD/schluesseltabellen/rpta_column_layout_sos_stud_hssem1_repo_fuellen_generated.sql" database="" />
<nativeaction sql="" scriptfile="$RPTA_PFAD/schluesseltabellen/macro_masken_bez_fuellen.sql" database="" />
<nativeaction sql="" scriptfile="$RPTA_PFAD/schluesseltabellen/sx_repository_fuellen.sql" database=""/>
</action>

9
src-modules/module/rpta/hilfstabellen/fill_rpta_resultset.sql

@ -49,12 +49,17 @@ R.uniquename as rpta_name @@ -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) />
</#if>

10
src-modules/module/rpta/masken/48000_maskeninfo.unl

@ -167,11 +167,17 @@ limit 1;\ @@ -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} </#if>\
--damit Repo Variablen interpretiert werden:\
<#assign whereclauseTemplate= "<#assign whereclause=\\""+rpta_resultset.whereclause +"\\">"/>\
<#assign t2=whereclauseTemplate?interpret />\
<@t2/>\
\
${whereclause} \
</#if>\
and ${filter}\
;\
</#if>\

1
src-modules/module/rpta/masken/48250_felderinfo.unl

@ -24,6 +24,7 @@ and R.systeminfo_id=6)\ @@ -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^<<SQL>>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^<<SQL>>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^<<SQL>>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^<<SQL>> select id,caption from sx_repository where art='SVA_PERSONALKATEGORIE' and aktiv=1 and gueltig_seit<=date_val(<<Datum>>) and gueltig_bis>=date_val(<<Datum>>) order by sort1^hidden^^

1
src-modules/module/rpta/masken/48250_masken_felder_bez.unl

@ -9,6 +9,7 @@ @@ -9,6 +9,7 @@
48250^48258^
48250^48259^
48250^48260^
48250^48261^
48250^48262^
48250^48264^
48250^48267^

2
src-modules/module/rpta/masken/48250_maskeninfo.unl

@ -106,7 +106,7 @@ and ${filter}\ @@ -106,7 +106,7 @@ and ${filter}\
</#if>\
\
\
<@rpta_interpret_column_layout nonvirtualTableFilter=filter />\
<@rpta_interpret_column_layout nonvirtualTableFilter=filter />\
\
</#if> --wenn columns?has_content^--Freemarker Template\
XIL List\

2
src-modules/module/rpta/schluesseltabellen/absolvierende_datenblatt_virtuell.sql

@ -217,7 +217,7 @@ joinclause='${fact_table_source} @@ -217,7 +217,7 @@ joinclause='${fact_table_source}
<#foreach added_table in added_tables>
left outer join ${added_table.name} on (${added_table.joinclause})
</#foreach>',
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

35
src-modules/module/rpta/schluesseltabellen/fm_templates.unl

@ -288,8 +288,10 @@ drop TABLE tmp_rpta_column2layout;\ @@ -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;\ @@ -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}\
</#if>\
\
--damit Repo Variablen interpretiert werden:\
\
<#assign whereclauseTemplate= "<#assign whereclause=\\""+rpta_column_layout.whereclause +"\\">"/>\
<#assign t2=whereclauseTemplate?interpret />\
<@t2/>\
and ${whereclause} </#if>\
<#if basetable.is_virtual==0>\
and ${nonvirtualTableFilter}\
</#if>\
@ -323,7 +330,7 @@ drop TABLE tmp_rpta_column2layout;\ @@ -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},\
</#if>\
@ -334,9 +341,10 @@ drop TABLE tmp_rpta_column2layout;\ @@ -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;\ @@ -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) />\
</#if>\
<@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 @@ -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}\ @@ -981,4 +990,14 @@ ${selectclause}\
<#else>\
${selectclause}${format_sql}\
</#if>\
</#macro>^Makros zum Umgang mit Spaltenlayouts^ ^1^
</#macro>\
\
<#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 "" /> </#if>\
</#function>^Makros zum Umgang mit Spaltenlayouts^ ^1^

58
src-modules/module/rpta/schluesseltabellen/rpta_column_layout_sos_stud_hssem1_repo_fuellen.sql

@ -0,0 +1,58 @@ @@ -0,0 +1,58 @@
--freemarker template
<#include "RPTA-Makros"/>
<sqlvars>
<sqlvar name="sos_stud_astat_exists">
select count(*) from rpta_resultset where uniquename='sos_stud_astat';
</sqlvar>
</sqlvars>
<#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 />

313
src-modules/module/rpta/schluesseltabellen/rpta_column_layout_sos_stud_hssem1_repo_fuellen_generated.sql

@ -0,0 +1,313 @@ @@ -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;

11
superx/xml/rpta_templates.xsl

@ -29,6 +29,7 @@ xmlns="http://jasperreports.sourceforge.net/jasperreports"> @@ -29,6 +29,7 @@ xmlns="http://jasperreports.sourceforge.net/jasperreports">
<xsl:param name="defaultdataadapter" />
<xsl:param name="groupBy" />
<xsl:param name="groupLayout" select="'rpta_groupLayout.xml'"/>
<xsl:param name="showPageFooter" select="'true'"/>
<xsl:variable name="isMacroReport" select="/ergebnisse/@isMakro" />
<!-- bei Excel Erzeugung wird Paginierung ausgeschaltet:-->
<xsl:variable name="runTimePagination">
@ -262,10 +263,12 @@ and not(starts-with(f_name,'next')) ]"> @@ -262,10 +263,12 @@ and not(starts-with(f_name,'next')) ]">
</xsl:for-each>
</detail>
<xsl:call-template name="pageFooter">
<xsl:with-param name="seitenbreite" select="$seitenbreite" />
</xsl:call-template>
<xsl:if test="$showPageFooter='true'">
<xsl:call-template name="pageFooter">
<xsl:with-param name="seitenbreite" select="$seitenbreite" />
</xsl:call-template>
</xsl:if>
</jasperReport>
</xsl:template>

Loading…
Cancel
Save