import com.dvelop.d3.server.core.D3Interface
import java.text.SimpleDateFormat
import java.util.Date;
 
 
D3Interface d3 = getProperty("d3");
d3.log.info("Start Skript: Automatische Freigabe");
 
/**
 * ----------------------Start Initialisierung----------------------------------------------
 */
 
int returnCode;
String currentDB;
final String BEARBEITUNG    = "DOC_STAT_PROCESSING";
final String FREIGABE       = "DOC_STAT_RELEASE";
final String PRUEFUNG       = "DOC_STAT_VERIFICATION";
def docuIdList  = [];
def dtsList     = [];
 
/**
 * ----------------------Ende Initialisierung-----------------------------------------------
 */
 
/**
 * ----------------------Konfigurationsbereich allgemein------------------------------------
 */
 
//Zeitintervall (Tage) für die automatische Freigabe
int daysOff = 14;
 
//Angabe der relevanten Dokumentart-Kürzel
dtsList = ["KRDOK"];
 
 
//Angabe des ausführenden Benutzers
def d3User = "dvelop"; 
 
/**
 * ----------------------Ende Konfigurationsbereich allgemein-------------------------------
 */
 
/**
 * ----------------------Konfigurationsbereich SQL-------------------------------------------
 */
  
def dtsString = String.join("','", dtsList);
d3.log.info("Dokumentart(en): ${dtsString}");
 
//Datumsgrente ermitteln
def date = new SimpleDateFormat("dd.MM.yyyy").format(new Date() - daysOff);
d3.log.info("Datumsgrenze: ${date}");
 
//Prüfung des Datenbank-Servers
String dbServer = d3.config.value("db_server");
d3.log.info("Datenbank: ${dbServer}");
 
if(dbServer == "ORAC" || dbServer == "DB2") {
    currentDB = "to_date('${date}','DD.MM.YYYY')";
}
 
if(dbServer == "MSQL") {
    currentDB = "CONVERT(DATETIME, '${date}', 104)";
}
String sqlStm = """select firmen_spezifisch.doku_id as dokId from phys_datei
                inner join firmen_spezifisch on (firmen_spezifisch.doku_id = phys_datei.doku_id)
                where dokuart in ( '${dtsString}' )
                and logi_verzeichnis in ('Be', 'Pr')
                and last_update_attr <= ${currentDB}""";
                 
d3.log.info("SQL: ${sqlStm}");
 
def resultset = d3.sql.executeAndGet(sqlStm);
 
docuIdList = resultset.collect{ it.dokId };
 
/**
 * ----------------------Ende Konfigurationsbereich SQL---------------------------------------
 */
 
for(String id : docuIdList)
{
    // Hole aktuellen Status des Dokuments
    def currentDoc = d3.archive.getDocument(id, d3User );
    def docStatus = currentDoc.getStatus();
     
    d3.log.info("Aktuelle ID: ${id}");
     
    if(docStatus.toString() == BEARBEITUNG || docStatus.toString() == PRUEFUNG)
    {
        returnCode = currentDoc.transfer("Freigabe", "", "Automatischer Statustransfer", false, 0, "");
         
        if(returnCode != 0)
        {
            d3.log.error("Statustransfer 'Freigabe' für DokID: ${id} ist fehlgeschlafen! Fehlercode: ${returnCode}");
        } else {   
            d3.log.info("Statustransfer 'Freigabe' für DokID: ${id} war erfolgreich!");
        }
    }
}
 
d3.log.info("Ende Skript: Automatische Freigabe");