Compare commits

...

10 Commits

  1. 2
      rsync_to_superx.x
  2. 2
      src-modules/module/qa/conf/includes.txt
  3. 126
      src-modules/module/qa/conf/qa.xml
  4. 12
      src-modules/module/qa/datentabellen/qa_dbtest_ausfuehren.sql
  5. 3
      src-modules/module/qa/datentabellen/vacuum_pg.sql
  6. 351
      src-modules/module/qa/hilfstabellen/qa_sos_stg_aggr_astat_fuellen.sql
  7. 63
      src-modules/module/qa/hilfstabellen/qa_sos_stg_aggr_int_fuellen.sql
  8. 1
      src-modules/module/qa/masken/37020_felderinfo.unl
  9. 1
      src-modules/module/qa/masken/37020_masken_felder_bez.unl
  10. 5
      src-modules/module/qa/masken/37020_maskeninfo.unl
  11. 14
      src-modules/module/qa/masken/37060_felderinfo.unl
  12. 337
      src-modules/module/qa/masken/37060_maskeninfo.unl
  13. 11
      src-modules/module/qa/masken/37180_felderinfo.unl
  14. 1
      src-modules/module/qa/masken/37180_maske_system_bez.unl
  15. 9
      src-modules/module/qa/masken/37180_masken_felder_bez.unl
  16. 75
      src-modules/module/qa/masken/37180_maskeninfo.unl
  17. 1
      src-modules/module/qa/masken/37180_sachgeb_maske_bez.unl
  18. 2
      src-modules/module/qa/qa_mask_execution_loop.x
  19. 141
      src-modules/module/qa/schluesseltabellen/qa_tablecomp_profile_sos_stud_astat_fuellen.sql
  20. 141
      src-modules/module/qa/schluesseltabellen/qa_tablecomp_profile_sos_stud_astat_nach_fach_abschluss_s0_fuellen.sql
  21. 141
      src-modules/module/qa/schluesseltabellen/qa_tablecomp_profile_sos_stud_astat_nach_fach_abschluss_s1_fuellen.sql
  22. 4
      src-modules/module/qa/upgrade/qa_pre_upgrade_ids.sql
  23. 4
      src-modules/module/qa/upgrade/qa_pre_upgrade_pg.sql
  24. 5
      src-modules/module/qa/upgrade/qa_upgrade_man.sql
  25. 11
      superx/WEB-INF/conf/edustore/db/bin/qa_tc_execution_mail.x
  26. BIN
      superx/WEB-INF/lib_ext/superx5.0_fuer_h1.jar
  27. 68
      superx/WEB-INF/reports/qa_table.jrtx
  28. 141
      superx/WEB-INF/reports/tabelle_37020_mit_summary.jrxml

2
rsync_to_superx.x

@ -1,7 +1,7 @@ @@ -1,7 +1,7 @@
#!/bin/bash
#Synchronisierung webapp zum Zielpfad
ant -DMODULE_PATH=$MEINMODUL_PFAD -DBASE_DIR=. -DMODULE=meinmodul all
ant -DMODULE_PATH=$QA_PFAD -DBASE_DIR=. -DMODULE=qa all

2
src-modules/module/qa/conf/includes.txt

@ -3,5 +3,7 @@ WEB-INF/conf/edustore/db/bin/SQL_ENV_qa.sam @@ -3,5 +3,7 @@ WEB-INF/conf/edustore/db/bin/SQL_ENV_qa.sam
WEB-INF/conf/edustore/db/bin/qa_mask_execution.x
WEB-INF/conf/edustore/db/bin/qa_tc_execution_mail.x
WEB-INF/lib/superx-qa.jar
WEB-INF/lib_ext/superx5.0_fuer_h1.jar
WEB-INF/reports/qa_table.jrtx
WEB-INF/reports/tabelle_37020_mit_summary.jrxml
xml/tabelle_html_qa.xsl

126
src-modules/module/qa/conf/qa.xml

@ -1,6 +1,6 @@ @@ -1,6 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<!--<!DOCTYPE module SYSTEM "../../../conf/superx-module.dtd"> -->
<module name="qa" version="0.6" sachgebiet_id="260"
<module name="qa" version="0.7" sachgebiet_id="260"
sachgebiet="Qualitätssicherung" systeminfo_id="260"
system="Qualitätssicherung" thema="Qualitätssicherung" thema_parent="Abfragen">
<database name="superx" version="3.0" system="superx">
@ -95,9 +95,11 @@ notnull="false" currentlyUsed="false"> @@ -95,9 +95,11 @@ notnull="false" currentlyUsed="false">
<comment></comment>
</column>
<column name="uniquename" type="VARCHAR" size="255" default="" description="Schlüssel"
notnull="false" >
notnull="true" >
<comment></comment>
</column>
<column name="created_at" type ="DATE" size ="5" default ="" notnull ="false" description="Erzeugt am"/>
</columns>
<primaryKeys>
<rs>
@ -110,6 +112,10 @@ notnull="false" > @@ -110,6 +112,10 @@ notnull="false" >
<fld name='pk_name'>pk_qa_mask_execution1</fld>
</row>
</rs></primaryKeys>
<indexes><index name="ix_qa_mask_execution_uniquename" type="unique">
<index-column name="uniquename"/>
</index>
</indexes>
<!-- TODO indices-->
</table>
<table name="qa_mask_field_sel" thema="Qualitätssicherung" typ="Schlüsseltabelle" >
@ -397,6 +403,14 @@ notnull="true"> @@ -397,6 +403,14 @@ notnull="true">
<column name="systeminfo_id" type="INTEGER" size="100" default="" notnull="false" description="Komponente">
<comment></comment>
</column>
<column name="table_1_filter" type="TEXT" size="255" default="" description="Tabelle 1 Filter"
notnull="false" >
<comment>Zusätzlicher Filter für Tabelle 1</comment>
</column>
<column name="table_2_filter" type="TEXT" size="255" default="" description="Tabelle 2 Filter"
notnull="false" >
<comment>Zusätzlicher Filter für Tabelle 2</comment>
</column>
</columns>
<primaryKeys>
<rs>
@ -472,6 +486,9 @@ notnull="false"> @@ -472,6 +486,9 @@ notnull="false">
<column name="name" type="varchar" size="255" default="" notnull="true" description="Name">
<comment>Feldname</comment>
</column>
<column name="caption" type="varchar" size="255" default="" notnull="false" description="Feldbezeichnung">
<comment>Feldbezeichnung</comment>
</column>
<column name="priority" type="CHAR" size="10" default="" notnull="false" description="Priorität">
<comment></comment>
</column>
@ -500,12 +517,15 @@ notnull="false"> @@ -500,12 +517,15 @@ notnull="false">
<comment>ID</comment>
</column>
<column name="qa_tablecomp_profile_id" type="INTEGER" size="" default="" description="Profil"
notnull="false">
notnull="false" isKey="true">
<comment></comment>
</column>
<column name="fieldname" type="varchar" size="255" default="" notnull="true" description="Name">
<comment>Interner Name</comment>
</column>
<column name="fieldcaption" type="varchar" size="255" default="" notnull="false" description="Bezeichnung">
<comment>Interner Name</comment>
</column>
</columns>
<primaryKeys>
<rs>
@ -533,6 +553,8 @@ notnull="false"> @@ -533,6 +553,8 @@ notnull="false">
<column name="fieldname" type="varchar" size="255" default="" notnull="true" description="Name">
<comment>Interner Name</comment>
</column>
<column name="fieldcaption" type="varchar" size="255" default="" notnull="false" description="Bezeichnung">
</column>
</columns>
<primaryKeys>
<rs>
@ -640,6 +662,7 @@ notnull="false"> @@ -640,6 +662,7 @@ notnull="false">
<column name="whereclause" type ="TEXT" size ="2147483647" default ="" notnull ="false" description="Bedingung"><comment>formuliert als SQL-where-Ausdruck</comment></column>
<column name="description" type ="TEXT" size ="2147483647" default ="" notnull ="false" description="Beschreibung"><comment></comment></column>
<column name="active" type ="SMALLINT" size ="5" default ="1" notnull ="false" description="Aktiv"/>
<column name="created_at" type ="DATE" size ="5" default ="" notnull ="false" description="Erzeugt am"/>
</columns>
<indexes>
<index name="ix_qa_dbtest_id" type="unique">
@ -740,7 +763,78 @@ notnull="false"> @@ -740,7 +763,78 @@ notnull="false">
<privileges><rs>
</rs></privileges>
</table>
<table name="qa_sos_stg_aggr_astat" caption="Amtl. Studierendenstatistik für QA" thema="Qualitätssicherung" typ="Hilfstabelle">
<columns><column name="hs_nr" type ="INTEGER" size ="10" default ="" notnull ="false" />
<column name="studiengang_nr" type ="SMALLINT" size ="5" default ="" notnull ="false" />
<column name="fach_nr" type ="SMALLINT" size ="5" default ="" notnull ="false" />
<column name="matrikel_nr" type ="INTEGER" size ="10" default ="" notnull ="false" />
<column name="geschlecht" type ="SMALLINT" size ="5" default ="" notnull ="false" />
<column name="ca12_staat" type ="SMALLINT" size ="5" default ="" notnull ="false" />
<column name="sem_rueck_beur_ein" type ="SMALLINT" size ="5" default ="" notnull ="false" />
<column name="stg" type ="CHAR" size ="4" default ="" notnull ="false" />
<column name="abschluss" type ="CHAR" size ="2" default ="" notnull ="false" />
<column name="fgr" type ="CHAR" size ="10" default ="" notnull ="false" />
<column name="abgrp" type ="CHAR" size ="255" default ="" notnull ="false" />
<column name="regel" type ="SMALLINT" size ="5" default ="" notnull ="false" />
<column name="kz_rueck_beur_ein" type ="SMALLINT" size ="5" default ="" notnull ="false" />
<column name="fach_sem_zahl" type ="SMALLINT" size ="5" default ="" notnull ="false" />
<column name="hssem" type ="SMALLINT" size ="5" default ="" notnull ="false" />
<column name="stort" type ="CHAR" size ="10" default ="" notnull ="false" />
<column name="stuart" type ="CHAR" size ="10" default ="" notnull ="false" />
<column name="stufrm" type ="CHAR" size ="10" default ="" notnull ="false" />
<column name="hzbart_astat" type ="CHAR" size ="10" default ="" notnull ="false" />
<column name="hzbkfzkz" type ="CHAR" size ="2" default ="" notnull ="false" />
<column name="hrst" type ="INTEGER" size ="10" default ="" notnull ="false" />
<column name="letzte_pruefung_stort" type ="CHAR" size ="10" default ="" notnull ="false" />
<column name="letzte_pruefung_staat" type ="SMALLINT" size ="5" default ="" notnull ="false" />
<column name="letzte_pruefung_abschluss" type ="CHAR" size ="2" default ="" notnull ="false" />
<column name="letzte_pruefung_ergebnis" type ="SMALLINT" size ="5" default ="" notnull ="false" />
<column name="vorletzte_pruefung_stort" type ="CHAR" size ="10" default ="" notnull ="false" />
<column name="vorletzte_pruefung_staat" type ="SMALLINT" size ="5" default ="" notnull ="false" />
<column name="vorletzte_pruefung_abschluss" type ="CHAR" size ="2" default ="" notnull ="false" />
<column name="vorletzte_pruefung_ergebnis" type ="SMALLINT" size ="5" default ="" notnull ="false" />
<column name="datum" type ="DATE" size ="13" default ="" notnull ="false" />
<column name="summe" type ="INTEGER" size ="10" default ="" notnull ="false" />
</columns>
<indexes></indexes>
<primaryKeys><rs>
</rs></primaryKeys>
<foreignKeys><rs>
</rs></foreignKeys>
<importedKeys><rs>
</rs></importedKeys>
<privileges><rs>
</rs></privileges>
</table>
<table name="qa_sos_stg_aggr_int" caption="Interne Studierendenstatistik für QA" thema="Qualitätssicherung" typ="Hilfstabelle">
<columns><column name="ca12_staat" type ="SMALLINT" size ="5" default ="" notnull ="false" />
<column name="geschlecht" type ="SMALLINT" size ="5" default ="" notnull ="false" />
<column name="hrst" type ="INTEGER" size ="10" default ="" notnull ="false" />
<column name="studiengang_nr" type ="SMALLINT" size ="5" default ="" notnull ="false" />
<column name="fach_nr" type ="SMALLINT" size ="5" default ="" notnull ="false" />
<column name="fach_sem_zahl" type ="SMALLINT" size ="5" default ="" notnull ="false" />
<column name="sem_rueck_beur_ein" type ="SMALLINT" size ="5" default ="" notnull ="false" />
<column name="kz_rueck_beur_ein" type ="SMALLINT" size ="5" default ="" notnull ="false" />
<column name="hssem" type ="SMALLINT" size ="5" default ="" notnull ="false" />
<column name="stuart" type ="CHAR" size ="10" default ="" notnull ="false" />
<column name="stutyp" type ="CHAR" size ="10" default ="" notnull ="false" />
<column name="stufrm" type ="CHAR" size ="10" default ="" notnull ="false" />
<column name="summe" type ="NUMERIC" size ="(19,6)" default ="" notnull ="false" />
<column name="matrikel_nr" type ="INTEGER" size ="10" default ="" notnull ="false" />
<column name="stg" type ="CHAR" size ="10" default ="" notnull ="false" />
<column name="abschluss" type ="CHAR" size ="10" default ="" notnull ="false" />
<column name="stichtag" type ="INTEGER" size ="10" default ="" notnull ="false" />
</columns>
<indexes></indexes>
<primaryKeys><rs>
</rs></primaryKeys>
<foreignKeys><rs>
</rs></foreignKeys>
<importedKeys><rs>
</rs></importedKeys>
<privileges><rs>
</rs></privileges>
</table>
<views>
<view name="qa_k_priority" version="0.6">
<description>View PO-Version</description>
@ -810,6 +904,12 @@ parent="Qualitätssicherung">Abfragen zur Administration</thema> @@ -810,6 +904,12 @@ parent="Qualitätssicherung">Abfragen zur Administration</thema>
<path>$QA_PFAD/masken</path>
</src>
</maske>
<maske tid="37180" name="Tabellen-Abgleich Differenzen" thema="Administration Qualitätssicherung">
<description>Detailabfrage zur Anzeige von Differenzen</description>
<src>
<path>$QA_PFAD/masken</path>
</src>
</maske>
</masken>
<data-integrity>
<!-- qa_mask_execution -->
@ -975,6 +1075,10 @@ format="%s"> @@ -975,6 +1075,10 @@ format="%s">
<!-- ********************* Liste der ETL-Prozesse ************************** -->
<etl>
<etl-step name="Load" type="load">
<action>
</action>
</etl-step>
<etl-step name="Transformation" type="trans">
<action>
<nativeaction sql="" scriptfile="$QA_PFAD/schluesseltabellen/qa_mask_execution_update.sql"
@ -987,7 +1091,14 @@ format="%s"> @@ -987,7 +1091,14 @@ format="%s">
database=""/>
<nativeaction sql="update systeminfo set datum=today() where tid in (260);" scriptfile="" database=""/>
</action>
<action error="stop">
</etl-step>
<etl-step name="Aggregation" type="aggr">
<action>
<nativeaction sql="" scriptfile="$QA_PFAD/hilfstabellen/qa_sos_stg_aggr_astat_fuellen.sql"
database=""/>
<nativeaction sql="" scriptfile="$QA_PFAD/hilfstabellen/qa_sos_stg_aggr_int_fuellen.sql"
database=""/>
<nativeaction sql="" scriptfile="$QA_PFAD/datentabellen/vacuum_pg.sql"
database="POSTGRES"/>
</action>
@ -1000,7 +1111,8 @@ format="%s"> @@ -1000,7 +1111,8 @@ format="%s">
<nativeaction sql="" scriptfile="$QA_PFAD/schluesseltabellen/sx_jobs_fuellen.sql" database=""/>
<nativeaction sql="" scriptfile="$QA_PFAD/schluesseltabellen/sx_stylesheets_einfuegen.sql" database=""/>
<nativeaction sql="" scriptfile="$QA_PFAD/schluesseltabellen/sachgebiete_fuellen.sql" database=""/>
<!--<nativeaction sql="" scriptfile="$QA_PFAD/schluesseltabellen/qa_tablecomp_profile_sos_stud_astat_nach_fach_abschluss_s0_fuellen.sql" database=""/>-->
<nativeaction sql="" scriptfile="$QA_PFAD/schluesseltabellen/qa_tablecomp_profile_sos_stud_astat_nach_fach_abschluss_s1_fuellen.sql" database=""/>
</action>
</install-step>
</install>
@ -1012,6 +1124,8 @@ format="%s"> @@ -1012,6 +1124,8 @@ format="%s">
<nativeaction sql="" scriptfile="$QA_PFAD/schluesseltabellen/sx_jobs_fuellen.sql" database=""/>
<nativeaction sql="" scriptfile="$QA_PFAD/schluesseltabellen/sx_stylesheets_einfuegen.sql" database=""/>
<nativeaction sql="" scriptfile="$QA_PFAD/schluesseltabellen/sachgebiete_fuellen.sql" database=""/>
<!--<nativeaction sql="" scriptfile="$QA_PFAD/schluesseltabellen/qa_tablecomp_profile_sos_stud_astat_nach_fach_abschluss_s0_fuellen.sql" database=""/>-->
<nativeaction sql="" scriptfile="$QA_PFAD/schluesseltabellen/qa_tablecomp_profile_sos_stud_astat_nach_fach_abschluss_s1_fuellen.sql" database=""/>
<nativeaction sql="" scriptfile="$QA_PFAD/upgrade/qa_upgrade_man.sql" database=""/>
</action>

12
src-modules/module/qa/datentabellen/qa_dbtest_ausfuehren.sql

@ -95,6 +95,13 @@ select @@ -95,6 +95,13 @@ select
${dbtest_assertion.tid},
A.beginn,
now(),
<#if dbtest_assertion.def_col_value="">
--Test wenn Zielspalte leer sein soll:
case when T.${dbtest_assertion.def_col_name} is null or '' || T.${dbtest_assertion.def_col_name}=''
then 0
else 1 end
<#else>
case when T.${dbtest_assertion.def_col_name}=
<#if dbtest_assertion.def_col_function !="">
${dbtest_assertion.def_col_function}('${dbtest_assertion.def_col_value}')
@ -102,7 +109,10 @@ ${dbtest_assertion.def_col_function}('${dbtest_assertion.def_col_value}') @@ -102,7 +109,10 @@ ${dbtest_assertion.def_col_function}('${dbtest_assertion.def_col_value}')
'${dbtest_assertion.def_col_value}'
</#if>
then 0
else 1 end as result_code,
else 1 end
</#if>
as result_code,
T.${dbtest_assertion.def_col_name} as result_value
from tmp_anfang A left outer join tmp_rs T
on (A.dbtest_id=${dbtest_assertion.dbtest_id}

3
src-modules/module/qa/datentabellen/vacuum_pg.sql

@ -8,4 +8,5 @@ commit; @@ -8,4 +8,5 @@ commit;
vacuum qa_mask_execution_result;
vacuum qa_mask_execution_assert_result;
vacuum qa_sos_stg_aggr_int;
vacuum qa_sos_stg_aggr_astat;

351
src-modules/module/qa/hilfstabellen/qa_sos_stg_aggr_astat_fuellen.sql

@ -0,0 +1,351 @@ @@ -0,0 +1,351 @@
--(c) 2024 Daniel Quathamer
--freemarker template
<sqlvars>
<sqlvar name="sos_stg_aggr_exists">
select sp_table_exists('sos_stg_aggr') from xdummy
</sqlvar>
<sqlvar name="qa_tablecomp_profile_is_active"><![CDATA[
select 1 from xdummy where 0 < (select count(*) from qa_tablecomp_profile P where P.uniquename='sos_stud_astat_stg_abschluss_s1' and is_active=1)
union
select 0 from xdummy where 0 = (select count(*) from qa_tablecomp_profile P where P.uniquename='sos_stud_astat_stg_abschluss_s1' and is_active=1)
]]></sqlvar>
</sqlvars>
<#if qa_tablecomp_profile_is_active==1 && sos_stg_aggr_exists==1>
--zuerst bereinigen:es darf nur 2015er oder 2016er Lieferung geben.
--2016 hat Priorität:
create temp table tmp_sem
(
semester integer,
format integer
);
insert into tmp_sem
select distinct semester,2015
from kenn_sos_astat_2015
;
insert into tmp_sem
select distinct semester,2016
from kenn_sos_astat
;
insert into kenn_pruefrout (datum,tabelle_quelle,problem,aktion)
select distinct today(),'kenn_sos_astat'::char(18),'Semester '|| semester || ' liegt in 2015er und 2016er Format vor, 2015 wird gelöscht', 'Info'::char(10)
from kenn_sos_astat_2015
where semester in (select T.semester
from tmp_sem T
where T.format=2016) ;
delete from kenn_sos_astat_2015
where semester in (select T.semester
from tmp_sem T
where T.format=2016);
drop table tmp_sem;
--Unplausible Werte korrigieren:
update kenn_sos_astat set ef010=null where substring(ef010 from 1 for 1) not in ('0','1','2','3','4','5','6','7','8','9');
create temp table tmp_stg_aggr_astat(
hs_nr INTEGER ,
studiengang_nr SMALLINT ,
fach_nr SMALLINT ,
matrikel_nr integer,
geschlecht SMALLINT ,
ca12_staat SMALLINT ,
sem_rueck_beur_ein SMALLINT ,
stg CHAR(4) ,
sb char(19),
fgr char(10),
abschluss CHAR(2) ,
abschlussart char(10),
abgrp char(255),
regel SMALLINT ,
kz_rueck_beur_ein SMALLINT ,
fach_sem_zahl SMALLINT ,
hssem SMALLINT ,
kz_fach CHAR(1) ,
stort CHAR(10) ,
stuart CHAR(10) ,
stufrm CHAR(10) ,
hzbart_astat CHAR(10) ,
hzbkfzkz CHAR(2) ,
hrst integer ,
letzte_pruefung_stort CHAR(10) ,
letzte_pruefung_staat SMALLINT ,
letzte_pruefung_abschluss CHAR(2) ,
letzte_pruefung_ergebnis SMALLINT ,
vorletzte_pruefung_stort CHAR(10) ,
vorletzte_pruefung_staat SMALLINT ,
vorletzte_pruefung_abschluss CHAR(2) ,
vorletzte_pruefung_ergebnis SMALLINT ,
datum date ,
summe INTEGER
)
;
<#assign studiengang_nr_fach_nr = [
{"studiengang_nr":"1", "fach_nr":"1", "fach":"ef036","abschluss":"ef033u2","stufrm":"ef033u1", "regel":"ef035", "kz_rueck_beur_ein":"ef028", "fach_sem_zahl":"ef032","stuart":"ef030"},
{"studiengang_nr":"1", "fach_nr":"2", "fach":"ef037","abschluss":"ef033u2","stufrm":"ef033u1", "regel":"ef035", "kz_rueck_beur_ein":"ef028", "fach_sem_zahl":"ef032","stuart":"ef030"},
{"studiengang_nr":"1", "fach_nr":"3", "fach":"ef039","abschluss":"ef033u2","stufrm":"ef033u1", "regel":"ef035", "kz_rueck_beur_ein":"ef028", "fach_sem_zahl":"ef032","stuart":"ef030"},
{"studiengang_nr":"2", "fach_nr":"1", "fach":"ef052","abschluss":"ef049u2","stufrm":"ef049u1", "regel":"ef051", "kz_rueck_beur_ein":"ef044", "fach_sem_zahl":"ef048","stuart":"ef046"},
{"studiengang_nr":"2", "fach_nr":"2", "fach":"ef053","abschluss":"ef049u2","stufrm":"ef049u1", "regel":"ef051", "kz_rueck_beur_ein":"ef044", "fach_sem_zahl":"ef048","stuart":"ef046"},
{"studiengang_nr":"2", "fach_nr":"3", "fach":"ef055","abschluss":"ef049u2","stufrm":"ef049u1", "regel":"ef051", "kz_rueck_beur_ein":"ef044", "fach_sem_zahl":"ef048","stuart":"ef046"}
] />
<#assign studiengang_nr_fach_nr_2015 = [
{"studiengang_nr":"1", "fach_nr":"1", "fach":"ef032","abschluss":"ef031u2","stufrm":"ef031u1", "regel":"null::char(1)", "kz_rueck_beur_ein":"ef026", "fach_sem_zahl":"ef030","stuart":"ef028"},
{"studiengang_nr":"1", "fach_nr":"2", "fach":"ef034","abschluss":"ef031u2","stufrm":"ef031u1", "regel":"null::char(1)", "kz_rueck_beur_ein":"ef026", "fach_sem_zahl":"ef030","stuart":"ef028"},
{"studiengang_nr":"1", "fach_nr":"3", "fach":"ef036","abschluss":"ef031u2","stufrm":"ef031u1", "regel":"null::char(1)", "kz_rueck_beur_ein":"ef026", "fach_sem_zahl":"ef030","stuart":"ef028"},
{"studiengang_nr":"2", "fach_nr":"1", "fach":"ef047","abschluss":"ef046u2","stufrm":"ef046u1", "regel":"null::char(1)", "kz_rueck_beur_ein":"ef041", "fach_sem_zahl":"ef045","stuart":"ef043"},
{"studiengang_nr":"2", "fach_nr":"2", "fach":"ef049","abschluss":"ef046u2","stufrm":"ef046u1", "regel":"null::char(1)", "kz_rueck_beur_ein":"ef041", "fach_sem_zahl":"ef045","stuart":"ef043"},
{"studiengang_nr":"2", "fach_nr":"3", "fach":"ef050","abschluss":"ef046u2","stufrm":"ef046u1", "regel":"null::char(1)", "kz_rueck_beur_ein":"ef041", "fach_sem_zahl":"ef045","stuart":"ef043"}
] />
<#assign vorherige_pruefungen=[
{"art":"letzte", "pruefung_stort":"ef089", "pruefung_staat":"ef090", "pruefung_abschluss":"substring(ef091 from 2 for 2)", "pruefung_ergebnis":"ef097"},
{"art":"vorletzte", "pruefung_stort":"ef103", "pruefung_staat":"ef104", "pruefung_abschluss":"substring(ef105 from 2 for 2)", "pruefung_ergebnis":"ef111"}
] />
<#assign vorherige_pruefungen_2015=[
{"art":"letzte", "pruefung_stort":"null::char(1)", "pruefung_staat":"null::char(1)", "pruefung_abschluss":"ef091u2", "pruefung_ergebnis":"ef098"},
{"art":"vorletzte", "pruefung_stort":"null::char(1)", "pruefung_staat":"null::char(1)", "pruefung_abschluss":"ef100u2", "pruefung_ergebnis":"ef107"}
] />
<#foreach stgnr in studiengang_nr_fach_nr>
--${stgnr.studiengang_nr}. Studiengang, ${stgnr.fach_nr}. Fach:
insert into tmp_stg_aggr_astat(
hs_nr,
studiengang_nr,
fach_nr,
matrikel_nr,
geschlecht,
ca12_staat,
sem_rueck_beur_ein,
stg,
abschluss,
regel,
kz_rueck_beur_ein,
fach_sem_zahl,
hssem,
stort,
stuart,
stufrm,
hzbart_astat,
hzbkfzkz,
hrst,
<#if stgnr.studiengang_nr=="1" && stgnr.fach_nr=="1">
<#foreach vorherige_pruefung in vorherige_pruefungen>
${vorherige_pruefung.art}_pruefung_stort,
${vorherige_pruefung.art}_pruefung_staat,
${vorherige_pruefung.art}_pruefung_abschluss,
${vorherige_pruefung.art}_pruefung_ergebnis,
</#foreach>
</#if>
datum,
summe)
select
hs_nr,
${stgnr.studiengang_nr} as studiengang_nr,
${stgnr.fach_nr} as fach_nr,
val(ef006) as matrikel_nr,
val(ef007) as geschlecht,
val(ef010) as ca12_staat,
semester as sem_rueck_beur_ein,
${stgnr.fach} as stg,
${stgnr.abschluss} as abschluss,
val(${stgnr.regel}) as regel,
val(${stgnr.kz_rueck_beur_ein}) as kz_rueck_beur_ein,
val(${stgnr.fach_sem_zahl}) as fach_sem_zahl,
val(ef021) as hssem,
ef004 as stort,
val(${stgnr.stuart}) as stuart,
${stgnr.stufrm} as stufrm,
ef118 as hzbart_astat,
ef119u1 as hzbkfzkz,
val(ef014) as hrst,
<#if stgnr.studiengang_nr=="1" && stgnr.fach_nr=="1">
<#foreach vorherige_pruefung in vorherige_pruefungen>
${vorherige_pruefung.pruefung_stort},
val(${vorherige_pruefung.pruefung_staat}),
${vorherige_pruefung.pruefung_abschluss},
val(${vorherige_pruefung.pruefung_ergebnis}),
</#foreach>
</#if>
today(),
count(*) as summe
FROM kenn_sos_astat
where ${stgnr.abschluss} is not null --keine im Vorsemester exmatrikulierte
and ${stgnr.fach} 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
<#if stgnr.studiengang_nr=="1" && stgnr.fach_nr=="1">
,21,22,23,24,25,26,27,28
</#if>
;
</#foreach>
--nun 2015, wenn vorhanden:
<#foreach stgnr in studiengang_nr_fach_nr_2015>
--${stgnr.studiengang_nr}. Studiengang, ${stgnr.fach_nr}. Fach:
insert into tmp_stg_aggr_astat(
hs_nr,
studiengang_nr,
fach_nr,
matrikel_nr,
geschlecht,
ca12_staat,
sem_rueck_beur_ein,
stg,
abschluss,
regel,
kz_rueck_beur_ein,
fach_sem_zahl,
hssem,
stort,
stuart,
stufrm,
hzbart_astat,
hzbkfzkz,
hrst,
<#if stgnr.studiengang_nr=="1" && stgnr.fach_nr=="1">
<#foreach vorherige_pruefung in vorherige_pruefungen_2015>
${vorherige_pruefung.art}_pruefung_stort,
${vorherige_pruefung.art}_pruefung_staat,
${vorherige_pruefung.art}_pruefung_abschluss,
${vorherige_pruefung.art}_pruefung_ergebnis,
</#foreach>
</#if>
datum,
summe)
select
hs_nr,
${stgnr.studiengang_nr} as studiengang_nr,
${stgnr.fach_nr} as fach_nr,
val(ef006) as matrikel_nr,
val(ef007) as geschlecht,
val(ef009) as ca12_staat,
semester as sem_rueck_beur_ein,
${stgnr.fach} as stg,
${stgnr.abschluss} as abschluss,
val(${stgnr.regel}) as regel,
val(${stgnr.kz_rueck_beur_ein}) as kz_rueck_beur_ein,
val(${stgnr.fach_sem_zahl}) as fach_sem_zahl,
(case when ef026='1' then 1
else val(ef019) end ) as hssem,
ef004 as stort,
val(${stgnr.stuart}) as stuart,
${stgnr.stufrm} as stufrm,
ef110 as hzbart_astat,
ef111u1 as hzbkfzkz,
val(ef012) as hrst,
<#if stgnr.studiengang_nr=="1" && stgnr.fach_nr=="1">
<#foreach vorherige_pruefung in vorherige_pruefungen_2015>
${vorherige_pruefung.pruefung_stort},
val(${vorherige_pruefung.pruefung_staat}),
${vorherige_pruefung.pruefung_abschluss},
val(${vorherige_pruefung.pruefung_ergebnis}),
</#foreach>
</#if>
today(),
count(*) as summe
FROM kenn_sos_astat_2015
where ${stgnr.abschluss} is not null
and ${stgnr.fach} is not null
and ${stgnr.kz_rueck_beur_ein} !='5' --keine im Vorsemester exmatrikulierte
group by 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20
<#if stgnr.studiengang_nr=="1" && stgnr.fach_nr=="1">
,21,22,23,24,25,26,27,28
</#if>
;
</#foreach>
delete from qa_sos_stg_aggr_astat
where sem_rueck_beur_ein in (select distinct K.sem_rueck_beur_ein
from tmp_stg_aggr_astat K)
;
insert into qa_sos_stg_aggr_astat(hs_nr,
studiengang_nr,
fach_nr,
matrikel_nr,
geschlecht,
ca12_staat,
sem_rueck_beur_ein,
stg,
abschluss,
fgr,
abgrp,
regel,
kz_rueck_beur_ein,
fach_sem_zahl,
hssem,
-- kz_fach,
stort,
stuart,
stufrm,
hzbart_astat,
hzbkfzkz,
hrst,
letzte_pruefung_stort,
letzte_pruefung_staat,
letzte_pruefung_abschluss,
letzte_pruefung_ergebnis,
vorletzte_pruefung_stort,
vorletzte_pruefung_staat,
vorletzte_pruefung_abschluss,
vorletzte_pruefung_ergebnis,
datum,
summe)
select hs_nr,
studiengang_nr,
fach_nr,
matrikel_nr,
geschlecht,
ca12_staat,
sem_rueck_beur_ein,
stg,
abschluss,
fgr,
abgrp,
regel,
kz_rueck_beur_ein,
fach_sem_zahl,
hssem,
-- kz_fach,
stort,
stuart,
stufrm,
hzbart_astat,
hzbkfzkz,
hrst,
letzte_pruefung_stort,
letzte_pruefung_staat,
letzte_pruefung_abschluss,
letzte_pruefung_ergebnis,
vorletzte_pruefung_stort,
vorletzte_pruefung_staat,
vorletzte_pruefung_abschluss,
vorletzte_pruefung_ergebnis,
datum,
sum(summe)
from tmp_stg_aggr_astat
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,24,25,26,27,28,29,30
;
drop table tmp_stg_aggr_astat;
</#if>

63
src-modules/module/qa/hilfstabellen/qa_sos_stg_aggr_int_fuellen.sql

@ -0,0 +1,63 @@ @@ -0,0 +1,63 @@
--(c) 2024 Daniel Quathamer
--freemarker template
<sqlvars>
<sqlvar name="sos_stg_aggr_exists">
select sp_table_exists('sos_stg_aggr') from xdummy
</sqlvar>
<sqlvar name="qa_tablecomp_profile_is_active"><![CDATA[
select 1 from xdummy where 0 < (select count(*) from qa_tablecomp_profile P where P.uniquename='sos_stud_astat_stg_abschluss_s1' and is_active=1)
union
select 0 from xdummy where 0 = (select count(*) from qa_tablecomp_profile P where P.uniquename='sos_stud_astat_stg_abschluss_s1' and is_active=1)
]]></sqlvar>
</sqlvars>
<#if qa_tablecomp_profile_is_active==1 && sos_stg_aggr_exists==1>
truncate table qa_sos_stg_aggr_int;
insert into qa_sos_stg_aggr_int(
ca12_staat,
geschlecht,
hrst,
studiengang_nr,
fach_nr,
fach_sem_zahl,
sem_rueck_beur_ein,
kz_rueck_beur_ein,
hssem,
stuart,
stutyp,
stufrm,
summe,
matrikel_nr,
stg,
abschluss,
stichtag)
SELECT
S.ca12_staat,
S.geschlecht,
val(H.astat) as hrst,
S.studiengang_nr,
S.fach_nr,
S.fach_sem_zahl,
S.sem_rueck_beur_ein,
S.kz_rueck_beur_ein,
S.hssem,
S.stuart,
S.stutyp,
S.stufrm,
S.summe,
S.matrikel_nr,
D.stg_astat as stg,
D.abschluss_astat as abschluss,
S.stichtag
FROM dim_studiengang D, sos_stg_aggr S left outer join sos_k_hrst H
on (H.apnr=S.hrst)
where S.tid_stg=D.tid
and S.stichtag in (select I.tid from sos_stichtag I where appl_key in ('0','1'))
--and S.kz_rueck_beur_ein !=5
;
</#if>

1
src-modules/module/qa/masken/37020_felderinfo.unl

@ -8,3 +8,4 @@ @@ -8,3 +8,4 @@
37027^Testfall-Schlüssel^55^0^0^150^150^1^char^50^0^0^^^^
37028^Projekt^15^0^0^150^80^1^integer^200^0^1^<<SQL>> select tid,name from qa_project where active=1 /* and systeminfo_id=<<Komponente>> */ order by 2;^^^
37029^Testfall-Typ^1000^300^-1^170^150^1^integer^30^0^1^<<SQL>> select 1,'Maskenausführung' from xdummy union select 2,'Datenbank-Test' from xdummy^^ ^
37030^Zusammenfassung^1200^300^-1^170^150^1^integer^30^0^1^<<SQL>> select 0,'Alles' from xdummy union select 1,'Nur Zusammenfassung' from xdummy^hidden^<<SQL>> select 0,'Alles' from xdummy^

1
src-modules/module/qa/masken/37020_masken_felder_bez.unl

@ -8,3 +8,4 @@ @@ -8,3 +8,4 @@
37020^37027^
37020^37028^
37020^37029^
37020^37030^

5
src-modules/module/qa/masken/37020_maskeninfo.unl

@ -166,7 +166,8 @@ from qa_mask_execution2project TP, qa_project P\ @@ -166,7 +166,8 @@ from qa_mask_execution2project TP, qa_project P\
where TP.mask_execution_id=tmp_testcase.mask_execution_id\
and P.tid=TP.project_id\
;\
--nun DB-Tests:\
--nun DB-Tests, wenn keine Maske ausgewählt ist:\
<#if "<<Maske>>" =="">\
<@selectintotmp \
select="\
T.tid,\
@ -271,7 +272,7 @@ from tmp_qa_dbtest\ @@ -271,7 +272,7 @@ from tmp_qa_dbtest\
\
drop table tmp_qa_dbtest;\
\
\
</#if> --Ende wenn keine Maske ausgewählt ist\
\
<#if inEtl>\
\

14
src-modules/module/qa/masken/37060_felderinfo.unl

@ -1,16 +1,16 @@ @@ -1,16 +1,16 @@
37060^Benutzer/in^60^0^0^150^200^1^integer^200^0^1^<<SQL>> select tid,nvl(name,benutzer) from userinfo order by 2;^hidden^^
37060^Zeitraum^60^0^0^150^200^1^integer^200^0^0^^ ^ ^
37061^Ausführungs-Status^0^0^0^150^80^1^integer^200^0^1^<<SQL>> select 0,'Erfolgreich' from xdummy union select 1,'Warnung' from xdummy order by 1^ ^ ^
37062^Aggregation des Vergleichs^20^0^0^150^80^1^integer^200^1^1^<<SQL>> select 1,'Nur Summen' from xdummy\
union select 2,'Felder' from xdummy\
--union select 3,'Matrikelnr.' from xdummy\
order by 1;^^<<SQL>> select 1,'Nur Summen' from xdummy^
37062^Aggregation des Vergleichs^10^0^0^150^80^1^integer^200^1^1^<<SQL>> select 1,'Summen' from xdummy\
union select 2,'Datensätze' from xdummy\
union select 3,'Felder' from xdummy\
order by 1;^ ^<<SQL>> select 1,'Summen' from xdummy^
37063^Testfall-Name (Stichwort)^50^0^0^150^150^1^sql^50^0^0^^ ^ ^
37064^Priorität^10^0^0^150^200^1^char^200^0^1^<<SQL>> select 'A','A (höchste Priorität)' from xdummy union \
37064^Priorität beim Feldabgleich^20^0^0^150^200^1^char^200^0^1^<<SQL>> select 'A','A (höchste Priorität)' from xdummy union \
select 'B','B (mittlere Priorität)' from xdummy union \
select 'C','C (niedrige Priorität)' from xdummy\
order by 1^ ^ ^
37065^Nur aktive^30^0^0^150^80^1^integer^200^0^1^<<SQL>> select 1,'Ja' from xdummy union select 0,'nein' from xdummy order by 1 desc;^hidden^<<SQL>>select 1,'Ja' from xdummy^
37066^Ab Datum^40^0^0^150^80^1^date^200^0^0^ ^hidden^<<SQL>> select today()-3 from xdummy^
37066^Zeitraum für Semester 5stellig für Jahr 4stellig^61^0^0^150^80^1^char^200^0^8^^ ^ ^
37067^Profil^5^0^0^150^80^1^integer^200^1^1^<<SQL>> select tid,name from qa_tablecomp_profile where is_active=1 order by 2^ ^ ^
37068^Tabellen-Abgleiche planen^100^0^0^150^300^1^char^30^0^18^^ ^<<SQL>>\
--freemarker template \

337
src-modules/module/qa/masken/37060_maskeninfo.unl

@ -1,7 +1,7 @@ @@ -1,7 +1,7 @@
37060^Tabellen-Abgleich^--Freemarker Template\
<sqlvars>\
\
<sqlvar name="profiles" type="hashsequence">\
<sqlvar name="profile" type="hash">\
\
select name,\
uniquename,\
@ -10,7 +10,10 @@ select name,\ @@ -10,7 +10,10 @@ select name,\
table_2,\
table_2_caption,\
is_active,\
systeminfo_id\
systeminfo_id,\
table_1_filter,\
table_2_filter\
\
FROM qa_tablecomp_profile \
where tid=<<Profil>> \
\
@ -30,22 +33,24 @@ select name,\ @@ -30,22 +33,24 @@ select name,\
\
select name,\
priority,\
sortnr\
sortnr,\
caption\
FROM qa_tablecomp_field \
where qa_tablecomp_profile_id=<<Profil>>\
order by sortnr\
</sqlvar> \
<sqlvar name="groupbycols" type="hashsequence">\
\
SELECT fieldname\
-- Darf nur 1 Spalte sein!\
<sqlvar name="groupbycol" type="hash">\
SELECT fieldname,\
fieldcaption\
FROM qa_tablecomp_groupby \
where qa_tablecomp_profile_id=<<Profil>>\
\
</sqlvar> \
<sqlvar name="idcols" type="hashsequence">\
\
<sqlvar name="idcols" type="hashsequence">\
SELECT \
fieldname\
fieldname,\
fieldcaption\
FROM qa_tablecomp_idcol \
where qa_tablecomp_profile_id=<<Profil>>\
\
@ -56,41 +61,73 @@ where qa_tablecomp_profile_id=<<Profil>>\ @@ -56,41 +61,73 @@ where qa_tablecomp_profile_id=<<Profil>>\
\
\
<#assign prio_filter="" />\
/* <#assign prio_filter=<<Priorität>> /> */\
/* <#assign prio_filter=<<Priorität beim Feldabgleich>> /> */\
\
\
<#assign aggregation="<<Aggregation des Vergleichs>>" />\
\
create temp table tmp_abgleich\
(semester integer,\
(zeitraum integer,\
prio char(1),\
ord smallint,\
pruefung varchar(255),\
comparison varchar(255),\
fieldname varchar(255),\
fieldcaption varchar(255),\
result_table_1 varchar(255),\
result_table_2 varchar(255),\
result_code smallint,\
result_code_str varchar(255)\
result_code_str varchar(255),\
hidden_summe text -- Link zu Detailbericht falls Differenz gefunden\
);\
\
create temp table tmp_abgleich_summen\
(semester integer,\
prio char(1),\
(zeitraum integer,\
ord smallint,\
pruefung varchar(255),\
comparison varchar(255),\
fieldname varchar(255),\
fieldcaption varchar(255),\
result_table_1 varchar(255),\
result_table_2 varchar(255),\
result_code smallint\
);\
\
create temp table tmp_abgleich_ds\
(zeitraum integer,\
ord smallint,\
pruefung varchar(255),\
comparison varchar(255),\
<#foreach idcol in idcols>\
${idcol.fieldname} varchar(255),\
</#foreach>\
result_table_1 varchar(255),\
result_table_2 varchar(255),\
result_code smallint,\
result_code_str varchar(255)\
);\
\
<#assign ord=0 />\
\
<#foreach profile in profiles>\
select * into temp tmp_table_1\
from ${profile.table_1} \
where 1=1\
<#if profile.table_1_filter !=""> and ${profile.table_1_filter} </#if>\
<#if "<<Zeitraum>>"!="">\
and ${groupbycol.fieldname}=<<Zeitraum>>\
</#if>\
;\
select * into temp tmp_table_2\
from ${profile.table_2} \
where 1=1\
<#if profile.table_2_filter !=""> and ${profile.table_2_filter} </#if>\
<#if "<<Zeitraum>>"!="">\
and ${groupbycol.fieldname}=<<Zeitraum>>\
</#if>\
;\
\
<#if aggregation=="1">\
--summen:\
<#foreach pruefung in pruefungen>\
<#if pruefung.priority!="P" && (pruefung.priority==prio_filter || prio_filter=="")>\
\
@ -98,62 +135,51 @@ result_code smallint\ @@ -98,62 +135,51 @@ result_code smallint\
\
\
insert into tmp_abgleich_summen\
(semester,\
prio,\
(zeitraum,\
ord,\
pruefung,\
comparison,\
result_table_1,\
result_table_2\
)\
select <#foreach groupbycol in groupbycols>\
${groupbycol.fieldname},\
</#foreach>\
'${pruefung.priority}',\
select ${groupbycol.fieldname},\
${ord},\
'${pruefung.name}',\
'${pruefung.aggregationfunction}',\
${pruefung.aggregationfunction}(${pruefung.aggregationfield})::integer,\
0\
from ${profile.table_1}\
where ${pruefung.whereclause}\
group by <#foreach groupbycol in groupbycols>\
${groupbycol.fieldname},\
</#foreach>\
null::char(1)\
from tmp_table_1\
where 1=1\
<#if pruefung.whereclause !=""> and ${pruefung.whereclause} </#if>\
group by ${groupbycol.fieldname}\
;\
\
insert into tmp_abgleich_summen\
(semester,\
prio,\
(zeitraum,\
ord,\
pruefung,\
comparison,\
result_table_1,\
result_table_2\
)\
select <#foreach groupbycol in groupbycols>\
${groupbycol.fieldname},\
</#foreach>\
'${pruefung.priority}',\
select ${groupbycol.fieldname},\
${ord},\
'${pruefung.name}',\
'${pruefung.aggregationfunction}',\
0,\
${pruefung.aggregationfunction}(${pruefung.aggregationfield})::integer\
from ${profile.table_2}\
where ${pruefung.whereclause}\
group by <#foreach groupbycol in groupbycols>\
${groupbycol.fieldname},\
</#foreach>\
null::char(1);\
from tmp_table_2\
where 1=1\
<#if pruefung.whereclause !=""> and ${pruefung.whereclause} </#if>\
group by ${groupbycol.fieldname}\
;\
\
</#if> --vom prio-Filter\
</#foreach>\
\
insert into tmp_abgleich\
(semester,\
prio,\
(zeitraum,\
--prio,\
ord,\
pruefung,\
comparison,\
@ -161,8 +187,7 @@ result_table_1,\ @@ -161,8 +187,7 @@ result_table_1,\
result_table_2,\
result_code\
)\
select semester,\
prio,\
select zeitraum,\
ord,\
pruefung,\
comparison,\
@ -171,7 +196,7 @@ sum(val(result_table_2)),\ @@ -171,7 +196,7 @@ sum(val(result_table_2)),\
1\
from tmp_abgleich_summen\
--where comparison='Summe'\
group by 1,2,3,4,5;\
group by 1,2,3,4;\
\
update tmp_abgleich set result_code=0\
where val(result_table_2) =val(result_table_1);\
@ -179,44 +204,133 @@ where val(result_table_2) =val(result_table_1);\ @@ -179,44 +204,133 @@ where val(result_table_2) =val(result_table_1);\
\
</#if> --wenn aggregation=Summen\
\
drop table tmp_abgleich_summen;\
\
\
<#if aggregation=="2">\
--Datensätze:\
\
\
--nur in Tabelle 1, fehlt in Tabelle 2:\
insert into tmp_abgleich_ds\
(zeitraum ,\
pruefung,\
comparison,\
<#foreach idcol in idcols>\
${idcol.fieldname} ,\
</#foreach>\
result_table_1 ,\
--result_table_2 ,\
result_code )\
select T1.${groupbycol.fieldname},\
'Datensatz-Abgleich',\
'Existenz',\
<#foreach idcol in idcols>\
T1.${idcol.fieldname} ,\
</#foreach>\
'x',\
1 --Fehlt\
from tmp_table_1 T1 left outer join tmp_table_2 T2\
on (1=1 <#foreach idcol in idcols>\
and T1.${idcol.fieldname}=T2.${idcol.fieldname}\
</#foreach>\
)\
where T2.${groupbycol.fieldname} is null\
;\
--nur in Tabelle 2, fehlt in Tabelle 1:\
insert into tmp_abgleich_ds\
(zeitraum ,\
pruefung,\
comparison,\
<#foreach idcol in idcols>\
${idcol.fieldname} ,\
</#foreach>\
--result_table_1 ,\
result_table_2 ,\
result_code )\
select T1.${groupbycol.fieldname},\
'Datensatz-Abgleich',\
'Existenz',\
<#foreach idcol in idcols>\
T1.${idcol.fieldname} ,\
</#foreach>\
'x',\
1 --Fehlt\
from tmp_table_2 T1 left outer join tmp_table_1 T2\
on (1=1 <#foreach idcol in idcols>\
and T1.${idcol.fieldname}=T2.${idcol.fieldname}\
</#foreach>\
)\
where T2.${groupbycol.fieldname} is null\
;\
\
--in beiden Tabellen vorhanden:\
insert into tmp_abgleich_ds\
(zeitraum ,\
pruefung,\
comparison,\
<#foreach idcol in idcols>\
${idcol.fieldname} ,\
</#foreach>\
result_table_1 ,\
result_table_2 ,\
result_code )\
select T1.${groupbycol.fieldname},\
'Datensatz-Abgleich',\
'Existenz',\
<#foreach idcol in idcols>\
T1.${idcol.fieldname} ,\
</#foreach>\
'x',\
'x',\
0 --vorhanden -> erfolgreich\
from tmp_table_1 T1 inner join tmp_table_2 T2\
on (1=1 <#foreach idcol in idcols>\
and T1.${idcol.fieldname}=T2.${idcol.fieldname}\
</#foreach>\
)\
;\
\
\
</#if> --von Aggregation=2\
\
<#if aggregation=="3">\
--felder:\
<#foreach field in fields>\
<#if field.priority!="P" && (field.priority==prio_filter || prio_filter=="")>\
\
<#assign ord=ord+1 />\
\
insert into tmp_abgleich\
(semester,\
(zeitraum,\
prio,\
ord,\
pruefung,\
comparison,\
fieldname,\
fieldcaption,\
result_table_1,\
result_table_2,\
result_code\
)\
select <#foreach groupbycol in groupbycols>\
T1.${groupbycol.fieldname},\
</#foreach>\
select T1.${groupbycol.fieldname},\
'${field.priority}',\
${ord},\
'Feld-Abgleich',\
'Gleichheit',\
'${field.name}',\
'${field.caption}',\
T1.${field.name},\
T2.${field.name},\
(case when T1.${field.name}=T2.${field.name} then 0 \
(case when T1.${field.name}=T2.${field.name} or (T1.${field.name} is null and T2.${field.name} is null) then 0 \
else 1 end) as result_code\
from ${profile.table_1} T1 left outer join ${profile.table_2} T2\
from tmp_table_1 T1 left outer join tmp_table_2 T2\
on (1=1 <#foreach idcol in idcols>\
and T1.${idcol.fieldname}=T2.${idcol.fieldname}\
</#foreach>\
)\
where 1=1\
<#if "<<Zeitraum>>"!="">\
and T1.${groupbycol.fieldname}=<<Zeitraum>>\
</#if>\
;\
\
</#if> --vom prio-Filter\
@ -224,74 +338,86 @@ where 1=1\ @@ -224,74 +338,86 @@ where 1=1\
</#foreach>\
</#if> --wenn aggregation=Felder\
\
</#foreach> --Ende Profil-Schleife\
\
update tmp_abgleich set result_code_str='Differenz'\
\
\
update tmp_abgleich set result_code_str='Differenz',\
hidden_summe='SuperXmlTabelle?tid=37180&Profil=<<Profil>>&Zeitraum='||zeitraum||'&Feld='||fieldname||'&cachingcontrol=clearmask&navi=true' \
where result_code!=0;\
\
update tmp_abgleich set result_code_str='Erfolg'\
where result_code=0;\
\
drop table tmp_table_1;\
drop table tmp_table_2;\
\
<#if aggregation="1">\
select ord,\
prio,\
pruefung,\
semester,\
zeitraum,\
comparison,\
result_table_1,\
result_table_2,\
--50 as _graphbar,\
(100-( result_table_1::decimal(8,2))/(result_table_2::decimal(8,2))*100)::integer as _graphbar,\
result_code_str\
--hidden_summe\
from tmp_abgleich\
where 1=1\
/* and <<Ausführungs-Status>>=result_code */\
order by 1;\
\
<#elseif aggregation=="2">\
select ord,prio,pruefung,\
semester,\
null::integer as matrikel_nr,\
fieldname,result_code_str,count(*)\
\
update tmp_abgleich_ds set result_code_str='Differenz'\
where result_code!=0 or result_code is null;\
update tmp_abgleich_ds set result_code_str='Erfolg'\
where result_code=0;\
\
\
select \
pruefung,\
zeitraum,\
<#foreach idcol in idcols>\
${idcol.fieldname} ,\
</#foreach>\
result_table_1,\
result_table_2,\
result_code_str\
from tmp_abgleich_ds\
where 1=1\
/* and <<Ausführungs-Status>>=result_code */\
order by 1,2,3,4,5;\
\
<#elseif aggregation=="3">\
select ord,\
prio,\
pruefung,\
zeitraum,\
fieldname,\
fieldcaption,\
result_code_str,hidden_summe,count(*) as summe\
from tmp_abgleich\
where 1=1\
/* and <<Ausführungs-Status>>=result_code */\
group by 1,2,3,4,5,6,7\
group by 1,2,3,4,5,6,7,8\
order by 1,2,3,4;\
</#if>^--Freemarker Template\
<sqlvars>\
\
<sqlvar name="profile" type="hash">\
\
select name,\
uniquename,\
table_1,\
table_1_caption,\
table_2,\
table_2_caption,\
is_active,\
systeminfo_id\
FROM qa_tablecomp_profile \
where tid=<<Profil>> \
\
</sqlvar>\
</sqlvars>\
<#assign aggregation="<<Aggregation des Vergleichs>>" />\
XIL List\
drop_and_delete movable_columns sizable_columns horizontal_scrolling\
white_space_color=COLOR_WHITE fixed_columns=2\
min_heading_height=35\
<#if aggregation="1">\
Column CID=0 heading_text="Nr." center_heading\
row_selectable col_selectable heading_platform readonly\
width=20 text_size=100\
Column CID=1 heading_text="Priorität" center_heading\
row_selectable col_selectable heading_platform readonly\
width=50 text_size=200\
Column CID=1 heading_text="Testfall" center_heading\
row_selectable col_selectable heading_platform readonly\
width=50 text_size=200\
Column CID=1 heading_text="Semester" center_heading\
Column CID=1 heading_text="${groupbycol.fieldcaption}" center_heading\
row_selectable col_selectable heading_platform readonly\
width=50 text_size=200\
<#if aggregation="1">\
Column CID=1 heading_text="Vergleich" center_heading\
row_selectable col_selectable heading_platform readonly\
width=50 text_size=200\
@ -301,21 +427,54 @@ Column CID=1 heading_text="Wert ${profile.table_1_caption}" center_heading\ @@ -301,21 +427,54 @@ Column CID=1 heading_text="Wert ${profile.table_1_caption}" center_heading\
Column CID=1 heading_text="Wert ${profile.table_2_caption}" center_heading\
row_selectable col_selectable heading_platform readonly\
width=10 text_size=200\
Column CID=1 heading_text="Differenz graphisch" center_heading\
row_selectable col_selectable heading_platform readonly\
width=10 \
Column CID=1 heading_text="Status" center_heading\
row_selectable col_selectable heading_platform readonly\
width=10 text_size=200\
<#elseif aggregation=="2">\
Column CID=1 heading_text="Matrikelnr." center_heading\
<#elseif aggregation="2">\
Column CID=1 heading_text="Testfall" center_heading\
row_selectable col_selectable heading_platform readonly\
width=50 text_size=200\
Column CID=1 heading_text="Zeitraum: ${groupbycol.fieldcaption}" center_heading\
row_selectable col_selectable heading_platform readonly\
width=50 text_size=200\
<#foreach idcol in idcols>\
Column CID=1 heading_text="Datensatz-ID\\000${idcol.fieldcaption}" center_heading\
row_selectable col_selectable heading_platform readonly\
width=10 text_size=200\
Column CID=1 heading_text="Feldname" center_heading\
</#foreach>\
Column CID=1 heading_text="Vorhanden ${profile.table_1_caption}" center_heading\
row_selectable col_selectable heading_platform readonly\
width=10 text_size=200\
Column CID=1 heading_text="Vorhanden ${profile.table_2_caption}" center_heading\
row_selectable col_selectable heading_platform readonly\
width=10 text_size=200\
Column CID=1 heading_text="Ergebnis" center_heading\
Column CID=1 heading_text="Status" center_heading\
row_selectable col_selectable heading_platform readonly\
width=10 text_size=200\
<#elseif aggregation="3">\
Column CID=0 heading_text="Nr." center_heading\
row_selectable col_selectable heading_platform readonly\
width=20 text_size=100\
Column CID=1 heading_text="Priorität" center_heading\
row_selectable col_selectable heading_platform readonly\
width=50 text_size=200\
Column CID=1 heading_text="Testfall" center_heading\
row_selectable col_selectable heading_platform readonly\
width=50 text_size=200\
Column CID=1 heading_text="${groupbycol.fieldcaption}" center_heading\
row_selectable col_selectable heading_platform readonly\
width=50 text_size=200\
Column CID=1 heading_text="Feldname" center_heading\
row_selectable col_selectable heading_platform readonly\
width=10 text_size=200\
Column CID=1 heading_text="Summe" center_heading\
Column CID=1 heading_text="Feldbezeichnung" center_heading\
row_selectable col_selectable heading_platform readonly\
width=10 text_size=200\
Column CID=1 heading_text="Ergebnis" center_heading row_selectable col_selectable heading_platform readonly width=10 text_size=20\
Column CID=1 heading_text="hidden_Summe" center_heading row_selectable col_selectableh eading_platform readonly width=10 text_size=20\
Column CID=1 heading_text="Summe" center_heading row_selectable col_selectableh eading_platform readonly width=1 text_size=1\
</#if>\
@@@^^^Generische Auswertung eines Tabellenabgleichs^drop table tmp_abgleich;^^1^440^360^0^1^^
@@@^ ^ ^Generische Auswertung eines Tabellenabgleichs mit Link zu Details bei Auswertung mit Aggregation des Vergleichs=Felder^drop table tmp_abgleich; drop table tmp_abgleich_ds; drop table tmp_abgleich_summen;^^1^440^360^^1^ ^

11
src-modules/module/qa/masken/37180_felderinfo.unl

@ -0,0 +1,11 @@ @@ -0,0 +1,11 @@
37180^Benutzer/in^60^0^0^150^200^1^integer^200^0^999^<<SQL>> select tid,nvl(name,benutzer) from userinfo order by 2;^hidden^ ^
37181^Ausführungs-Status^0^0^0^150^80^1^integer^200^0^999^<<SQL>> select 0,'Erfolgreich' from xdummy union select 1,'Warnung' from xdummy order by 1^ ^ ^
37182^Feld^20^0^0^150^80^1^char^200^1^1^<<SQL>> select name,caption from qa_tablecomp_field where qa_tablecomp_profile_id=<<Profil>> order by 1;^ ^ ^
37183^Testfall-Name (Stichwort)^50^0^0^150^150^1^sql^50^0^999^^ ^ ^
37184^Zeitraum^10^0^0^150^200^1^integer^200^0^0^^ ^ ^
37185^Nur aktive^30^0^0^150^80^1^integer^200^0^999^<<SQL>> select 1,'Ja' from xdummy union select 0,'nein' from xdummy order by 1 desc;^hidden^<<SQL>>select 1,'Ja' from xdummy^
37186^Ab Datum^40^0^0^150^80^1^date^200^0^999^^hidden^<<SQL>> select today()-3 from xdummy^
37187^Profil^0^0^0^150^80^1^integer^200^1^1^<<SQL>> select tid,name from qa_tablecomp_profile where is_active=1 order by 2^ ^ ^
37188^Tabellen-Abgleiche planen^100^0^0^150^300^1^char^30^0^999^^ ^<<SQL>>\
--freemarker template \
<#if UserIsAdmin> select '../edit/qa/qa_tablecomp_profile_list.jsp' from xdummy ;<#else> select '../not_authorized.htm' from xdummy;</#if>^

1
src-modules/module/qa/masken/37180_maske_system_bez.unl

@ -0,0 +1 @@ @@ -0,0 +1 @@
37180^260^

9
src-modules/module/qa/masken/37180_masken_felder_bez.unl

@ -0,0 +1,9 @@ @@ -0,0 +1,9 @@
37180^37180^
37180^37181^
37180^37182^
37180^37183^
37180^37184^
37180^37185^
37180^37186^
37180^37187^
37180^37188^

75
src-modules/module/qa/masken/37180_maskeninfo.unl

@ -0,0 +1,75 @@ @@ -0,0 +1,75 @@
37180^Tabellen-Abgleich Differenzen^--Freemarker Template\
<sqlvars>\
\
<sqlvar name="profile" type="hash">\
select name,\
uniquename,\
table_1,\
table_1_caption,\
table_2,\
table_2_caption,\
is_active,\
systeminfo_id\
FROM qa_tablecomp_profile \
where tid=<<Profil>> \
\
</sqlvar>\
\
<sqlvar name="idcols" type="hashsequence">\
SELECT \
fieldname,\
fieldcaption\
FROM qa_tablecomp_idcol \
where qa_tablecomp_profile_id=<<Profil>>\
\
</sqlvar> \
<sqlvar name="groupbycols" type="hashsequence">\
SELECT fieldname\
FROM qa_tablecomp_groupby \
where qa_tablecomp_profile_id=<<Profil>>\
</sqlvar> \
<sqlvar name="vergleichsfeld" type="hash">\
SELECT name,\
caption\
FROM qa_tablecomp_field\
where qa_tablecomp_profile_id=<<Profil>>\
and name=<<Feld>>;\
\
</sqlvar> \
</sqlvars>\
\
\
select distinct <#foreach idcol in idcols>T1.${idcol.fieldname},</#foreach>\
T1.${vergleichsfeld.name},\
T2.${vergleichsfeld.name}\
from ${profile.table_1} T1 left outer join ${profile.table_2} T2\
on (1=1 <#foreach idcol in idcols>\
and T1.${idcol.fieldname}=T2.${idcol.fieldname}\
</#foreach>\
)\
where (T1.${vergleichsfeld.name}!=T2.${vergleichsfeld.name} or (T1.${vergleichsfeld.name} is not null and T2.${vergleichsfeld.name} is null) or (T1.${vergleichsfeld.name} is null and T2.${vergleichsfeld.name} is not null))\
<#if "<<Zeitraum>>"!="">\
<#foreach groupbycol in groupbycols>\
and T1.${groupbycol.fieldname}=<<Zeitraum>>\
</#foreach>\
</#if>\
order by <#list 1..idcols?size as i>${i},</#list> ${idcols?size}\
;^--Freemarker Template\
\
XIL List\
drop_and_delete movable_columns sizable_columns horizontal_scrolling\
white_space_color=COLOR_WHITE fixed_columns=1\
min_heading_height=35\
<#foreach idcol in idcols>\
Column CID=0 heading_text="${idcol.fieldcaption}" center_heading\
row_selectable col_selectable heading_platform readonly\
width=20 text_size=14\
</#foreach>\
Column CID=1 heading_text="${profile.table_1_caption}.${vergleichsfeld.caption}" center_heading\
row_selectable col_selectable heading_platform readonly\
width=50 text_size=14\
Column CID=1 heading_text="${profile.table_2_caption}.${vergleichsfeld.caption}" center_heading\
row_selectable col_selectable heading_platform readonly\
width=50 text_size=14\
\
@@@^ ^ ^Anzeige von Differenzen beim Tabellenabgleich^ ^^1^440^360^^1^^

1
src-modules/module/qa/masken/37180_sachgeb_maske_bez.unl

@ -0,0 +1 @@ @@ -0,0 +1 @@
260^37180^

2
src-modules/module/qa/qa_mask_execution_loop.x

@ -8,7 +8,7 @@ function exitAfterError @@ -8,7 +8,7 @@ function exitAfterError
trap exitAfterError ERR
TC_ALL=`psql --dbname=$DBNAME --tuples-only -c "select uniquename from qa_mask_execution where is_active=1 order by 1"`
TC_ALL=`psql --dbname=$DBNAME --tuples-only -c "select uniquename from qa_mask_execution where string_not_null(uniquename)!='' and is_active=1 order by 1"`
cd $WEBAPP/WEB-INF

141
src-modules/module/qa/schluesseltabellen/qa_tablecomp_profile_sos_stud_astat_fuellen.sql

@ -0,0 +1,141 @@ @@ -0,0 +1,141 @@
-- Profil für Vergleich ASTAT
-- kann per Hilfsmaske eingespielt werden, wenn QA-Modul installiert
--freemarker template
<#assign profiles = [
{"name":"Vergleich Studierende ASTAT (STGNR)",
"uniquename":"sos_stud_astat_stgnr_stichtag_0",
"table_1":"qa_sos_stg_aggr_astat",
"table_1_caption":"Studierende ASTAT (ohne Exmatr.)",
"table_1_filter":"kz_rueck_beur_ein !=5",
"table_2":"qa_sos_stg_aggr_int",
"table_2_caption":"Studierende (intern) tagesaktuell",
"table_2_filter":"stichtag in (select I.tid from sos_stichtag I where appl_key in (''0''))",
"systeminfo_id":"7"}
] />
<#assign pruefungen = [
{"name":"Gesamtzahl der Fälle","whereclause":"1=1","priority":"A","aggregationfield":"matrikel_nr","aggregationfunction":"count"},
{"name":"Gesamtzahl der Köpfe","whereclause":"studiengang_nr=1 and fach_nr=1","priority":"A","aggregationfield":"matrikel_nr","aggregationfunction":"count"}
] />
<#assign groupbycol = {"name":"sem_rueck_beur_ein","caption":"Semester"} />
<#assign idcols = [
{"name":"sem_rueck_beur_ein","caption":"Semester"},
{"name":"matrikel_nr","caption":"Matrikel-Nr."},
{"name":"studiengang_nr","caption":"Studiengang-Nr."},
{"name":"fach_nr","caption":"Fachnr."}
] />
<#assign ord=0 />
<#assign fields = [
{"name":"geschlecht","priority":"A","caption":"Geschlecht" },
{"name":"ca12_staat","priority":"A","caption":"Staatsangehörigkeit" },
{"name":"kz_rueck_beur_ein","priority":"A","caption":"Status" },
{"name":"hrst","priority":"A","caption":"Hörerstatus" },
{"name":"fach_sem_zahl","priority":"A","caption":"Fachsemester" },
{"name":"stg","priority":"A","caption":"Fach" },
{"name":"abschluss","priority":"A","caption":"Abschluss" }
] />
--Der folgende Code ist generisch:
<#foreach profile in profiles>
delete from qa_tablecomp_aggregation
where qa_tablecomp_profile_id in (select P.tid from qa_tablecomp_profile P
where P.uniquename='${profile.uniquename}')
;
delete from qa_tablecomp_groupby
where qa_tablecomp_profile_id in (select P.tid from qa_tablecomp_profile P
where P.uniquename='${profile.uniquename}')
;
delete from qa_tablecomp_idcol
where qa_tablecomp_profile_id in (select P.tid from qa_tablecomp_profile P
where P.uniquename='${profile.uniquename}')
;
delete from qa_tablecomp_field
where qa_tablecomp_profile_id in (select P.tid from qa_tablecomp_profile P
where P.uniquename='${profile.uniquename}')
;
delete from qa_tablecomp_profile
where uniquename='${profile.uniquename}'
;
insert into qa_tablecomp_profile( name,
uniquename,
table_1,
table_1_caption,
table_1_filter,
table_2,
table_2_caption,
table_2_filter,
is_active,
systeminfo_id)
select '${profile.name}',
'${profile.uniquename}',
'${profile.table_1}',
'${profile.table_1_caption}',
'${profile.table_1_filter}',
'${profile.table_2}',
'${profile.table_2_caption}',
'${profile.table_2_filter}',
1,
${profile.systeminfo_id}
from xdummy;
<#assign ord=0 />
<#foreach pruefung in pruefungen>
insert into qa_tablecomp_aggregation(
qa_tablecomp_profile_id,
name,
whereclause,
is_active,
priority,
aggregationfield,
aggregationfunction
)
select tid,
'${pruefung.name}',
'${pruefung.whereclause}',
1,
'${pruefung.priority}',
'${pruefung.aggregationfield}',
'${pruefung.aggregationfunction}'
from qa_tablecomp_profile
where uniquename='${profile.uniquename}';
</#foreach>
insert into qa_tablecomp_groupby( qa_tablecomp_profile_id,
fieldname,
fieldcaption
)
select tid,
'${groupbycol.name}',
'${groupbycol.caption}'
from qa_tablecomp_profile
where uniquename='${profile.uniquename}';
<#foreach idcol in idcols>
insert into qa_tablecomp_idcol( qa_tablecomp_profile_id,
fieldname,
fieldcaption
)
select tid,
'${idcol.name}',
'${idcol.caption}'
from qa_tablecomp_profile
where uniquename='${profile.uniquename}';
</#foreach>
<#foreach field in fields>
<#assign ord=ord+1 />
insert into qa_tablecomp_field(
qa_tablecomp_profile_id,
name,
caption,
priority,
sortnr
)
select tid,
'${field.name}',
'${field.caption}',
'${field.priority}',
${ord}
from qa_tablecomp_profile
where uniquename='${profile.uniquename}';
</#foreach>
--Ende Profil
</#foreach>

141
src-modules/module/qa/schluesseltabellen/qa_tablecomp_profile_sos_stud_astat_nach_fach_abschluss_s0_fuellen.sql

@ -0,0 +1,141 @@ @@ -0,0 +1,141 @@
-- Profil für Vergleich ASTAT
-- kann per Hilfsmaske eingespielt werden, wenn QA-Modul installiert
--freemarker template
<#assign profiles = [
{"name":"Vergleich Studierende ASTAT (Fach/Abschluss) Stichtag tagesakt.",
"uniquename":"sos_stud_astat_stg_abschluss_s0",
"table_1":"qa_sos_stg_aggr_astat",
"table_1_caption":"Studierende ASTAT (ohne Exmatr.)",
"table_1_filter":"kz_rueck_beur_ein !=5",
"table_2":"qa_sos_stg_aggr_int",
"table_2_caption":"Studierende (intern) tagesaktuell",
"table_2_filter":"hrst !=4 and stichtag in (select I.tid from sos_stichtag I where appl_key in (''0''))",
"systeminfo_id":"7"}
] />
<#assign pruefungen = [
{"name":"Gesamtzahl der Fälle","whereclause":"","priority":"A","aggregationfield":"matrikel_nr","aggregationfunction":"count"},
{"name":"Gesamtzahl der Köpfe","whereclause":"studiengang_nr=1 and fach_nr=1","priority":"A","aggregationfield":"matrikel_nr","aggregationfunction":"count"}
] />
<#assign groupbycol = {"name":"sem_rueck_beur_ein","caption":"Semester"} />
<#assign idcols = [
{"name":"sem_rueck_beur_ein","caption":"Semester"},
{"name":"matrikel_nr","caption":"Matrikel-Nr."},
{"name":"stg","caption":"Fach" },
{"name":"abschluss","caption":"Abschluss" }
] />
<#assign ord=0 />
<#assign fields = [
{"name":"geschlecht","priority":"A","caption":"Geschlecht" },
{"name":"ca12_staat","priority":"A","caption":"Staatsangehörigkeit" },
{"name":"kz_rueck_beur_ein","priority":"A","caption":"Status" },
{"name":"hrst","priority":"A","caption":"Hörerstatus" },
{"name":"fach_sem_zahl","priority":"A","caption":"Fachsemester" },
{"name":"studiengang_nr","priority":"A","caption":"Studiengang-Nr."},
{"name":"fach_nr","priority":"A","caption":"Fachnr."}
] />
--Der folgende Code ist generisch:
<#foreach profile in profiles>
delete from qa_tablecomp_aggregation
where qa_tablecomp_profile_id in (select P.tid from qa_tablecomp_profile P
where P.uniquename='${profile.uniquename}')
;
delete from qa_tablecomp_groupby
where qa_tablecomp_profile_id in (select P.tid from qa_tablecomp_profile P
where P.uniquename='${profile.uniquename}')
;
delete from qa_tablecomp_idcol
where qa_tablecomp_profile_id in (select P.tid from qa_tablecomp_profile P
where P.uniquename='${profile.uniquename}')
;
delete from qa_tablecomp_field
where qa_tablecomp_profile_id in (select P.tid from qa_tablecomp_profile P
where P.uniquename='${profile.uniquename}')
;
delete from qa_tablecomp_profile
where uniquename='${profile.uniquename}'
;
insert into qa_tablecomp_profile( name,
uniquename,
table_1,
table_1_caption,
table_1_filter,
table_2,
table_2_caption,
table_2_filter,
is_active,
systeminfo_id)
select '${profile.name}',
'${profile.uniquename}',
'${profile.table_1}',
'${profile.table_1_caption}',
'${profile.table_1_filter}',
'${profile.table_2}',
'${profile.table_2_caption}',
'${profile.table_2_filter}',
1,
${profile.systeminfo_id}
from xdummy;
<#assign ord=0 />
<#foreach pruefung in pruefungen>
insert into qa_tablecomp_aggregation(
qa_tablecomp_profile_id,
name,
whereclause,
is_active,
priority,
aggregationfield,
aggregationfunction
)
select tid,
'${pruefung.name}',
'${pruefung.whereclause}',
1,
'${pruefung.priority}',
'${pruefung.aggregationfield}',
'${pruefung.aggregationfunction}'
from qa_tablecomp_profile
where uniquename='${profile.uniquename}';
</#foreach>
insert into qa_tablecomp_groupby( qa_tablecomp_profile_id,
fieldname,
fieldcaption
)
select tid,
'${groupbycol.name}',
'${groupbycol.caption}'
from qa_tablecomp_profile
where uniquename='${profile.uniquename}';
<#foreach idcol in idcols>
insert into qa_tablecomp_idcol( qa_tablecomp_profile_id,
fieldname,
fieldcaption
)
select tid,
'${idcol.name}',
'${idcol.caption}'
from qa_tablecomp_profile
where uniquename='${profile.uniquename}';
</#foreach>
<#foreach field in fields>
<#assign ord=ord+1 />
insert into qa_tablecomp_field(
qa_tablecomp_profile_id,
name,
caption,
priority,
sortnr
)
select tid,
'${field.name}',
'${field.caption}',
'${field.priority}',
${ord}
from qa_tablecomp_profile
where uniquename='${profile.uniquename}';
</#foreach>
--Ende Profil
</#foreach>

141
src-modules/module/qa/schluesseltabellen/qa_tablecomp_profile_sos_stud_astat_nach_fach_abschluss_s1_fuellen.sql

@ -0,0 +1,141 @@ @@ -0,0 +1,141 @@
-- Profil für Vergleich ASTAT
-- kann per Hilfsmaske eingespielt werden, wenn QA-Modul installiert
--freemarker template
<#assign profiles = [
{"name":"Vergleich Studierende ASTAT (Fach/Abschluss) Stichtag amtl. Stat.",
"uniquename":"sos_stud_astat_stg_abschluss_s1",
"table_1":"qa_sos_stg_aggr_astat",
"table_1_caption":"Studierende ASTAT (ohne Exmatr.)",
"table_1_filter":"kz_rueck_beur_ein !=5",
"table_2":"qa_sos_stg_aggr_int",
"table_2_caption":"Studierende (intern) amtl. Stat.",
"table_2_filter":"hrst !=4 and kz_rueck_beur_ein !=5 and stichtag in (select I.tid from sos_stichtag I where appl_key in (''1''))",
"systeminfo_id":"7"}
] />
<#assign pruefungen = [
{"name":"Gesamtzahl der Fälle","whereclause":"","priority":"A","aggregationfield":"matrikel_nr","aggregationfunction":"count"},
{"name":"Gesamtzahl der Köpfe","whereclause":"studiengang_nr=1 and fach_nr=1","priority":"A","aggregationfield":"matrikel_nr","aggregationfunction":"count"}
] />
<#assign groupbycol = {"name":"sem_rueck_beur_ein","caption":"Semester"} />
<#assign idcols = [
{"name":"sem_rueck_beur_ein","caption":"Semester"},
{"name":"matrikel_nr","caption":"Matrikel-Nr."},
{"name":"stg","caption":"Fach" },
{"name":"abschluss","caption":"Abschluss" }
] />
<#assign ord=0 />
<#assign fields = [
{"name":"geschlecht","priority":"A","caption":"Geschlecht" },
{"name":"ca12_staat","priority":"A","caption":"Staatsangehörigkeit" },
{"name":"kz_rueck_beur_ein","priority":"A","caption":"Status" },
{"name":"hrst","priority":"A","caption":"Hörerstatus" },
{"name":"fach_sem_zahl","priority":"A","caption":"Fachsemester" },
{"name":"studiengang_nr","priority":"A","caption":"Studiengang-Nr."},
{"name":"fach_nr","priority":"A","caption":"Fachnr."}
] />
--Der folgende Code ist generisch:
<#foreach profile in profiles>
delete from qa_tablecomp_aggregation
where qa_tablecomp_profile_id in (select P.tid from qa_tablecomp_profile P
where P.uniquename='${profile.uniquename}')
;
delete from qa_tablecomp_groupby
where qa_tablecomp_profile_id in (select P.tid from qa_tablecomp_profile P
where P.uniquename='${profile.uniquename}')
;
delete from qa_tablecomp_idcol
where qa_tablecomp_profile_id in (select P.tid from qa_tablecomp_profile P
where P.uniquename='${profile.uniquename}')
;
delete from qa_tablecomp_field
where qa_tablecomp_profile_id in (select P.tid from qa_tablecomp_profile P
where P.uniquename='${profile.uniquename}')
;
delete from qa_tablecomp_profile
where uniquename='${profile.uniquename}'
;
insert into qa_tablecomp_profile( name,
uniquename,
table_1,
table_1_caption,
table_1_filter,
table_2,
table_2_caption,
table_2_filter,
is_active,
systeminfo_id)
select '${profile.name}',
'${profile.uniquename}',
'${profile.table_1}',
'${profile.table_1_caption}',
'${profile.table_1_filter}',
'${profile.table_2}',
'${profile.table_2_caption}',
'${profile.table_2_filter}',
1,
${profile.systeminfo_id}
from xdummy;
<#assign ord=0 />
<#foreach pruefung in pruefungen>
insert into qa_tablecomp_aggregation(
qa_tablecomp_profile_id,
name,
whereclause,
is_active,
priority,
aggregationfield,
aggregationfunction
)
select tid,
'${pruefung.name}',
'${pruefung.whereclause}',
1,
'${pruefung.priority}',
'${pruefung.aggregationfield}',
'${pruefung.aggregationfunction}'
from qa_tablecomp_profile
where uniquename='${profile.uniquename}';
</#foreach>
insert into qa_tablecomp_groupby( qa_tablecomp_profile_id,
fieldname,
fieldcaption
)
select tid,
'${groupbycol.name}',
'${groupbycol.caption}'
from qa_tablecomp_profile
where uniquename='${profile.uniquename}';
<#foreach idcol in idcols>
insert into qa_tablecomp_idcol( qa_tablecomp_profile_id,
fieldname,
fieldcaption
)
select tid,
'${idcol.name}',
'${idcol.caption}'
from qa_tablecomp_profile
where uniquename='${profile.uniquename}';
</#foreach>
<#foreach field in fields>
<#assign ord=ord+1 />
insert into qa_tablecomp_field(
qa_tablecomp_profile_id,
name,
caption,
priority,
sortnr
)
select tid,
'${field.name}',
'${field.caption}',
'${field.priority}',
${ord}
from qa_tablecomp_profile
where uniquename='${profile.uniquename}';
</#foreach>
--Ende Profil
</#foreach>

4
src-modules/module/qa/upgrade/qa_pre_upgrade_ids.sql

@ -0,0 +1,4 @@ @@ -0,0 +1,4 @@
--mit Version 0.6 ist uniquename unique:
update qa_mask_execution set uniquename=tid where uniquename is null or trim(uniquename)='';

4
src-modules/module/qa/upgrade/qa_pre_upgrade_pg.sql

@ -0,0 +1,4 @@ @@ -0,0 +1,4 @@
--mit Version 0.6 ist uniquename unique:
update qa_mask_execution set uniquename=tid where uniquename is null or trim(uniquename)='';

5
src-modules/module/qa/upgrade/qa_upgrade_man.sql

@ -13,3 +13,8 @@ where assert_result_value_max is null; @@ -13,3 +13,8 @@ where assert_result_value_max is null;
--Obsolete Maske:
delete from themenbaum where maskeninfo_id=37100;
alter table qa_mask_execution alter column created_at set default current_date;
alter table qa_dbtest alter column created_at set default current_date;
alter table qa_project alter column created_at set default current_date;

11
superx/WEB-INF/conf/edustore/db/bin/qa_tc_execution_mail.x

@ -20,10 +20,13 @@ export MASK_PARAM="Ausführungs-Status=1,2&Ab Datum=${DATUM_EXEC}" @@ -20,10 +20,13 @@ export MASK_PARAM="Ausführungs-Status=1,2&Ab Datum=${DATUM_EXEC}"
# ExecuteMask funktioniert nur im WEB-INF Ordner
cd $WEBAPP/WEB-INF
echo CMD -cp "$JDBC_CLASSPATH" $JAVA_OPTS de.superx.bin.ExecuteMask -tid:$MASKEN_TID -out:$FILE_DIR/$FILE_NAME.pdf -user:admin "-params:${MASK_PARAM}&stylesheet=tabelle_fo_pdf.xsl&contenttype=application/pdf" -logger:$SUPERX_DIR/db/conf/logging.properties
#echo CMD -cp "$JDBC_CLASSPATH" $JAVA_OPTS de.superx.bin.ExecuteMask -tid:$MASKEN_TID -out:$FILE_DIR/$FILE_NAME.pdf -user:admin "-params:${MASK_PARAM}&stylesheet=tabelle_fo_pdf.xsl&contenttype=application/pdf" -logger:$SUPERX_DIR/db/conf/logging.properties
# XLSX
java -cp "$JDBC_CLASSPATH" $JAVA_OPTS de.superx.bin.ExecuteMask -tid:$MASKEN_TID -out:$FILE_DIR/$FILE_NAME.xlsx -user:admin "-params:${MASK_PARAM}&Zusammenfassung=0&stylesheet=tabelle_37020_mit_summary.jrxml&contenttype=application/vnd.openxmlformats-officedocument.spreadsheetml.sheet" -logger:$SUPERX_DIR/db/conf/logging.properties
#HTML
java -cp "$JDBC_CLASSPATH" $JAVA_OPTS de.superx.bin.ExecuteMask -tid:$MASKEN_TID -out:$FILE_DIR/$FILE_NAME.htm -user:admin "-params:${MASK_PARAM}&Zusammenfassung=1&stylesheet=tabelle_37020_mit_summary.jrxml&contenttype=text/html" -logger:$SUPERX_DIR/db/conf/logging.properties
# PDF
java -cp "$JDBC_CLASSPATH" $JAVA_OPTS de.superx.bin.ExecuteMask -tid:$MASKEN_TID -out:$FILE_DIR/$FILE_NAME.pdf -user:admin "-params:${MASK_PARAM}&stylesheet=tabelle_fo_pdf.xsl&contenttype=application/pdf" -logger:$SUPERX_DIR/db/conf/logging.properties
# XML
#java -cp "$JDBC_CLASSPATH" $JAVA_OPTS de.superx.bin.ExecuteMask -tid:$MASKEN_TID -out:$FILE_DIR/$FILE_NAME.xml -user:admin "-params:${MASK_PARAM}&stylesheet=tabelle_fo_pdf.xsl&contenttype=application/vnd.openxmlformats-officedocument.spreadsheetml.sheet" -logger:$SUPERX_DIR/db/conf/logging.properties
@ -41,6 +44,6 @@ export F_ANZ=$(grep -c Fehler $FILE_DIR/$FILE_NAME.csv) @@ -41,6 +44,6 @@ export F_ANZ=$(grep -c Fehler $FILE_DIR/$FILE_NAME.csv)
#Mail Versand
cat $FILE_DIR/$FILE_NAME.csv | $MAILPROG -s "Testfall-Protokoll | $W_ANZ Warnungen | $F_ANZ Fehler" -a $FILE_DIR/$FILE_NAME.pdf "${LOGMAIL}"
cat $FILE_DIR/$FILE_NAME.htm | $MAILPROG -s "Testfall-Protokoll | $W_ANZ Warnungen | $F_ANZ Fehler" -M "text/html" -a $FILE_DIR/$FILE_NAME.xlsx "${LOGMAIL}"

BIN
superx/WEB-INF/lib_ext/superx5.0_fuer_h1.jar

Binary file not shown.

68
superx/WEB-INF/reports/qa_table.jrtx

@ -0,0 +1,68 @@ @@ -0,0 +1,68 @@
<?xml version="1.0" encoding="UTF-8"?>
<!-- Created with Jaspersoft Studio -->
<jasperTemplate xmlns="http://jasperreports.sourceforge.net/jasperreports/template" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://jasperreports.sourceforge.net/jasperreports/template http://jasperreports.sourceforge.net/xsd/jaspertemplate.xsd">
<style name="Standard Bodytext" isDefault="true" isBlankWhenNull="true" fontName="Liberation Sans" fontSize="8"/>
<style name="ReportTitle" style="Standard Bodytext" fontName="Liberation Sans" fontSize="12" isBold="true"/>
<style name="ReportHeadingInstitution" style="Standard Bodytext" fontName="Liberation Sans" fontSize="8" isBold="false"/>
<style name="subReportTitle" style="Standard Bodytext" fontName="Liberation Sans" fontSize="12" isBold="true"/>
<style name="LegendContent" style="Standard Bodytext" mode="Opaque" backcolor="#CCCCCC">
<pen lineWidth="1.0" lineStyle="Solid" lineColor="#030000"/>
</style>
<style name="HinweisContent" style="Standard Bodytext" mode="Opaque" backcolor="#ffffff">
<pen lineWidth="0.4" lineStyle="Solid" lineColor="#999999"/>
</style>
<!--<style name="TableRowDetail" mode="Opaque" forecolor="#000000" backcolor="#FFFFFF" hTextAlign="Right" vTextAlign="Middle" isBlankWhenNull="true" fontName="{$font}" fontSize="8">
<box rightPadding="2">
<pen lineColor="#FFFFFF"/>
</box>
<paragraph leftIndent="2" rightIndent="1" spacingBefore="0" spacingAfter="0"/>
<conditionalStyle>
<conditionExpression><![CDATA[Boolean.valueOf( $V{PAGE_COUNT} % 2 == 1 )]]></conditionExpression>
<style mode="Opaque" forecolor="#000000" backcolor="#E3E8EB"/>
</conditionalStyle>
</style>-->
<style name="TableRowLevel1" mode="Opaque" backcolor="#CCCCCC" fontSize="12" isBold="true">
<pen lineWidth="1.0" lineStyle="Solid" lineColor="#030000"/>
</style>
<style name="TableRowLevel2" mode="Opaque" backcolor="#CCCCCC" fontSize="12" isBold="true">
<pen lineWidth="1.0" lineStyle="Solid" lineColor="#030000"/>
</style>
<style name="TableRowLevel3" mode="Opaque" backcolor="#CCCCCC" fontSize="12" isBold="true">
<pen lineWidth="1.0" lineStyle="Solid" lineColor="#030000"/>
</style>
<style name="TableRowLevel4" mode="Opaque" backcolor="#CCCCCC" fontSize="12" isBold="true">
<pen lineWidth="1.0" lineStyle="Solid" lineColor="#030000"/>
</style>
<style name="TableRowLevel5" mode="Opaque" backcolor="#CCCCCC" fontSize="12" isBold="true">
<pen lineWidth="1.0" lineStyle="Solid" lineColor="#030000"/>
</style>
<style name="TableRowLevel6" mode="Opaque" backcolor="#CCCCCC" fontSize="12" isBold="true">
<pen lineWidth="1.0" lineStyle="Solid" lineColor="#030000"/>
</style>
<style name="TableRowLevel7" mode="Opaque" backcolor="#CCCCCC" fontSize="12" isBold="true">
<pen lineWidth="1.0" lineStyle="Solid" lineColor="#030000"/>
</style>
<style name="TableRowLevel8" mode="Opaque" backcolor="#CCCCCC" fontSize="12" isBold="true">
<pen lineWidth="1.0" lineStyle="Solid" lineColor="#030000"/>
</style>
<style name="TableRowLevel9" mode="Opaque" backcolor="#CCCCCC" fontSize="12" isBold="true">
<pen lineWidth="1.0" lineStyle="Solid" lineColor="#030000"/>
</style>
<style name="TableRowLevel10" mode="Opaque" backcolor="#CCCCCC" fontSize="12" isBold="true">
<pen lineWidth="1.0" lineStyle="Solid" lineColor="#030000"/>
</style>
<style name="LegendLabel" style="Standard Bodytext" mode="Transparent" backcolor="#FFFFFF">
<pen lineWidth="1.0" lineStyle="Solid" lineColor="#030000"/>
</style>
<style name="TableColumnHeader" mode="Transparent" forecolor="#000000" backcolor="#ccccff" hTextAlign="Center" vTextAlign="Middle" fontName="Liberation Sans" fontSize="8">
<box>
<pen lineColor="#FFFFFF"/>
<topPen lineWidth="1.0" lineStyle="Solid" lineColor="#FFFFFF"/>
<leftPen lineWidth="1.0" lineStyle="Solid" lineColor="#FFFFFF"/>
<bottomPen lineWidth="1.0" lineStyle="Solid" lineColor="#FFFFFF"/>
<rightPen lineWidth="1.0" lineStyle="Solid" lineColor="#FFFFFF"/>
</box>
<paragraph spacingBefore="0" spacingAfter="0"/>
</style>
</jasperTemplate>

141
superx/WEB-INF/reports/tabelle_37020_mit_summary.jrxml

@ -1,6 +1,6 @@ @@ -1,6 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<!-- Created with Jaspersoft Studio version 6.5.1.final using JasperReports Library version 6.5.1 -->
<jasperReport xmlns="http://jasperreports.sourceforge.net/jasperreports" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://jasperreports.sourceforge.net/jasperreports http://jasperreports.sourceforge.net/xsd/jasperreport.xsd" name="Testfall-Protokoll" language="groovy" pageWidth="842" pageHeight="595" orientation="Landscape" columnWidth="818" leftMargin="12" rightMargin="12" topMargin="12" bottomMargin="12" uuid="6951068f-d120-4065-b29f-7f356b92439e">
<!-- Created with Jaspersoft Studio version 6.19.1.final using JasperReports Library version 6.19.1-867c00bf88cd4d784d404379d6c05e1b419e8a4c -->
<jasperReport xmlns="http://jasperreports.sourceforge.net/jasperreports" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://jasperreports.sourceforge.net/jasperreports http://jasperreports.sourceforge.net/xsd/jasperreport.xsd" name="Testfall-Protokoll" language="groovy" pageWidth="842" pageHeight="595" orientation="Landscape" columnWidth="818" leftMargin="12" rightMargin="12" topMargin="12" bottomMargin="12" isSummaryWithPageHeaderAndFooter="true" uuid="6951068f-d120-4065-b29f-7f356b92439e">
<property name="net.sf.jasperreports.export.xls.create.custom.palette" value="true"/>
<property name="net.sf.jasperreports.export.xls.detect.cell.type" value="true"/>
<property name="net.sf.jasperreports.export.xls.remove.empty.space.between.columns" value="true"/>
@ -20,7 +20,7 @@ @@ -20,7 +20,7 @@
<property name="net.sf.jasperreports.export.xlsx.exclude.origin.band.1" value="pageHeader"/>
<property name="net.sf.jasperreports.export.xlsx.exclude.origin.band.2" value="pageFooter"/>
<property name="com.jaspersoft.studio.data.defaultdataadapter" value="qa_protokoll"/>
<template><![CDATA["simple_table.jrtx"]]></template>
<template><![CDATA["qa_table.jrtx"]]></template>
<style name="TableRowDetail" mode="Opaque" forecolor="#000000" backcolor="#FFFFFF" hTextAlign="Right" vTextAlign="Middle" isBlankWhenNull="true" fontName="Liberation Sans" fontSize="8">
<box rightPadding="2">
<pen lineColor="#FFFFFF"/>
@ -31,7 +31,7 @@ @@ -31,7 +31,7 @@
<style mode="Opaque" forecolor="#000000" backcolor="#E3E8EB"/>
</conditionalStyle>
</style>
<style name="Crosstab_CH" mode="Opaque" backcolor="#F0F8FF">
<style name="Crosstab 1_CH" mode="Opaque" forecolor="#2B5A70" backcolor="#C8D1DB">
<box>
<pen lineWidth="0.5" lineColor="#000000"/>
<topPen lineWidth="0.5" lineColor="#000000"/>
@ -40,7 +40,7 @@ @@ -40,7 +40,7 @@
<rightPen lineWidth="0.5" lineColor="#000000"/>
</box>
</style>
<style name="Crosstab_CG" mode="Opaque" backcolor="#BFE1FF">
<style name="Crosstab 1_CG" mode="Opaque" backcolor="#E3E8EB">
<box>
<pen lineWidth="0.5" lineColor="#000000"/>
<topPen lineWidth="0.5" lineColor="#000000"/>
@ -49,7 +49,7 @@ @@ -49,7 +49,7 @@
<rightPen lineWidth="0.5" lineColor="#000000"/>
</box>
</style>
<style name="Crosstab_CT" mode="Opaque" backcolor="#005FB3">
<style name="Crosstab 1_CT" mode="Opaque" forecolor="#000000" backcolor="#C8D1DB">
<box>
<pen lineWidth="0.5" lineColor="#000000"/>
<topPen lineWidth="0.5" lineColor="#000000"/>
@ -58,7 +58,7 @@ @@ -58,7 +58,7 @@
<rightPen lineWidth="0.5" lineColor="#000000"/>
</box>
</style>
<style name="Crosstab_CD" mode="Opaque" backcolor="#FFFFFF">
<style name="Crosstab 1_CD" mode="Opaque" backcolor="#FFFFFF">
<box>
<pen lineWidth="0.5" lineColor="#000000"/>
<topPen lineWidth="0.5" lineColor="#000000"/>
@ -202,6 +202,12 @@ @@ -202,6 +202,12 @@
<field name="legende_Testfall-Typ_value" class="java.lang.String">
<fieldDescription><![CDATA[/ergebnisse/ergebnis/felder/feld [@varname="Testfall-Typ"]/value_caption]]></fieldDescription>
</field>
<field name="legende_Zusammenfassung_label" class="java.lang.String">
<fieldDescription><![CDATA[/ergebnisse/ergebnis/completefields/feld [@varname="Zusammenfassung"]/@varname]]></fieldDescription>
</field>
<field name="legende_Zusammenfassung_value" class="java.lang.String">
<fieldDescription><![CDATA[/ergebnisse/ergebnis/felder/feld [@varname="Zusammenfassung"]/value_caption]]></fieldDescription>
</field>
<field name="standdatum" class="java.lang.String">
<fieldDescription><![CDATA[/ergebnisse/ergebnis[ @ordnr='0']/stand]]></fieldDescription>
</field>
@ -220,7 +226,7 @@ @@ -220,7 +226,7 @@
<textElement verticalAlignment="Bottom"/>
<textFieldExpression><![CDATA["Filterkriterien: "]]></textFieldExpression>
</textField>
<textField isStretchWithOverflow="true">
<textField textAdjust="StretchHeight">
<reportElement style="LegendContent" x="0" y="20" width="818" height="10" isPrintWhenDetailOverflows="true" uuid="5ec5d56b-7f79-48b3-8966-cb9689dab7bb"/>
<box padding="5"/>
<textFieldExpression><![CDATA[""+(($F{legende_Ausführungs-Status_value}==null || $F{legende_Ausführungs-Status_value}=="")?"":($F{legende_Ausführungs-Status_label}+": "+$F{legende_Ausführungs-Status_value}+"; "))
@ -231,7 +237,7 @@ @@ -231,7 +237,7 @@
</band>
<band height="10">
<printWhenExpression><![CDATA[$F{Hinweis}!=""]]></printWhenExpression>
<textField isStretchWithOverflow="true">
<textField textAdjust="StretchHeight">
<reportElement style="HinweisContent" positionType="Float" x="0" y="0" width="818" height="10" isPrintWhenDetailOverflows="true" uuid="dd71ce23-fa48-4aa9-8322-96f4cb33853d"/>
<box padding="5"/>
<textElement verticalAlignment="Middle"/>
@ -239,6 +245,7 @@ @@ -239,6 +245,7 @@
</textField>
</band>
<band height="30">
<printWhenExpression><![CDATA[$F{legende_Zusammenfassung_value}=="Alles"]]></printWhenExpression>
<staticText>
<reportElement style="TableColumnHeader" mode="Opaque" x="0" y="0" width="56" height="30" uuid="0e85ce94-effb-4b11-91d3-f6c1a5db0ca3"/>
<text><![CDATA[Komponente]]></text>
@ -304,56 +311,57 @@ Start]]></text> @@ -304,56 +311,57 @@ Start]]></text>
</title>
<detail>
<band height="30" splitType="Stretch">
<textField isStretchWithOverflow="true" pattern="" isBlankWhenNull="true">
<printWhenExpression><![CDATA[$F{legende_Zusammenfassung_value}=="Alles"]]></printWhenExpression>
<textField textAdjust="StretchHeight" pattern="" isBlankWhenNull="true">
<reportElement style="TableRowDetail" stretchType="ContainerHeight" x="0" y="0" width="56" height="30" uuid="806acd94-51c9-4a3b-8684-d9eca59a5b5e"/>
<textElement textAlignment="Left"/>
<textFieldExpression><![CDATA[$F{Komponente}]]></textFieldExpression>
</textField>
<textField isStretchWithOverflow="true" pattern="" isBlankWhenNull="true">
<textField textAdjust="StretchHeight" pattern="" isBlankWhenNull="true">
<reportElement style="TableRowDetail" stretchType="ContainerHeight" x="56" y="0" width="56" height="30" uuid="09a44cc9-782a-46bc-807a-6696dfdc0a67"/>
<textElement textAlignment="Left"/>
<textFieldExpression><![CDATA[$F{Projekt}]]></textFieldExpression>
</textField>
<textField isStretchWithOverflow="true" pattern="" isBlankWhenNull="true">
<textField textAdjust="StretchHeight" pattern="" isBlankWhenNull="true">
<reportElement style="TableRowDetail" stretchType="ContainerHeight" x="112" y="0" width="94" height="30" uuid="159ccdb7-94ea-4b51-8695-fa61a98b5fc6"/>
<textElement textAlignment="Left"/>
<textFieldExpression><![CDATA[$F{Testfall}]]></textFieldExpression>
</textField>
<textField isStretchWithOverflow="true" pattern="" isBlankWhenNull="true">
<textField textAdjust="StretchHeight" pattern="" isBlankWhenNull="true">
<reportElement style="TableRowDetail" stretchType="ContainerHeight" x="206" y="0" width="94" height="30" uuid="22ab8618-3dd5-4e23-aea2-da5399265526"/>
<textElement textAlignment="Left"/>
<textFieldExpression><![CDATA[$F{Testfall Schlüssel}]]></textFieldExpression>
</textField>
<textField isStretchWithOverflow="true" pattern="" isBlankWhenNull="true">
<textField textAdjust="StretchHeight" pattern="" isBlankWhenNull="true">
<reportElement style="TableRowDetail" stretchType="ContainerHeight" x="300" y="0" width="140" height="30" uuid="63917df5-31c3-40fb-a93c-d4ff905d0b1b"/>
<textElement textAlignment="Left"/>
<textFieldExpression><![CDATA[$F{Maske}]]></textFieldExpression>
</textField>
<textField isStretchWithOverflow="true" pattern="dd.MM.yyyy hh:mm:ss" isBlankWhenNull="true">
<textField textAdjust="StretchHeight" pattern="dd.MM.yyyy hh:mm:ss" isBlankWhenNull="true">
<reportElement style="TableRowDetail" stretchType="ContainerHeight" x="440" y="0" width="66" height="30" uuid="bd6ee8f2-cbf6-44fa-948d-d01d54387bac"/>
<textElement textAlignment="Left"/>
<textFieldExpression><![CDATA[$F{Ausführungszeit Start}]]></textFieldExpression>
</textField>
<textField isStretchWithOverflow="true" pattern="#,##0.00;-#,##0.00" isBlankWhenNull="true">
<textField textAdjust="StretchHeight" pattern="#,##0.00;-#,##0.00" isBlankWhenNull="true">
<reportElement style="TableRowDetail" stretchType="ContainerHeight" x="506" y="0" width="28" height="30" uuid="954e88c4-6e2c-4a26-af3f-d03dc82a9bc9"/>
<textFieldExpression><![CDATA[$F{Dauer (Sek.)}]]></textFieldExpression>
</textField>
<textField isStretchWithOverflow="true" pattern="" isBlankWhenNull="true">
<textField textAdjust="StretchHeight" pattern="" isBlankWhenNull="true">
<reportElement style="TableRowDetail" stretchType="ContainerHeight" x="534" y="0" width="71" height="30" uuid="bfb07276-113b-4fd6-ad9d-81a1e3ae8f23"/>
<textElement textAlignment="Left"/>
<textFieldExpression><![CDATA[$F{Erwarteter Wert (Zelle)}]]></textFieldExpression>
</textField>
<textField isStretchWithOverflow="true" pattern="" isBlankWhenNull="true">
<textField textAdjust="StretchHeight" pattern="" isBlankWhenNull="true">
<reportElement style="TableRowDetail" stretchType="ContainerHeight" x="605" y="0" width="71" height="30" uuid="02062232-cc73-46c4-a29e-da72cbdd1360"/>
<textElement textAlignment="Left"/>
<textFieldExpression><![CDATA[$F{Erwarteter Wert}]]></textFieldExpression>
</textField>
<textField isStretchWithOverflow="true" isBlankWhenNull="true">
<textField textAdjust="StretchHeight" isBlankWhenNull="true">
<reportElement style="TableRowDetail" stretchType="ContainerHeight" x="676" y="0" width="72" height="30" uuid="196d793b-4c46-47a4-976b-321d1d894999"/>
<textElement textAlignment="Left"/>
<textFieldExpression><![CDATA[$F{Gefundener Wert}]]></textFieldExpression>
</textField>
<textField isStretchWithOverflow="true" pattern="" isBlankWhenNull="true">
<textField textAdjust="StretchHeight" pattern="" isBlankWhenNull="true">
<reportElement style="TableRowDetail" stretchType="ContainerHeight" x="748" y="0" width="71" height="30" uuid="f9fb7fd3-8425-4b1c-92ff-c8e21bafdcb5"/>
<textElement textAlignment="Left"/>
<textFieldExpression><![CDATA[$F{Ausführungsstatus}]]></textFieldExpression>
@ -369,31 +377,58 @@ Start]]></text> @@ -369,31 +377,58 @@ Start]]></text>
</band>
</pageFooter>
<summary>
<band height="237">
<band height="250" splitType="Immediate">
<property name="com.jaspersoft.studio.unit.height" value="px"/>
<textField>
<reportElement x="0" y="13" width="819" height="30" uuid="3ea83bae-b342-40fd-b681-5c9225a353c9"/>
<textElement verticalAlignment="Bottom">
<font size="14"/>
</textElement>
<textFieldExpression><![CDATA["Zusammenfassung Testergebnisse je Projekt"]]></textFieldExpression>
</textField>
<crosstab>
<reportElement positionType="Float" x="0" y="0" width="819" height="237" uuid="dd0e92b5-94d0-41b1-a4b8-a7fc3867f381">
<reportElement positionType="Float" x="0" y="70" width="818" height="180" isPrintInFirstWholeBand="true" uuid="82416a83-6e6a-448d-a215-f693d42c181a">
<property name="com.jaspersoft.studio.layout" value="com.jaspersoft.studio.editor.layout.VerticalRowLayout"/>
<property name="com.jaspersoft.studio.crosstab.style.header" value="Crosstab_CH"/>
<property name="com.jaspersoft.studio.crosstab.style.group" value="Crosstab_CG"/>
<property name="com.jaspersoft.studio.crosstab.style.total" value="Crosstab_CT"/>
<property name="com.jaspersoft.studio.crosstab.style.detail" value="Crosstab_CD"/>
<property name="com.jaspersoft.studio.crosstab.style.header" value="Crosstab 1_CH"/>
<property name="com.jaspersoft.studio.crosstab.style.group" value="Crosstab 1_CG"/>
<property name="com.jaspersoft.studio.crosstab.style.total" value="Crosstab 1_CT"/>
<property name="com.jaspersoft.studio.crosstab.style.detail" value="Crosstab 1_CD"/>
<property name="com.jaspersoft.studio.unit.height" value="pixel"/>
<property name="com.jaspersoft.studio.unit.width" value="px"/>
</reportElement>
<crosstabDataset>
<dataset resetType="Report"/>
</crosstabDataset>
<crosstabHeaderCell>
<cellContents mode="Opaque" style="Crosstab 1_CH">
<textField>
<reportElement style="Crosstab 1_CH" mode="Transparent" x="0" y="0" width="120" height="20" uuid="be9b78cc-a34f-4c09-bbca-f4522a6a242c"/>
<box leftPadding="2"/>
<textElement verticalAlignment="Middle"/>
<textFieldExpression><![CDATA["Projekt"]]></textFieldExpression>
</textField>
</cellContents>
</crosstabHeaderCell>
<rowGroup name="Projekt" width="120" totalPosition="End">
<bucket class="java.lang.String">
<bucketExpression><![CDATA[$F{Projekt}]]></bucketExpression>
</bucket>
<crosstabRowHeader>
<cellContents mode="Opaque" style="Crosstab_CH">
<cellContents mode="Opaque" style="Crosstab 1_CG">
<textField>
<reportElement x="0" y="0" width="120" height="20" uuid="66ba7f29-ac72-4518-8ed4-1e2e8a285a70"/>
<reportElement mode="Transparent" x="0" y="0" width="120" height="20" uuid="d2c475f0-9195-4ca0-a7e8-a04dd542b003"/>
<box leftPadding="2"/>
<textElement verticalAlignment="Middle"/>
<textFieldExpression><![CDATA[$V{Projekt}]]></textFieldExpression>
</textField>
</cellContents>
</crosstabRowHeader>
<crosstabTotalRowHeader>
<cellContents mode="Opaque" style="Crosstab_CT">
<cellContents mode="Opaque" style="Crosstab 1_CT">
<staticText>
<reportElement x="0" y="0" width="120" height="20" forecolor="#FFFFFF" uuid="0a7ad23e-c2af-497e-8ce8-5fb597b278b6"/>
<reportElement x="0" y="0" width="120" height="20" uuid="d86ee506-a52f-44c2-b611-a517193bd6d2"/>
<box leftPadding="2"/>
<textElement verticalAlignment="Middle"/>
<text><![CDATA[Gesamt]]></text>
</staticText>
</cellContents>
@ -404,58 +439,60 @@ Start]]></text> @@ -404,58 +439,60 @@ Start]]></text>
<bucketExpression><![CDATA[$F{Ausführungsstatus}]]></bucketExpression>
</bucket>
<crosstabColumnHeader>
<cellContents mode="Opaque" style="Crosstab_CH">
<cellContents mode="Opaque" style="Crosstab 1_CG">
<textField>
<reportElement x="0" y="0" width="60" height="20" uuid="d659d9cd-f101-4d58-9d0e-d70f39c6a788"/>
<reportElement style="Crosstab 1_CH" x="0" y="0" width="60" height="20" uuid="4f65ec09-3bfe-4253-b112-dbc5f2ea679c"/>
<textElement textAlignment="Center" verticalAlignment="Middle"/>
<textFieldExpression><![CDATA[$V{Ausführungsstatus}]]></textFieldExpression>
</textField>
</cellContents>
</crosstabColumnHeader>
<crosstabTotalColumnHeader>
<cellContents mode="Opaque" style="Crosstab_CT">
<cellContents mode="Opaque" style="Crosstab 1_CT">
<staticText>
<reportElement x="0" y="0" width="60" height="20" forecolor="#FFFFFF" uuid="dff64fcd-eefa-4952-b878-318ea9871232"/>
<reportElement style="Crosstab 1_CH" x="0" y="0" width="60" height="20" uuid="327f5dbb-df3d-4255-b44b-82342cb06500"/>
<textElement textAlignment="Center" verticalAlignment="Middle"/>
<text><![CDATA[Summe]]></text>
</staticText>
</cellContents>
</crosstabTotalColumnHeader>
</columnGroup>
<measure name="Testfall Schlüssel_MEASURE" class="java.lang.Integer" calculation="Count">
<measureExpression><![CDATA[$F{Testfall Schlüssel}]]></measureExpression>
<measure name="Projekt_MEASURE" class="java.lang.Integer" calculation="Count">
<measureExpression><![CDATA[$F{Projekt}]]></measureExpression>
</measure>
<crosstabCell width="60" height="20">
<cellContents mode="Opaque" style="Crosstab_CD">
<cellContents mode="Opaque" style="Crosstab 1_CD">
<textField>
<reportElement x="0" y="0" width="60" height="20" uuid="5c355444-462d-4fb9-a027-d8b4e4ea7dca"/>
<textElement textAlignment="Center"/>
<textFieldExpression><![CDATA[$V{Testfall Schlüssel_MEASURE}]]></textFieldExpression>
<reportElement x="0" y="0" width="60" height="20" uuid="be398cc7-2150-428d-9aba-8bac46fdf733"/>
<textElement textAlignment="Center" verticalAlignment="Middle"/>
<textFieldExpression><![CDATA[$V{Projekt_MEASURE}]]></textFieldExpression>
</textField>
</cellContents>
</crosstabCell>
<crosstabCell width="60" height="20" columnTotalGroup="Ausführungsstatus">
<cellContents mode="Opaque" style="Crosstab_CT">
<cellContents mode="Opaque" style="Crosstab 1_CG">
<textField>
<reportElement x="0" y="0" width="60" height="20" forecolor="#FFFFFF" uuid="8c04e33d-e87a-4647-b9e4-f92604ede2a0"/>
<textElement textAlignment="Center"/>
<textFieldExpression><![CDATA[$V{Testfall Schlüssel_MEASURE}]]></textFieldExpression>
<reportElement x="0" y="0" width="60" height="20" uuid="3cdf1245-05ab-4c08-ae8a-8b11145c72d5"/>
<textElement textAlignment="Center" verticalAlignment="Middle"/>
<textFieldExpression><![CDATA[$V{Projekt_MEASURE}]]></textFieldExpression>
</textField>
</cellContents>
</crosstabCell>
<crosstabCell width="60" height="20" rowTotalGroup="Projekt">
<cellContents mode="Opaque" style="Crosstab_CT">
<cellContents mode="Opaque" style="Crosstab 1_CT">
<textField>
<reportElement x="0" y="0" width="60" height="20" forecolor="#FFFFFF" uuid="85a23534-881f-4026-bdaa-f7c70efcb279"/>
<textElement textAlignment="Center"/>
<textFieldExpression><![CDATA[$V{Testfall Schlüssel_MEASURE}]]></textFieldExpression>
<reportElement x="0" y="0" width="60" height="20" uuid="665ae08d-6e46-41c7-a1a0-def63f93f50e"/>
<textElement textAlignment="Center" verticalAlignment="Middle"/>
<textFieldExpression><![CDATA[$V{Projekt_MEASURE}]]></textFieldExpression>
</textField>
</cellContents>
</crosstabCell>
<crosstabCell width="60" height="20" rowTotalGroup="Projekt" columnTotalGroup="Ausführungsstatus">
<cellContents mode="Opaque" style="Crosstab_CT">
<cellContents mode="Opaque" style="Crosstab 1_CT">
<textField>
<reportElement x="0" y="0" width="60" height="20" forecolor="#FFFFFF" uuid="62f83d0e-3e63-49ba-808f-b339a59b1461"/>
<textElement textAlignment="Center"/>
<textFieldExpression><![CDATA[$V{Testfall Schlüssel_MEASURE}]]></textFieldExpression>
<reportElement x="0" y="0" width="60" height="20" uuid="ac50ad79-b942-43fb-a0bb-26da7c4592a8"/>
<textElement textAlignment="Center" verticalAlignment="Middle"/>
<textFieldExpression><![CDATA[$V{Projekt_MEASURE}]]></textFieldExpression>
</textField>
</cellContents>
</crosstabCell>

Loading…
Cancel
Save