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_notizen_hauptakten.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;


/////////////////////////////////////////////////////////////////////////

// In welcher Tabelle soll nach den zu erstellenden Notizen gesucht werden?
@Field zieltabelle = "mig_hauptakten_notizen";



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 i, ergebniszeilen, ergebnistext;

def sqlQuery = "select top (100) id,ddf10,notiz from " + zieltabelle + " where fehler is null and status is null and ddf10 like '%ST%' ";

resultRows = d3.sql.executeAndGet( (String) sqlQuery );

if ( resultRows.size() > 0 )
{
        xlog( d3, 4, " Es wurden " + resultRows.size() + " Treffer gefunden." );
        xlog( d3, 4, "************************************************" );
        
        for ( i = 0; i < resultRows.size(); i++ )
		{
			
			ergebniszeilen = d3.sql.executeAndGet( "select doku_id from firmen_spezifisch where kue_dokuart = 'ASTEU' and dok_dat_feld_10 = '" + resultRows[ i ].ddf10 + "' " );
			
			if ( ergebniszeilen.size() > 0 )
			{
				ergebnistext = "ID " + resultRows[ i ].id + " / Aktennummer [" + resultRows[ i ].ddf10 + "] Hauptakte Doku-ID: [" + ergebniszeilen[ 0 ].doku_id + "] ";
				
				if ( debug == 0 )
				{
					//def ergebnis = d3.call.note_add_string( resultRows[ i ].notiz, ergebniszeilen[ 0 ].doku_id, "Master" ); // hat eine Begrenzung auf die Länge der Notiz (1997 Zeichen sind noch erlaubt).
					
					def nodeFile = new File( "d:\\d3\\apps\\notiz_hauptakte.txt" );
					
					nodeFile.append( resultRows[ i ].notiz );
					
					def ergebnis = d3.call.note_add_file( "d:\\d3\\apps\\notiz_hauptakte.txt", ergebniszeilen[ 0 ].doku_id, "Master" );
					
					nodeFile.delete();
					
					if ( ergebnis == 0 )
					{
						ergebnistext = ergebnistext + "Die Notiz (ID " + resultRows[ i ].id + ", Laenge: " + resultRows[ i ].notiz.length() + " Zeichen) wurde erfolgreich angelegt."
						d3.sql.execute( "update " + zieltabelle + " set status = '0' where id = " + resultRows[ i ].id );
					}
					else
					{
						ergebnistext = ergebnistext + "Die Notiz (ID " + resultRows[ i ].id + ", Laenge: " + resultRows[ i ].notiz.length() + " Zeichen) konnte nicht angelegt werden: RC " + ergebnis;
						d3.sql.execute( "update " + zieltabelle + " set status = '" + ergebnis + "', fehler = '" + ergebnistext + "' where id = " + resultRows[ i ].id );
					}
					
					xlog( d3, 4, ergebnistext );
				}
				else
				{
					xlog( d3, 3, ergebnistext + "DEBUG ist eingeschaltet, es werden keine Aenderungen durchgefuehrt." );
				}
				
			}
			else
			{
				xlog( d3, 3, "ID " + resultRows[ i ].id + " / Aktennummer [" + resultRows[ i ].ddf10 + "]: Es wurde keine Hauptakte gefunden." );
			}
		}
        
        
}
else
{
	xlog( d3, 3, "Es wurden keine passenden Treffer gefunden!" );
}



























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;
}