Files
d.velop/Kleeberg/migration/migration_akte_eigenverwaltung.groovy
2024-06-19 16:54:31 +02:00

337 lines
9.8 KiB
Groovy

import com.dvelop.d3.server.Document
import com.dvelop.d3.server.core.D3Interface
import com.dvelop.d3.server.exceptions.SQLException
import com.dvelop.d3.server.exceptions.D3Exception
import groovy.transform.Field
D3Interface d3 = getProperty("d3");
def prg = "migration_akte.groovy";
def version = "0.1";
def kunde = "Dr. Kleeberg & Partner GmbH";
/////////////////////////////////////////////////////////////////////////
// debug = 0 => es finden Änderungen am Datenbestand statt
// debug = 1 => es finden keine Änderungen am Datenbestand statt
@Field debug = 0;
// In welcher Tabelle soll nach den zu erstellenden Akten gesucht werden?
@Field zieltabelle = "mig_eigenverwaltungsakte";
// Konfiguration der Aktenartkürzel
@Field dokuart_sammelakte = "";
@Field dokuart_hauptakte = "AEVAK";
@Field dokuart_oberregisterakte = "AEVOR";
@Field dokuart_registerakte = "AEVRE";
// der hier konfigurierte Wert wird verwendet, wenn kein sonstiger Hauptaktenname gefunden wird.
@Field standard_hauptaktenname = "Eigenverwaltungsakte";
// DDF 1 / ADM_Aktentyp aus der Aktenart ADM_Verwaltung Mandantenakte (AVMNT) - mit diesem Schlüssel werden die benötigten (Ober-)Register aus den Stammdaten in der Aktenart AVMNT ermittelt.
@Field aktenschluessel = "Beratungsakte";
/////////////////////////////////////////////////////////////////////////
def debugtext;
switch (debug)
{
case 0:
debugtext = "ausgeschaltet";
break;
default:
debugtext = "eingeschaltet (keine Aenderungen am Datenbestand)";
break;
}
xlog( d3, 4, "************************************************" );
xlog( d3, 4, "* Programm : " + prg );
xlog( d3, 4, "* Version : " + version );
xlog( d3, 4, "* Kunde : " + kunde );
xlog( d3, 4, "* geschrieben von : calb / d.velop AG" );
xlog( d3, 4, "* (c) d.velop AG" );
xlog( d3, 4, "************************************************" );
xlog( d3, 4, "Parameter: " );
xlog( d3, 4, "* DEBUG : " + debugtext );
xlog( d3, 4, "* Aktenart Sammelakte : " + dokuart_sammelakte );
xlog( d3, 4, "* Aktenart Hauptakte : " + dokuart_hauptakte );
xlog( d3, 4, "* Aktenart Oberregisterakte : " + dokuart_oberregisterakte );
xlog( d3, 4, "* Aktenart Registerakte : " + dokuart_registerakte );
xlog( d3, 4, "* Zieltabelle : " + zieltabelle );
xlog( d3, 4, "* Standard-Hauptaktenname : " + standard_hauptaktenname );
xlog( d3, 4, "* Aktenschluessel : " + aktenschluessel );
xlog( d3, 4, "************************************************" );
def sqlQuery = "select top (100) id,ddf48,ddf10,ddf21,ddf25,ddf60,ddf69,ddf41 from " + zieltabelle + " where fehler is null and doku_id is null";
treffer = d3.sql.executeAndGet( (String) sqlQuery );
xlog( d3, 4, " Es wurden " + treffer.size() + " Treffer gefunden." );
xlog( d3, 4, "************************************************" );
if ( treffer.size() > 0 )
{
for ( i = 0; i < treffer.size(); i++ )
{
// Es wird eine neue Hauptakte erstellt
def newDocfield_10, newDocfield_21, newDocfield_25, newDocfield_41, newDocfield_48, newDocfield_60 = [ ], newDocfield_69 = [ ];
xlog( d3, 4, treffer[ i ].ddf10 + " / " + treffer[ i ].id + ": setze Aktennummer DDF10 : [" + treffer[ i ].ddf10 + "]" );
newDocfield_10 = treffer[ i ].ddf10;
if ( treffer[ i ].ddf21 )
{
xlog( d3, 4, treffer[ i ].ddf10 + " / " + treffer[ i ].id + ": setze Aktenname DDF21 : [" + treffer[ i ].ddf21 + "]" );
newDocfield_21 = treffer[ i ].ddf21;
}
else
{
xlog( d3, 3, treffer[ i ].ddf10 + " / " + treffer[ i ].id + ": Aktenname wurde nicht gefunden. Setze Standardbezeichnung '" + standard_hauptaktenname + "'." );
xlog( d3, 4, treffer[ i ].ddf10 + " / " + treffer[ i ].id + ": setze Aktenname DDF21 : <" + standard_hauptaktenname + ">" );
newDocfield_21 = standard_hauptaktenname;
}
xlog( d3, 4, treffer[ i ].ddf10 + " / " + treffer[ i ].id + ": setze Geschaeftsfuehrer DDF25 : [" + treffer[ i ].ddf25 + "]" );
newDocfield_25 = treffer[ i ].ddf25;
xlog( d3, 4, treffer[ i ].ddf10 + " / " + treffer[ i ].id + ": setze Briefkopf DDF41 : [" + treffer[ i ].ddf41 + "]" );
newDocfield_41 = treffer[ i ].ddf41;
xlog( d3, 4, treffer[ i ].ddf10 + " / " + treffer[ i ].id + ": setze Unique-ID Migration DDF48 : [" + treffer[ i ].ddf48 + "]" );
newDocfield_48 = treffer[ i ].ddf48;
// Postempfänger
if ( treffer[ i ].ddf60 )
{
def splitted_str_array = treffer[ i ].ddf60.split( ';' );
for ( int j = 0; j < splitted_str_array.length; j++ )
{
def filler = " ";
if ( j >= 10 )
{
filler = "";
}
xlog( d3, 4, treffer[ i ].ddf10 + " / " + treffer[ i ].id + ": Setze Postempfaenger DDF60 / " + filler + j + " : [" + splitted_str_array[ j ] + "]" );
newDocfield_60[ j ] = splitted_str_array[ j ];
}
}
// Berechtigter:
if ( treffer[ i ].ddf69 )
{
def splitted_str_array = treffer[ i ].ddf69.split( ';' );
for ( int j = 0; j < splitted_str_array.length; j++ )
{
def filler = " ";
if ( j >= 10 )
{
filler = "";
}
xlog( d3, 4, treffer[ i ].ddf10 + " / " + treffer[ i ].id + ": Setze Berechtigter DDF69 / " + filler + j + " : [" + splitted_str_array[ j ] + "]" );
newDocfield_69[ j ] = splitted_str_array[ j ];
}
}
// Eigenverwaltungsakten haben keine Sammelakten, daher ist der Part entfernt worden
// Akte mit Stammdaten und Infos aus der Tabelle "zieltabelle" erstellen
// Registerstruktur unterhalb ebenfalls erstellen
Document newDoc = d3.archive.newDocument();
newDoc.type = dokuart_hauptakte;
newDoc.status = Document.DocStatus.DOC_STAT_PROCESSING;
newDoc.editor = "dvelop";
newDoc.field[ 10 ] = newDocfield_10;
newDoc.field[ 21 ] = newDocfield_21;
newDoc.field[ 25 ] = newDocfield_25;
newDoc.field[ 41 ] = newDocfield_41;
newDoc.field[ 48 ] = newDocfield_48;
for ( int i = 0; i < newDocfield_60.size(); i++ )
{
newDoc.field[ 60 ][ i + 1 ] = newDocfield_60[ i ];
}
for ( int i = 0; i < newDocfield_69.size(); i++ )
{
newDoc.field[ 69 ][ i + 1 ] = newDocfield_69[ i ];
}
xlog( d3, 4, treffer[ i ].ddf10 + " / " + treffer[ i ].id + ": =============================" );
//Pruefung ob die anzulegende Akte ggf. schon im System angelegt wurde
sqlQuery = "select doku_id from firmen_spezifisch where kue_dokuart = '" + dokuart_hauptakte + "' AND dok_dat_feld_10 = '" + newDocfield_10 + "'";
ergebnis = d3.sql.executeAndGet( (String) sqlQuery );
if ( ergebnis.size() > 0 ) {
fehler( d3, treffer[ i ].ddf10 + " / " + treffer[ i ].id + ": Aktenanlage [" + newDoc.field[ 10 ] + "] nicht durchgefuehrt da die Akte bereits existiert doku_id: " + ergebnis[ 0 ].doku_id, (int) treffer[ i ].id );
continue;
}
def aktenanlage_erfolgreich = true;
if ( debug == 0 )
{
try
{
newDoc = d3.archive.importDocument( newDoc );
}
catch ( D3Exception e )
{
fehler( d3, treffer[ i ].ddf10 + " / " + treffer[ i ].id + ": Akte [" + newDoc.field[ 10 ] + "] konnte nicht erzeugt werden: " + e.message, (int) treffer[ i ].id );
aktenanlage_erfolgreich = false;
}
if ( aktenanlage_erfolgreich )
{
// sichern der erzeugten Doku-ID
if ( debug == 0 )
{
sqlQuery = "update " + zieltabelle + " set doku_id = '" + newDoc.id + "' where id = " + treffer[ i ].id;
d3.sql.execute( sqlQuery );
xlog( d3, 4, treffer[ i ].ddf10 + " / " + treffer[ i ].id + ": Aktenanlage [" + newDoc.field[ 10 ] + "] erfolgreich, doku_id: [" + newDoc.id + "]" );
}
}
}
else
{
xlog( d3, 4, treffer[ i ].ddf10 + " / " + treffer[ i ].id + ": Keine Aktenanlage fuer [" + newDoc.field[ 10 ] + "] (Debug-Modus eingeschaltet)." );
}
// Eigenverwaltungsakten haben keine fest definierte Unterstruktur, daher ist der Code hier entfernt worden
xlog( d3, 4, "************************************************" );
}
}
def fehler( D3Interface d3, String meldung, int id )
{
def meldung_db;
if ( meldung.length() > 250 )
{
meldung_db = meldung.substring( 0, 249 );
}
else
{
meldung_db = meldung;
}
if ( debug == 0 )
{
sql = "update " + zieltabelle + " set fehler = '" + meldung_db + "' where id = " + id;
d3.sql.execute( sql );
}
xlog( d3, 2, meldung );
}
def xlog( D3Interface d3, int loglevel, String logtext )
{
def logdatei = "d:\\d3\\apps\\" + zieltabelle + ".txt";
def g_loglevel = 5;
def g_logdirect = "BEIDE"; // BEIDE oder D3LOG oder DATEI
def date = new Date();
def zeitstempel = date.format( "yyyy.MM.dd HH:mm:ss", TimeZone.getTimeZone('CET') );
def loglevel_lang = "[INFO ]";
if ( loglevel <= g_loglevel )
{
switch ( loglevel )
{
case 1:
loglevel_lang = "[FATAL]";
if ( ( g_logdirect == "D3LOG" ) || ( g_logdirect == "BEIDE" ) )
{
d3.log.critical( logtext );
}
break;
case 2:
loglevel_lang = "[ERROR]";
if ( ( g_logdirect == "D3LOG" ) || ( g_logdirect == "BEIDE" ) )
{
d3.log.error( logtext );
}
break;
case 3:
loglevel_lang = "[WARN ]";
if ( ( g_logdirect == "D3LOG" ) || ( g_logdirect == "BEIDE" ) )
{
d3.log.warn( logtext );
}
break;
case 4:
loglevel_lang = "[INFO ]";
if ( ( g_logdirect == "D3LOG" ) || ( g_logdirect == "BEIDE" ) )
{
d3.log.info( logtext );
}
break;
case 5:
loglevel_lang = "[DEBUG]";
// Da die d.3 Server i.d.R. nicht im Debug-Modus laufen, erscheinen DEBUG-Meldungen nicht im Log.
if ( ( g_logdirect == "D3LOG" ) || ( g_logdirect == "BEIDE" ) )
{
d3.log.debug( logtext );
}
break;
}
}
if ( ( g_logdirect == "DATEI" ) || ( g_logdirect == "BEIDE" ) )
{
new File( logdatei ).append( zeitstempel + " " + loglevel_lang + " " + logtext + "\n", "UTF8" );
}
return 0;
}