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

566 lines
18 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");
@Field prg = "migration_verknuepfungen_1.groovy";
@Field version = "0.1";
@Field 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;
/////////////////////////////////////////////////////////////////////////
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, "************************************************" );
def sqlQuery = "select top (100) id,unique_id_doc,unique_id_fol,ddf10,ddf3,ddf4,ddf23,ddf17,ddf32 from mig_link_docs_2 where doku_id_target_fol is null and ddf3 is not null and ddf10 like '%DA%' and fehler is null and id < 177869 ";
resultRows = d3.sql.executeAndGet( (String) sqlQuery );
xlog( d3, 4, " Es wurden " + resultRows.size() + " Treffer gefunden." );
xlog( d3, 4, "************************************************" );
if ( resultRows.size() > 0 )
{
for( int i = 0 ; i <= resultRows.size() - 1 ; i++ )
{
def dummy_ddf3, dummy_ddf4, dummy_ddf23, dummy_ddf17, dummy_ddf32;
xlog( d3, 4, resultRows[ i ].ddf10 + " / " + resultRows[ i ].id + ": pruefen, ob folgende Aktenstruktur existiert:" );
xlog( d3, 4, resultRows[ i ].ddf10 + " / " + resultRows[ i ].id + ": Unique-ID Dokument : [" + resultRows[ i ].unique_id_doc + "]" );
xlog( d3, 4, resultRows[ i ].ddf10 + " / " + resultRows[ i ].id + ": DDF10 / Aktennummer : [" + resultRows[ i ].ddf10 + "]" );
if ( ( ! resultRows[ i ].ddf3 ) || ( resultRows[ i ].ddf3 == "null" ) )
{
dummy_ddf3 = "";
}
else
{
dummy_ddf3 = resultRows[ i ].ddf3;
}
xlog( d3, 4, resultRows[ i ].ddf10 + " / " + resultRows[ i ].id + ": DDF03 / Oberregister : [" + dummy_ddf3 + "]" );
if ( ( ! resultRows[ i ].ddf4 ) || ( resultRows[ i ].ddf4 == "null" ) )
{
dummy_ddf4 = "";
}
else
{
dummy_ddf4 = resultRows[ i ].ddf4;
}
xlog( d3, 4, resultRows[ i ].ddf10 + " / " + resultRows[ i ].id + ": DDF04 / Register : [" + dummy_ddf4 + "]" );
if ( ( ! resultRows[ i ].ddf23 ) || ( resultRows[ i ].ddf23 == "null" ) )
{
dummy_ddf23 = "";
}
else
{
dummy_ddf23 = resultRows[ i ].ddf23;
}
xlog( d3, 4, resultRows[ i ].ddf10 + " / " + resultRows[ i ].id + ": DDF23 / Unterregister : [" + dummy_ddf23 + "]" );
if ( ( ! resultRows[ i ].ddf17 ) || ( resultRows[ i ].ddf17 == "null" ) )
{
dummy_ddf17 = "";
}
else
{
dummy_ddf17 = resultRows[ i ].ddf17;
}
xlog( d3, 4, resultRows[ i ].ddf10 + " / " + resultRows[ i ].id + ": DDF17 / 2. Unterregister : [" + dummy_ddf17 + "]" );
if ( ( ! resultRows[ i ].ddf32 ) || ( resultRows[ i ].ddf32 == "null" ) )
{
dummy_ddf32 = "";
}
else
{
dummy_ddf32 = resultRows[ i ].ddf32;
}
xlog( d3, 4, resultRows[ i ].ddf10 + " / " + resultRows[ i ].id + ": DDF32 / 3. Unterregister : [" + dummy_ddf32 + "]" );
def typ = resultRows[ i ].ddf10.substring(5, 7);
xlog( d3, 5, resultRows[ i ].ddf10 + " / " + resultRows[ i ].id + ": erkannter Typ: " + typ );
def orakte, rakte, urakte, urakte2, urakte3;
switch ( typ )
{
case "FI":
akte = "AFIBA";
orakte = "AFIOR";
rakte = "AFIRA";
urakte = "AFIUR";
urakte2 = "AFIU2";
urakte3 = "";
break;
case "DA":
akte = "ADAUR";
orakte = "AOREG";
rakte = "AREGS";
urakte = "AUREG";
urakte2 = "AURG2";
urakte3 = "AURG3";
break;
case "ST":
akte = "ASTEU";
orakte = "ASTOR";
rakte = "ASTRA";
urakte = "ASTUR";
urakte2 = "ASTU2";
urakte3 = "";
break;
case "BE":
akte = "ABERB";
orakte = "ABERO";
rakte = "ABERA";
urakte = "ABEUR";
urakte2 = "ABEU2";
urakte3 = "";
break;
case "BP":
akte = "ABETR";
orakte = "ABEOR";
rakte = "ABEPA";
urakte = "ABPUR";
urakte2 = "ABPU2";
urakte3 = "";
break;
case "LO":
akte = "ALOJA";
orakte = "ALBOR";
rakte = "ALBRE";
urakte = "ALJUR";
urakte2 = "ALJR2";
urakte3 = "";
break;
case "LS":
akte = "ALBSA";
orakte = "ALBSO";
rakte = "ALORE";
urakte = "ALOUR";
urakte2 = "ALBU2";
urakte3 = "";
break;
case "JA":
akte = "AJAAA";
orakte = "AJAOB";
rakte = "AJAAB";
urakte = "AJAUR";
urakte2 = "AJAU2";
urakte3 = "";
break;
case "RE":
akte = "AAURE";
orakte = "AAURR";
rakte = "AAURA";
urakte = "AAURU";
urakte2 = "AAUR2";
urakte3 = "";
break;
}
def schritt_1 = [ "kue_dokuart": orakte, "dok_dat_feld_10": resultRows[ i ].ddf10, "dok_dat_feld_3": dummy_ddf3 ];
def schritt_2 = [ "kue_dokuart": rakte, "dok_dat_feld_10": resultRows[ i ].ddf10, "dok_dat_feld_3": dummy_ddf3, "dok_dat_feld_4": dummy_ddf4 ];
def schritt_3 = [ "kue_dokuart": urakte, "dok_dat_feld_10": resultRows[ i ].ddf10, "dok_dat_feld_3": dummy_ddf3, "dok_dat_feld_4": dummy_ddf4, "dok_dat_feld_23": dummy_ddf23 ];
def schritt_4 = [ "kue_dokuart": urakte2, "dok_dat_feld_10": resultRows[ i ].ddf10, "dok_dat_feld_3": dummy_ddf3, "dok_dat_feld_4": dummy_ddf4, "dok_dat_feld_23": dummy_ddf23, "dok_dat_feld_17": dummy_ddf17 ];
def schritt_5 = [ "kue_dokuart": urakte3, "dok_dat_feld_10": resultRows[ i ].ddf10, "dok_dat_feld_3": dummy_ddf3, "dok_dat_feld_4": dummy_ddf4, "dok_dat_feld_23": dummy_ddf23, "dok_dat_feld_17": dummy_ddf17, "dok_dat_feld_32": dummy_ddf32 ];
def schritte = [ schritt_1, schritt_2, schritt_3, schritt_4, schritt_5 ];
def gemerkte_doku_id;
def lege_akte_an;
for ( int m = 0; m <= schritte.size() - 1 ; m++ )
{
// Zusammenbauen des Such-Statements:
def STATEMENT = "select doku_id from firmen_spezifisch where ";
def log = "Suche nach folgenden Kriterien : ";
def x = 0;
def und;
def kein_problem = true;
lege_akte_an = true;
schritte[ m ].each { eintrag ->
//xlog( d3, 3, "Key [" + eintrag.key + "] Value [" + eintrag.value + "]" );
if ( x > 0 )
{
und = " and ";
}
else
{
und = "";
x = 1;
}
if ( ( eintrag.value == "" ) || ( eintrag.value == null ) )
{
kein_problem = false;
}
if ( ( eintrag.key == "kue_dokuart" ) && ( eintrag.value == "" ) )
{
kein_problem = false;
}
STATEMENT = STATEMENT + und + eintrag.key + " = '" + eintrag.value + "' ";
log = log + "[" + eintrag.key + "] => [" + eintrag.value + "] ";
}
if ( kein_problem )
{
xlog( d3, 4, resultRows[ i ].ddf10 + " / " + resultRows[ i ].id + ": " + log );
xlog( d3, 5, resultRows[ i ].ddf10 + " / " + resultRows[ i ].id + ": " + STATEMENT );
def ergebnis = d3.sql.executeAndGet( (String) STATEMENT );
if ( ergebnis.size() > 0 )
{
// Akte existiert
// Doku-ID merken:
gemerkte_doku_id = ergebnis[ 0 ].doku_id;
xlog( d3, 4, resultRows[ i ].ddf10 + " / " + resultRows[ i ].id + ": Akte existiert, gemerkte Doku-ID: [" + gemerkte_doku_id + "]" );
//def updatesql = "update mig_verknuepfung set ziel_dok = '" + ergebnis[ 0 ].doku_id + "' where id = " + resultRows[ i ].id;
}
else
{
xlog( d3, 4, resultRows[ i ].ddf10 + " / " + resultRows[ i ].id + ": Akte existiert nicht, muss angelegt werden." );
// Akte existiert nicht, muss angelegt werden:
Document newDoc = d3.archive.newDocument();
//xlog( d3, 2, "Schritte kue_dokuart = [" + schritte[ m ] + "]");
xlog( d3, 4, resultRows[ i ].ddf10 + " / " + resultRows[ i ].id + ": Setze Dokumentart [" + schritte[ m ].kue_dokuart + "]" );
newDoc.type = schritte[ m ].kue_dokuart;
newDoc.status = Document.DocStatus.DOC_STAT_RELEASE;
//newDoc.editor = "dvelop";
// Mit diesem Statement wird versucht, die Hauptakte zu finden, um von dieser dann Eigenschaftswerte zu lesen. Kann diese Akte nicht gefunden werden, ist das ein Fehlerzustand,
// der am Datensatz in der Quelle festgehalten wird.
STATEMENT = "select doku_id, dok_dat_feld_25, dok_dat_feld_42, dok_dat_feld_21, dok_dat_feld_2, dok_dat_feld_13, dok_dat_feld_37, dok_dat_feld_1 from firmen_spezifisch where kue_dokuart = '" + akte + "' and dok_dat_feld_10 = '" + resultRows[ i ].ddf10 + "'";
def erg = d3.sql.executeAndGet( (String) STATEMENT );
//xlog( d3, 5, resultRows[ i ].ddf10 + " / " + resultRows[ i ].id + ": " + STATEMENT );
if ( schritte[ m ].dok_dat_feld_1 ) // Mandantnummer
{
xlog( d3, 4, resultRows[ i ].ddf10 + " / " + resultRows[ i ].id + ": Setze DDF1 / Mandantnummer [" + schritte[ m ].dok_dat_feld_1 + "]" );
newDoc.field[ 1 ] = schritte[ m ].dok_dat_feld_1;
}
if ( erg.size() > 0 )
{
if ( ( erg[ 0 ].dok_dat_feld_1 ) && ( ! schritte[ m ].dok_dat_feld_1 ) )
{
xlog( d3, 4, resultRows[ i ].ddf10 + " / " + resultRows[ i ].id + ": Setze DDF1 / Mandantnummer [" + erg[ 0 ].dok_dat_feld_1 + "]" );
newDoc.field[ 1 ] = erg[ 0 ].dok_dat_feld_1;
}
xlog( d3, 4, resultRows[ i ].ddf10 + " / " + resultRows[ i ].id + ": Setze DDF10 / Aktennummer [" + resultRows[ i ].ddf10 + "]" );
newDoc.field[ 10 ] = resultRows[ i ].ddf10;
if ( erg[ 0 ].dok_dat_feld_25 )
{
xlog( d3, 4, resultRows[ i ].ddf10 + " / " + resultRows[ i ].id + ": Setze DDF25 / Geschaeftsfuehrer [" + erg[ 0 ].dok_dat_feld_25 + "]" );
newDoc.field[ 25 ] = erg[ 0 ].dok_dat_feld_25;
}
if ( erg[ 0 ].dok_dat_feld_42 )
{
xlog( d3, 4, resultRows[ i ].ddf10 + " / " + resultRows[ i ].id + ": Setze DDF42 / Briefkopf [" + erg[ 0 ].dok_dat_feld_42 + "]" );
newDoc.field[ 42 ] = erg[ 0 ].dok_dat_feld_42;
}
if ( erg[ 0 ].dok_dat_feld_21 )
{
xlog( d3, 4, resultRows[ i ].ddf10 + " / " + resultRows[ i ].id + ": Setze DDF21 / Aktenname [" + erg[ 0 ].dok_dat_feld_21 + "]" );
newDoc.field[ 21 ] = erg[ 0 ].dok_dat_feld_21;
}
if ( erg[ 0 ].dok_dat_feld_2 )
{
xlog( d3, 4, resultRows[ i ].ddf10 + " / " + resultRows[ i ].id + ": Setze DDF2 / Mandantname [" + erg[ 0 ].dok_dat_feld_2 + "]" );
newDoc.field[ 2 ] = erg[ 0 ].dok_dat_feld_2;
}
if ( erg[ 0 ].dok_dat_feld_13 )
{
xlog( d3, 4, resultRows[ i ].ddf10 + " / " + resultRows[ i ].id + ": Setze DDF13 / Mandantgruppennummer [" + erg[ 0 ].dok_dat_feld_13 + "]" );
newDoc.field[ 13 ] = erg[ 0 ].dok_dat_feld_13;
}
if ( erg[ 0 ].dok_dat_feld_37 )
{
xlog( d3, 4, resultRows[ i ].ddf10 + " / " + resultRows[ i ].id + ": Setze DDF37 / Mandatsverantwortlicher [" + erg[ 0 ].dok_dat_feld_37 + "]" );
newDoc.field[ 37 ] = erg[ 0 ].dok_dat_feld_37;
}
}
else
{
lege_akte_an = false;
}
if ( schritte[ m ].dok_dat_feld_3 ) // Oberregister
{
xlog( d3, 4, resultRows[ i ].ddf10 + " / " + resultRows[ i ].id + ": Setze DDF3 / Oberregister [" + schritte[ m ].dok_dat_feld_3 + "]" );
newDoc.field[ 3 ] = schritte[ m ].dok_dat_feld_3;
}
if ( schritte[ m ].dok_dat_feld_4 ) // Register
{
xlog( d3, 4, resultRows[ i ].ddf10 + " / " + resultRows[ i ].id + ": Setze DDF4 / Register [" + schritte[ m ].dok_dat_feld_4 + "]" );
newDoc.field[ 4 ] = schritte[ m ].dok_dat_feld_4;
}
if ( schritte[ m ].dok_dat_feld_23 ) // Unterregister
{
xlog( d3, 4, resultRows[ i ].ddf10 + " / " + resultRows[ i ].id + ": Setze DDF23 / Unterregister [" + schritte[ m ].dok_dat_feld_23 + "]" );
newDoc.field[ 23 ] = schritte[ m ].dok_dat_feld_23;
}
if ( schritte[ m ].dok_dat_feld_17 ) // 2. Unterregister
{
xlog( d3, 4, resultRows[ i ].ddf10 + " / " + resultRows[ i ].id + ": Setze DDF17 / 2. Unterregister [" + schritte[ m ].dok_dat_feld_17 + "]" );
newDoc.field[ 17 ] = schritte[ m ].dok_dat_feld_17;
}
if ( schritte[ m ].dok_dat_feld_32 ) // 3. Unterregister
{
xlog( d3, 4, resultRows[ i ].ddf10 + " / " + resultRows[ i ].id + ": Setze DDF32 / 3. Unterregister [" + schritte[ m ].dok_dat_feld_32 + "]" );
newDoc.field[ 32 ] = schritte[ m ].dok_dat_feld_32;
}
def fehler = false;
if ( debug == 0 )
{
if ( lege_akte_an )
{
try
{
newDoc = d3.archive.importDocument( newDoc );
}
catch ( D3Exception e )
{
xlog( d3, 2, resultRows[ i ].ddf10 + " / " + resultRows[ i ].id + ": Akte konnte nicht erzeugt werden: " + e.message );
fehler = true;
}
if ( ! fehler )
{
xlog( d3, 4, resultRows[ i ].ddf10 + " / " + resultRows[ i ].id + ": Doku-ID der erzeugten Akte : [" + newDoc.id + "]" );
gemerkte_doku_id = newDoc.id;
xlog( d3, 4, resultRows[ i ].ddf10 + " / " + resultRows[ i ].id + ": Akte existiert, gemerkte Doku-ID: [" + gemerkte_doku_id + "]" );
}
}
else
{
xlog( d3, 3, resultRows[ i ].ddf10 + " / " + resultRows[ i ].id + ": Hauptakte wurde nicht gefunden => Akte wurde nicht erzeugt." );
break;
}
}
else
{
xlog( d3, 3, resultRows[ i ].ddf10 + " / " + resultRows[ i ].id + ": Akte wurde nicht erzeugt / Debug-Modus eingeschaltet." );
}
}
xlog( d3, 3, resultRows[ i ].ddf10 + " / " + resultRows[ i ].id + ":****************************" );
}
}
if ( gemerkte_doku_id )
{
def USTATEMENT = "update mig_link_docs_2 set doku_id_target_fol = '" + gemerkte_doku_id + "' where id = '" + resultRows[ i ].id + "'";
if ( debug == 0 )
{
xlog( d3, 3, resultRows[ i ].ddf10 + " / " + resultRows[ i ].id + ": setze gemerkte Doku-ID [" + gemerkte_doku_id + "] fuer ID " + resultRows[ i ].id );
d3.sql.executeAndGet( (String) USTATEMENT );
}
else
{
xlog( d3, 3, resultRows[ i ].ddf10 + " / " + resultRows[ i ].id + ": Debug-Modus eingeschaltet, [" + gemerkte_doku_id + "] fuer ID " + resultRows[ i ].id + " wurde nicht gesetzt.");
}
}
if ( ! lege_akte_an )
{
def USTATEMENT = "update mig_link_docs_2 set fehler = 'Die Hauptakte existiert nicht.' where id = '" + resultRows[ i ].id + "'";
if ( debug == 0 )
{
xlog( d3, 3, resultRows[ i ].ddf10 + " / " + resultRows[ i ].id + ": setze Fehler 'Die Hauptakte existiert nicht.' fuer ID " + resultRows[ i ].id );
d3.sql.executeAndGet( (String) USTATEMENT );
}
else
{
xlog( d3, 3, resultRows[ i ].ddf10 + " / " + resultRows[ i ].id + ": Debug-Modus eingeschaltet, Fehler 'Die Hauptakte existiert nicht.' fuer ID " + resultRows[ i ].id + " wurde nicht gesetzt.");
}
}
xlog( d3, 3, resultRows[ i ].ddf10 + " / " + resultRows[ i ].id + ":*******************************************************" );
}
}
def xlog( D3Interface d3, int loglevel, String logtext )
{
def logdatei = "d:\\d3\\apps\\" + prg + ".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;
}