diff --git a/src-modules/module/viz/conf/viz.xml b/src-modules/module/viz/conf/viz.xml
index bdc62c1..cc3bbe7 100644
--- a/src-modules/module/viz/conf/viz.xml
+++ b/src-modules/module/viz/conf/viz.xml
@@ -438,6 +438,12 @@ parent="Visualisierungen">Abfragen zur Administration von Visualisierungen $VIZ_PFAD/masken
+
+
+
+ $VIZ_PFAD/masken
+
+
@@ -554,6 +560,7 @@ parent="Visualisierungen">Abfragen zur Administration von Visualisierungen
+
@@ -631,6 +638,7 @@ parent="Visualisierungen">Abfragen zur Administration von Visualisierungen
+
diff --git a/src-modules/module/viz/masken/44600_felderinfo.unl b/src-modules/module/viz/masken/44600_felderinfo.unl
new file mode 100644
index 0000000..2346fda
--- /dev/null
+++ b/src-modules/module/viz/masken/44600_felderinfo.unl
@@ -0,0 +1,29 @@
+44600^Spaltenlayout^3000^350^-1^140^180^1^char^30^1^1^<>SELECT uniquename,\
+ caption\
+FROM rpta_column_layout \
+where resultset_id in (select R.tid from rpta_resultset R where R.uniquename in ('sos_stud_astat')\
+and R.systeminfo_id=7)\
+and uniquename in ('sos_stud_hzb_bland')\
+order by sortnr, caption\
+ ;^^<>SELECT uniquename,\
+ caption\
+FROM rpta_column_layout \
+where resultset_id in (select R.tid from rpta_resultset R where R.uniquename in ('sos_stud_astat')\
+and R.systeminfo_id=7)\
+and uniquename in ('sos_stud_hzb_bland')\
+order by sortnr, caption limit 1\
+ ;^
+44601^Seit Semester^10^0^0^140^80^1^integer^30^0^1^<> select tid, eintrag from semester order by tid DESC;^ ^<> select tid,eintrag from semester where today() between sem_beginn and sem_ende;^
+44602^Fächer^30^0^0^130^200^6^char^1000^0^12^<> select tid,name,sortnr from sichten where art='Fächer-Sicht' order by 3,2;^ ^ ^
+44603^Abschluss^40^0^0^100^200^3^char^1500^0^1^<> select apnr, druck from cifx where key=35 order by 2;^ ^ ^
+44604^bis Fachsemester^1000^300^-1^200^100^1^integer^30^0^13^^ ^ ^
+44605^Grafik^4000^300^-1^170^150^1^char^30^0^1^<> select uniquename, caption from viz_chart where maskeninfo_id=44280 order by 2;^^<> select uniquename, caption from viz_chart where maskeninfo_id=44280 order by 2 limit 1;^
+44606^Hochschulzugangsberechtigung^120^300^-1^200^200^1^sql^30^0^1^hs_zugangsber^apnr, eintrag^ ^
+44607^Bis Semester^20^350^-1^140^80^1^integer^30^0^1^<> select tid, eintrag from semester order by tid DESC;^ ^<> select tid,eintrag from semester where today() between sem_beginn and sem_ende;^
+44608^Staatsangehörigkeit^150^0^0^140^150^10^char^30^0^12^<> select tid,name,sortnr from sichten where art='SOS-Staaten-Sicht' order by 3,2;^ ^ ^
+44609^Studiengang^25^0^0^140^150^50^char^1000^0^12^<> select tid,name,sortnr from sichten where art in ('SOS-Kostenstellen-Sicht', 'SOS-Studiengang-Sicht') order by 3,2;^ ^ ^
+44610^tablestylesheet^150^0^0^100^100^1^char^255^1^1^<> select filename,caption from sx_stylesheets S, sx_mask_style M where S.tid=M.stylesheet_id and M.maskeninfo_id=44600 order by ord^ ^<> select filename,caption from sx_stylesheets S, sx_mask_style M where S.tid=M.stylesheet_id and M.maskeninfo_id=44600 order by ord limit 1^
+44611^Stichtag^23^330^-1^130^100^1^sql^30^1^1^<> select tid, name from sos_stichtag where stichtagsart='Studierende';^ ^<> select tid, name from sos_stichtag where stichtagsart='Studierende' and appl_key='0';^
+44612^Hörerstatus^200^330^-1^140^150^1^sql^30^0^1^<> select apnr, eintrag from hoererstatus order by 2^apnr, eintrag^<> select apnr, eintrag from hoererstatus where eintrag='alle';^
+44618^Köpfe oder Fälle ?^0^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';^
+44622^Geschlecht^110^0^0^140^80^1^integer^30^0^1^<> SELECT apnr,druck FROM cif where key = 9003 and apnr between 1 and 4 order by 1;^ ^ ^
diff --git a/src-modules/module/viz/masken/44600_maske_system_bez.unl b/src-modules/module/viz/masken/44600_maske_system_bez.unl
new file mode 100644
index 0000000..389da74
--- /dev/null
+++ b/src-modules/module/viz/masken/44600_maske_system_bez.unl
@@ -0,0 +1 @@
+44600^7^
diff --git a/src-modules/module/viz/masken/44600_masken_felder_bez.unl b/src-modules/module/viz/masken/44600_masken_felder_bez.unl
new file mode 100644
index 0000000..5804920
--- /dev/null
+++ b/src-modules/module/viz/masken/44600_masken_felder_bez.unl
@@ -0,0 +1,15 @@
+44600^44600^
+44600^44601^
+44600^44602^
+44600^44603^
+44600^44604^
+44600^44605^
+44600^44606^
+44600^44607^
+44600^44608^
+44600^44609^
+44600^44610^
+44600^44611^
+44600^44612^
+44600^44618^
+44600^44622^
diff --git a/src-modules/module/viz/masken/44600_maskeninfo.unl b/src-modules/module/viz/masken/44600_maskeninfo.unl
new file mode 100644
index 0000000..58fd49e
--- /dev/null
+++ b/src-modules/module/viz/masken/44600_maskeninfo.unl
@@ -0,0 +1 @@
+44600^Studierende nach Region^select select_stmt from maskeninfo where tid=45000^select xil_proplist from maskeninfo where tid=45000^Studienfach^Anzahl bzw. Anteil^Ausgabe der Studierenden nach Landkreis/Bundesland^select cleanup_stmt from maskeninfo where tid=45000^^2^850^540^^1^<>SELECT description FROM rpta_column_layout where tid=<>;^
diff --git a/src-modules/module/viz/masken/44600_sachgeb_maske_bez.unl b/src-modules/module/viz/masken/44600_sachgeb_maske_bez.unl
new file mode 100644
index 0000000..9f2d864
--- /dev/null
+++ b/src-modules/module/viz/masken/44600_sachgeb_maske_bez.unl
@@ -0,0 +1 @@
+16^44600^
diff --git a/src-modules/module/viz/schluesseltabellen/macro_masken_bez_fuellen.sql b/src-modules/module/viz/schluesseltabellen/macro_masken_bez_fuellen.sql
index 6bdcc6d..25102cc 100644
--- a/src-modules/module/viz/schluesseltabellen/macro_masken_bez_fuellen.sql
+++ b/src-modules/module/viz/schluesseltabellen/macro_masken_bez_fuellen.sql
@@ -22,7 +22,7 @@
{"makro":"44190", "tid":"44570", "sortnr":"1"},
{"makro":"44190", "tid":"44220", "sortnr":"10"},
{"makro":"44190", "tid":"44280", "sortnr":"20"},
-{"makro":"44190", "tid":"44280", "sortnr":"30"}
+{"makro":"44190", "tid":"44600", "sortnr":"30"}
] />
@@ -107,8 +107,7 @@
{"makro":"44190", "sortnr":"20", "feldname":"tablestylesheet", "value":"tabelle_html_datenblatt.xsl"},
{"makro":"44190", "sortnr":"30", "feldname":"Köpfe oder Fälle ?", "value":"studiengang_nr = 1 and fach_nr = 1"},
-{"makro":"44190", "sortnr":"30", "feldname":"Spaltenlayout", "value":"sos_stud_fak"},
-{"makro":"44190", "sortnr":"30", "feldname":"Grafik", "value":"STUDANF_FAK_PIE"},
+{"makro":"44190", "sortnr":"30", "feldname":"Spaltenlayout", "value":"sos_stud_hzb_bland"},
{"makro":"44190", "sortnr":"30", "feldname":"bis Fachsemester", "value":"1"},
{"makro":"44190", "sortnr":"30", "feldname":"tablestylesheet", "value":"tabelle_html_datenblatt.xsl"}
diff --git a/src-modules/module/viz/schluesseltabellen/rpta_column_layout_sos_stud_region_fuellen.sql b/src-modules/module/viz/schluesseltabellen/rpta_column_layout_sos_stud_region_fuellen.sql
new file mode 100644
index 0000000..1128879
--- /dev/null
+++ b/src-modules/module/viz/schluesseltabellen/rpta_column_layout_sos_stud_region_fuellen.sql
@@ -0,0 +1,246 @@
+--freemarker template
+
+
+select count(*) from systeminfo where tid=330;
+
+
+<#assign rpta_column_layout =
+{"uniquename":"sos_stud_hzb_bland",
+"caption":"Studierende nach HZB-Bundesland",
+"rpta_resultset":"sos_stud_astat",
+"whereclause":"",
+"description":"Studierende nach HZB-Bundesland"
+}
+ />
+
+<#assign rpta_columns = [
+{"uniquename":"hzb_bland",
+"caption":"Bundesland (HZB)",
+"srcfieldname":"",
+"targetfieldname":"hzb_bland",
+"column_type":"lookupColumn",
+"col_function":"select B.druck from sos_hzb_wohnsitz W, sos_k_bland B where W.bland=B.apnr and W.astat=hzbkfz",
+"is_visible":"1",
+"format_code":"",
+"visible_size":"5",
+"is_aggregate":"0",
+"description":"Bundesland (HZB)"
+},
+{"uniquename":"summe",
+"caption":"Anzahl der Studierenden",
+"srcfieldname":"summe",
+"column_type":"physicalColumn",
+"col_function":"sum",
+"is_visible":"1",
+"visible_size":"5",
+"is_aggregate":"1",
+"description":"Summe der Studierenden"
+}
+]
+ />
+
+<#if rpta_installed==1>
+ ---ab hier nicht mehr ändern:
+
+CREATE temp TABLE tmp_rpta_column
+(
+ uniquename varchar(255) NOT NULL,
+ caption 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
+);
+
+CREATE temp TABLE tmp_rpta_column_layout
+(
+ uniquename varchar(255) NOT NULL,
+ caption varchar(255),
+ resultset_id integer,
+ whereclause text,
+ description text
+);
+
+insert into tmp_rpta_column_layout(
+resultset_id,
+uniquename,
+caption,
+whereclause,
+ description
+)
+select tid,
+'${rpta_column_layout.uniquename}',
+'${rpta_column_layout.caption}',
+'${rpta_column_layout.whereclause}',
+'${rpta_column_layout.description}'
+FROM rpta_resultset
+where uniquename='${rpta_column_layout.rpta_resultset}';
+
+<#assign sortnr=0 />
+<#foreach column in rpta_columns>
+<#assign sortnr=sortnr +1 />
+
+INSERT INTO tmp_rpta_column
+(resultset_id,
+ uniquename,
+ caption,
+ srcfieldname,
+ targetfieldname,
+ column_type,
+ col_function,
+ is_visible,
+ visible_size,
+ is_aggregate,
+ sortnr,
+ description
+ )
+select R.tid,
+'${column.uniquename}',
+'${column.caption}',
+'${column.srcfieldname}',
+<#if !column.targetfieldname?exists || column.targetfieldname=="">null::varchar <#else>'${column.targetfieldname}' #if>,
+T.tid as column_type,
+'${column.col_function}',
+${column.is_visible},
+${column.visible_size},
+${column.is_aggregate},
+${sortnr*10},
+'${column.description}'
+FROM rpta_resultset R, rpta_column_type T
+where R.uniquename='${rpta_column_layout.rpta_resultset}'
+and T.uniquename='${column.column_type}';
+
+#foreach>
+
+
+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='${rpta_column_layout.rpta_resultset}'
+and L.uniquename='${rpta_column_layout.uniquename}'
+)
+;
+
+select * into temp tmp_rpta_column_layout_target
+from rpta_column_layout
+where resultset_id in (select tid
+FROM rpta_resultset
+where uniquename='${rpta_column_layout.rpta_resultset}')
+and uniquename in (select uniquename from tmp_rpta_column_layout)
+;
+
+insert into rpta_column_layout
+(uniquename,
+ caption,
+ resultset_id,
+ whereclause,
+ description)
+ select uniquename,
+ caption,
+ resultset_id,
+ whereclause,
+ description
+FROM tmp_rpta_column_layout T
+where 0=(select count(*) from tmp_rpta_column_layout_target T2
+where T.uniquename=T2.uniquename);
+
+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='${rpta_column_layout.rpta_resultset}'
+and L.uniquename='${rpta_column_layout.uniquename}'
+)
+;
+
+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)
+select C.tid as column_id,
+ L.tid as layout_id,
+ T.sortnr,
+ T.is_visible,
+ T.visible_size,
+ T.caption,
+ T.description
+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='${rpta_column_layout.uniquename}'
+and L.resultset_id=T.resultset_id
+ ;
+drop table tmp_rpta_column;
+drop TABLE tmp_rpta_column_layout;
+drop TABLE tmp_rpta_column2layout;
+#if>
diff --git a/src-modules/module/viz/schluesseltabellen/sx_stylesheets_einfuegen.sql b/src-modules/module/viz/schluesseltabellen/sx_stylesheets_einfuegen.sql
index 54b9696..3480b9d 100755
--- a/src-modules/module/viz/schluesseltabellen/sx_stylesheets_einfuegen.sql
+++ b/src-modules/module/viz/schluesseltabellen/sx_stylesheets_einfuegen.sql
@@ -16,6 +16,7 @@
{"mask":"44190", "filename":"tabelle_html_datenblatt.xsl", "ord":"20"},
{"mask":"44190", "filename":"viz_html_chart_viewer_grid.xsl", "ord":"1"},
{"mask":"44190", "filename":"viz_html_chart_viewer_mask.xsl", "ord":"30"},
+{"mask":"44190", "filename":"viz_html_chart_viewer_echart.xsl", "ord":"40"},
{"mask":"44220", "filename":"tabelle_html_datenblatt.xsl", "ord":"20"},
{"mask":"44220", "filename":"viz_html_chart_viewer.xsl", "ord":"1"},
{"mask":"44220", "filename":"viz_html_chart_viewer_mask.xsl", "ord":"30"},
@@ -32,7 +33,8 @@
{"mask":"44250", "filename":"viz_html_chart_viewer_mask.xsl", "ord":"30"},
{"mask":"44570", "filename":"tabelle_html_datenblatt.xsl", "ord":"20"},
{"mask":"44570", "filename":"viz_html_chart_viewer.xsl", "ord":"1"},
-{"mask":"44570", "filename":"viz_html_chart_viewer_mask.xsl", "ord":"30"}
+{"mask":"44570", "filename":"viz_html_chart_viewer_mask.xsl", "ord":"30"},
+{"mask":"44600", "filename":"tabelle_html_datenblatt.xsl", "ord":"1"}
] />
<#assign stylesheet = [
@@ -45,6 +47,7 @@
},
{"filename":"viz_html_chart_viewer_grid.xsl", "caption":"Dashboard", "description":"Viewer-Stylesheet für VIZ Charts in einer Kachelansicht ", "relation":"table", "contenttype":"text/html","is_generic":"0"},
{"filename":"viz_html_chart_viewer_mask.xsl", "caption":"Diagramm + Maskenfelder", "description":"Viewer-Stylesheet für VIZ Charts mit Maskenfeldern", "relation":"table", "contenttype":"text/html","is_generic":"0"},
+{"filename":"viz_html_chart_viewer_echart.xsl", "caption":"Diagramme (Echarts)", "description":"Viewer-Stylesheet für VIZ Charts mit Maskenfeldern", "relation":"table", "contenttype":"text/html","is_generic":"0"},
{"filename":"tabelle_html_viz.xsl", "caption":"Tabelle + Visualisierung", "description":"Viewer-Stylesheet für Tabellen und VIZ Charts", "relation":"table", "contenttype":"text/html","is_generic":"0"},
{"filename":"viz_html_chart_viewer.xsl", "caption":"Diagramm-Viewer (einfach)", "description":"Viewer-Stylesheet für VIZ Charts in einer Einzelansicht ", "relation":"table", "contenttype":"text/html","is_generic":"0"},
{"filename":"viz_html_chart_viewer_mask_and_table.xsl", "caption":"Diagramm, Tabelle + Maskenfelder", "description":"Viewer-Stylesheet für VIZ Charts mit Tabelle und Maskenfeldern", "relation":"table", "contenttype":"text/html","is_generic":"0"}
diff --git a/superx/xml/viz_html_chart_viewer_grid_hms.xsl b/superx/xml/viz_html_chart_viewer_grid_hms.xsl
index e1d5c2d..46b2f16 100644
--- a/superx/xml/viz_html_chart_viewer_grid_hms.xsl
+++ b/superx/xml/viz_html_chart_viewer_grid_hms.xsl
@@ -100,7 +100,7 @@ xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:HtmlUtils="de.superx.util
-
+