From 1f0a600aa5059ce74e5416c8eb0b9047a9d04f86 Mon Sep 17 00:00:00 2001
From: Daniel Quathamer <danielq@memtext.de>
Date: Fri, 13 Dec 2024 08:10:57 +0100
Subject: [PATCH] =?UTF-8?q?Neue=20virtuelle=20Tabelle=20Pr=C3=BCfungen=20#?=
 =?UTF-8?q?6?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 src-modules/module/rpta/conf/rpta.xml         |   2 +
 .../pruefungen_nach_ppruef_virtuell.sql       | 429 ++++++++++++++++++
 2 files changed, 431 insertions(+)
 create mode 100644 src-modules/module/rpta/schluesseltabellen/pruefungen_nach_ppruef_virtuell.sql

diff --git a/src-modules/module/rpta/conf/rpta.xml b/src-modules/module/rpta/conf/rpta.xml
index 6a455bb..a6f76b3 100644
--- a/src-modules/module/rpta/conf/rpta.xml
+++ b/src-modules/module/rpta/conf/rpta.xml
@@ -375,6 +375,7 @@ parent="Berichtsassistent">Abfragen zur Administration von Berichtsassistent </t
 <nativeaction sql="" scriptfile="$RPTA_PFAD/schluesseltabellen/sachgebiete_fuellen.sql" database=""/>
 <nativeaction sql="" scriptfile="$RPTA_PFAD/schluesseltabellen/sx_stylesheets_einfuegen.sql" database=""/>
 <nativeaction sql="" scriptfile="$RPTA_PFAD/schluesseltabellen/studierende_datenblatt_virtuell.sql" database=""/>
+<nativeaction sql="" scriptfile="$RPTA_PFAD/schluesseltabellen/pruefungen_nach_ppruef_virtuell.sql" database=""/>
 <nativeaction sql="" scriptfile="$RPTA_PFAD/schluesseltabellen/rpta_column_layout_sos_stud_astat_rsz_fuellen.sql" database=""/>
 </action>
 </install-step>
@@ -392,6 +393,7 @@ parent="Berichtsassistent">Abfragen zur Administration von Berichtsassistent </t
 <nativeaction sql="" scriptfile="$RPTA_PFAD/schluesseltabellen/sx_stylesheets_einfuegen.sql" database=""/>
 <nativeaction sql="" scriptfile="$RPTA_PFAD/upgrade/rpta_upgrade_man.sql" database=""/>
 <nativeaction sql="" scriptfile="$RPTA_PFAD/schluesseltabellen/studierende_datenblatt_virtuell.sql" database=""/>
+<nativeaction sql="" scriptfile="$RPTA_PFAD/schluesseltabellen/pruefungen_nach_ppruef_virtuell.sql" database=""/>
 <nativeaction sql="" scriptfile="$RPTA_PFAD/schluesseltabellen/rpta_column_layout_sos_stud_astat_rsz_fuellen.sql" database=""/>
 
 </action>
diff --git a/src-modules/module/rpta/schluesseltabellen/pruefungen_nach_ppruef_virtuell.sql b/src-modules/module/rpta/schluesseltabellen/pruefungen_nach_ppruef_virtuell.sql
new file mode 100644
index 0000000..354dfbf
--- /dev/null
+++ b/src-modules/module/rpta/schluesseltabellen/pruefungen_nach_ppruef_virtuell.sql
@@ -0,0 +1,429 @@
+--freemarker template
+<sqlvars>
+<sqlvar name="sos_lab_pord_exists">
+select sp_table_exists('sos_lab_pord') from xdummy;
+</sqlvar>
+<sqlvar name="fact_table_source" type="hash">
+select name
+       from sx_tables where name ='sos_lab_pord'
+       
+</sqlvar>
+<sqlvar name="added_tables" type="hashsequence"><![CDATA[
+select 1::smallint as sortnr,
+name, trim(name) ||'_'   as prefix,
+caption,
+'dim_studiengang.tid=sos_lab_pord.tid_stg and sos_lab_pord.sem_der_pruefung >= semester_von and sos_lab_pord.sem_der_pruefung <= semester_bis' as joinclause
+       from sx_tables where name  in ('dim_studiengang')
+union select 10::smallint as sortnr,
+name, trim(name) ||'_'   as prefix,
+caption,
+'sos_lab_pord.labnr=sos_lab.labnr and sos_lab_pord.sourcesystem=sos_lab.sourcesystem' as joinclause
+       from sx_tables where name  in ('sos_lab')
+union select 20::smallint as sortnr,
+name, trim(name) ||'_'   as prefix,
+caption,
+'cif.apnr=sos_lab_pord.pversion and sos_lab_pord.sourcesystem=5 and cif.key=632' as joinclause
+       from sx_tables where name  in ('cif')
+
+]]></sqlvar>
+<sqlvar name="fields_target" type="hashsequence"><![CDATA[
+select tid, table_name,
+       name,
+       name as targetname
+       from sx_fields where table_name ='${fact_table_source.name}'
+       --and currentlyused=1
+       and name in ('matrikel_nr',
+'sem_der_pruefung',
+'hrst',
+'fach_sem_zahl',
+'kz_rueck_beur_ein',
+'part',
+'pnr',
+'pversuch',
+'prueck',
+'pversion',
+'pstatus',
+'d_abg_pruefung',
+'note',
+'pvermerk',
+'pform',
+'studiengang_nr',
+'fach_nr',
+'is_modul',
+'tid_stg',
+'pdtxt',
+'sourcesystem',
+'labnr'
+)
+       union
+       select tid,table_name,
+       name,
+       'dim_studiengang_' || name as targetname
+       from sx_fields where table_name ='dim_studiengang'
+       and currentlyused=1
+       union
+       select tid,table_name,
+       name,
+       'sos_lab_' || name as targetname
+       from sx_fields where table_name ='sos_lab'
+       and name in ('ppruef1','ppruef2','panerk')
+       union
+       select tid,table_name,
+       name,
+       'pversion_ktxt'  as targetname
+       from sx_fields where table_name ='cif'
+       and name in ('lang_3')
+       
+       
+       order by 1
+
+]]>
+</sqlvar>
+</sqlvars>
+
+<#if sos_lab_pord_exists==1>
+
+<#assign  fact_table_target = {"name":"sos_lab_pord_ppruef", "caption":"Modulprüfungen und Prüfer_innen"}
+   />
+
+drop index if exists ix_sos_lab_pord_is_modul;
+
+create  index ix_sos_lab_pord_is_modul on sos_lab_pord (is_modul );
+
+CREATE temp table tmp_tables(
+name CHAR(255) , 
+caption CHAR(255) , 
+description CHAR(255) , 
+table_type CHAR(255) , 
+systeminfo_id INTEGER  , 
+systeminfo_orig INTEGER  , 
+thema CHAR(255) , 
+sachgebiete_id CHAR(255) 
+);
+CREATE temp TABLE tmp_fields(
+tid serial NOT NULL,
+table_name VARCHAR(255)  not null, 
+name VARCHAR(255)  not null, 
+caption VARCHAR(255) , 
+description VARCHAR(255) , 
+field_type VARCHAR(255)  not null, 
+field_size VARCHAR(255)  , 
+field_not_null smallint,
+currentlyused SMALLINT , 
+is_primarykey SMALLINT  default 0 , 
+foreignkey_tab VARCHAR(255) , 
+foreignkey_col VARCHAR(255) , 
+foreignkey_int VARCHAR(255) , 
+foreignkey_cap VARCHAR(255) , 
+foreignkey_cond VARCHAR(255) , 
+foreignkey_func VARCHAR(255) , 
+check_integrity SMALLINT, 
+is_sum SMALLINT  default 1,
+foreignkey_uniquename VARCHAR(255)
+
+);
+
+
+
+update sx_fields set 
+       is_sum=0
+       where table_name='sos_lab_pord'
+       and name!='summe';
+update sx_fields set 
+       is_sum=1
+       where table_name='sos_lab_pord'
+       and name='summe';
+       
+  
+insert into tmp_tables (
+name,
+caption,
+description,
+table_type,
+systeminfo_id,
+thema,
+sachgebiete_id
+) 
+select 
+'${fact_table_target.name}',
+'${fact_table_target.caption}',
+description,
+table_type,
+systeminfo_id,
+thema,
+sachgebiete_id
+from sx_tables where name='${fact_table_source.name}'
+;
+
+
+insert into tmp_fields (table_name,
+       name,
+       caption,
+       description,
+       field_type,
+       field_size,
+       field_not_null,
+       currentlyused,
+       is_primarykey,
+       foreignkey_tab,
+       foreignkey_col,
+       foreignkey_int,
+       foreignkey_cap,
+       foreignkey_cond,
+       foreignkey_func,
+       check_integrity,
+       is_sum,
+       foreignkey_uniquename) 
+select  '${fact_table_target.name}' as table_name,
+       name,
+       caption,
+       description,
+       field_type,
+       field_size,
+       field_not_null,
+       currentlyused,
+       is_primarykey,
+       foreignkey_tab,
+       foreignkey_col,
+       foreignkey_int,
+       foreignkey_cap,
+       foreignkey_cond,
+       foreignkey_func,
+       check_integrity,
+       is_sum,
+       foreignkey_uniquename
+       from sx_fields where table_name ='${fact_table_source.name}'
+       and currentlyused=1;
+<#foreach added_table in added_tables>
+insert into tmp_fields (table_name,
+       name,
+       caption,
+       description,
+       field_type,
+       field_size,
+       field_not_null,
+       currentlyused,
+       is_primarykey,
+       foreignkey_tab,
+       foreignkey_col,
+       foreignkey_int,
+       foreignkey_cap,
+       foreignkey_cond,
+       foreignkey_func,
+       check_integrity,
+       is_sum,
+       foreignkey_uniquename) 
+select  '${fact_table_target.name}' as table_name,
+       '${added_table.prefix}' || name,
+       '${added_table.caption}: ' || caption,
+       description,
+       field_type,
+       field_size,
+       field_not_null,
+       currentlyused,
+       is_primarykey,
+       foreignkey_tab,
+       foreignkey_col,
+       foreignkey_int,
+       foreignkey_cap,
+       foreignkey_cond,
+       foreignkey_func,
+       check_integrity,
+       is_sum,
+       foreignkey_uniquename
+       from sx_fields where table_name ='${added_table.name}'
+       and currentlyused=1;
+</#foreach>
+
+CREATE temp TABLE tmp_rpta_resultset
+(
+    caption        varchar(255),
+   uniquename     varchar(255),
+   fieldclause    text,
+   joinclause     text,
+   whereclause    text,
+   systeminfo_id  integer
+);
+
+insert into tmp_rpta_resultset(caption,
+       uniquename,
+       systeminfo_id)
+       select '${fact_table_target.caption}',
+       '${fact_table_target.name}',
+       7
+;
+
+
+update tmp_rpta_resultset set fieldclause='
+<#foreach field_target in fields_target>
+${field_target.table_name}.${field_target.name} as ${field_target.targetname},
+</#foreach>
+null::varchar as dummy',
+joinclause='${fact_table_source.name}
+<#foreach added_table in added_tables>
+left outer join ${added_table.name} on (${added_table.joinclause})
+</#foreach>';
+
+select * into temp tmp_rs1 
+from rpta_resultset
+;
+
+update rpta_resultset set caption=T.caption,
+       fieldclause=T.fieldclause,
+       joinclause=T.joinclause,
+       whereclause=T.whereclause
+       from tmp_rpta_resultset T
+       where T.systeminfo_id=rpta_resultset.systeminfo_id
+       and T.uniquename=rpta_resultset.uniquename
+       ;
+
+insert into rpta_resultset(caption,
+       uniquename,
+       fieldclause,
+       joinclause,
+       whereclause,
+       systeminfo_id)
+select caption,
+       uniquename,
+       fieldclause,
+       joinclause,
+       whereclause,
+       systeminfo_id
+       from tmp_rpta_resultset
+       where 0=(select count(*) 
+       from tmp_rs1 T
+       where T.systeminfo_id=tmp_rpta_resultset.systeminfo_id
+       and T.uniquename=tmp_rpta_resultset.uniquename)
+       ;
+drop table tmp_rpta_resultset;
+drop table tmp_rs1;
+
+delete from sx_tables where name
+in (select T.name from tmp_tables  T);
+
+insert into sx_tables (name,caption,description,table_type,systeminfo_id,systeminfo_orig,thema,sachgebiete_id)
+select name,caption,description,table_type,systeminfo_id,systeminfo_orig,thema,sachgebiete_id
+from tmp_tables;
+
+
+delete from sx_fields where table_name
+in (select T.table_name from tmp_fields T);
+
+insert into sx_fields (table_name,name,caption,description,field_type,
+field_size,
+field_not_null,
+currentlyUsed,
+foreignkey_tab,
+foreignkey_col,
+foreignkey_cap,
+foreignkey_int,
+foreignkey_cond,
+foreignkey_func,
+check_integrity,
+is_sum,
+foreignkey_uniquename
+)
+select 
+F.table_name,F.name,F.caption,F.description,F.field_type,
+F.field_size,
+F.field_not_null,
+F.currentlyUsed,
+F.foreignkey_tab,
+F.foreignkey_col,
+F.foreignkey_cap,
+F.foreignkey_int,
+F.foreignkey_cond,
+F.foreignkey_func,
+F.check_integrity,
+F.is_sum,
+F.foreignkey_uniquename
+
+from tmp_fields F;
+
+
+drop table tmp_fields;
+drop table tmp_tables;
+
+
+--rpta_column füllen:
+select * into temp tmp_rc1
+from rpta_column;
+
+
+create temp table tmp_rpta_column(
+ uniquename       varchar(255)   NOT NULL,
+   caption          varchar(255),
+   srcfieldname     varchar(255),
+   column_type      integer,
+   col_function     text,
+   is_aggregate     smallint,
+   resultset_id     integer,
+   description      text,
+   custom integer default 0
+   );
+
+insert into tmp_rpta_column(   uniquename,
+       caption,
+       srcfieldname,
+       column_type,
+       col_function,
+       is_aggregate,
+       resultset_id,
+       description)
+       select  F.name as  uniquename,
+       coalesce(T.caption,T.name) || ' - ' || F.caption,
+       F.name as srcfieldname,
+       1 as column_type,
+       (case when F.is_sum=1 then 'sum' else null::varchar end)  as col_function,
+       (case when F.is_sum=1 then 1 else 0 end) as is_aggregate,
+       R.tid as resultset_id,
+       F.description
+from rpta_resultset R, sx_fields F left outer join sx_tables T on (T.name=F.table_name) 
+where F.table_name='${fact_table_target.name}'
+and R.uniquename='${fact_table_target.name}'
+and F.currentlyused=1
+;
+
+update rpta_column set 
+       caption=T.caption,
+       srcfieldname=T.srcfieldname,
+       column_type=T.column_type,
+       col_function=T.col_function,
+       is_aggregate=T.is_aggregate,
+       resultset_id=R.tid,
+       description=T.description,
+       custom=T.custom
+       from tmp_rpta_column T, rpta_resultset R
+where T.uniquename=rpta_column.uniquename
+and rpta_column.resultset_id=R.tid
+and R.uniquename='${fact_table_target.name}'
+;
+insert into rpta_column(   uniquename,
+       caption,
+       srcfieldname,
+       column_type,
+       col_function,
+       is_aggregate,
+       resultset_id,
+       description,
+       custom)
+select T.uniquename,
+T.caption,
+T.srcfieldname,
+T.column_type,
+T.col_function,
+T.is_aggregate,
+R.tid as resultset_id,
+T.description,
+T.custom
+       from tmp_rpta_column T, rpta_resultset R
+       where R.uniquename='${fact_table_target.name}'
+       and 0=(select count(*) from tmp_rc1 C
+       where C.uniquename=T.uniquename
+       and C.resultset_id=R.tid)
+       ;
+
+drop table tmp_rpta_column;
+drop table tmp_rc1;
+
+</#if> --wenn sos_lab_pord_exists=1