//Dieses Skript stellt Dokumente aus dem Papierkorb wieder her. 
//Ausgeführt wird dieses Skript per d.3 server interface, zuvor muss das SQL-Statement angepasst werden. Das SQL-Statement muss die Dokumenten-IDs der wiederherzustellenden Dokumente liefern.
//Es muss ein Benutzer "scriptUser" angegeben werden, der volle Rechte für die entsprechenden Dokumente hat. (Um den Aktenplan anzutriggern)

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
String scriptName = getClass().getName()

// d.3 User which executes the restore and check of the folder schemes
String scriptUser = "d3_groovy"
final def maxRows = 3000

//Einzelne Dokumente/Akten anhand der ID
//def resultSet = d3.sql.executeAndGet("select doc_id from doc_recycler where doc_id = 'DocumentsToBeRestored'", maxRows)

//oder anhand Metadaten (hier dok_dat_feld_3 = Aktenzeichen) aus dem Papierkorb
def resultSet = d3.sql.executeAndGet("select doc_id, delete_date, delete_user from doc_recycler where to_char(delete_date, 'MM-DD-YYYY') = to_char(sysdate, 'MM-DD-YYYY') and delete_user = 'd3_async' and db_tables_data like '%\"dok_dat_feld_3\": \"A-000004-2022\"%'")
resultSet.each{
    try {
        d3.log.info ("Restoring document with ID " + it.doc_id)
        d3.call.restore_from_history (0, it.doc_id, '');
    
        d3.log.info ("Checking folder scheme for document with ID " + it.doc_id)
        Document myDoc = d3.archive.getDocument(it.doc_id, scriptUser)
        myDoc.checkFolderScheme(scriptUser)
    } catch (D3Exception e) {
        d3.log.error("Error checking folder scheme " + e.getMessage())
    } 
}