import com.dvelop.d3.server.Document
import com.dvelop.d3.server.DocumentType
import com.dvelop.d3.server.User
import com.dvelop.d3.server.ValueSet
import com.dvelop.d3.server.Validation
import com.dvelop.d3.server.core.D3
import com.dvelop.d3.server.core.D3Interface
import com.dvelop.d3.server.exceptions.SQLException
import com.dvelop.d3.server.exceptions.D3Exception
import java.lang.annotation.*
import java.sql.SQLWarning;
import java.sql.Timestamp
 
 
/*
Skript zum Löschen von Dokumenten
Folgende Konfigurationsparameter sollten vorher im d.3 angedacht werden, insofern die Dokumente auch physikalisch gelöscht werden sollen
DELETE_DOCS_ELAPSED_AUTO (Dokumente logisch löschen)
DELETE_DOCS_ELAPSED_PHYSICAL (Dokumente physikalisch löschen)
DELETE_DOCS_ELAPSED_SEC_STORAGE (Dokumente vom Sekundärspeicher löschen, falls im Einsatz)
RECYCLE_STORAGE_PERIOD (Verweildauer im Papierkorb)
*/
 
// #################################################################################
// Konfigurationsbereich
// #################################################################################
// Pflichtfelder:
// --------------
def DokumentArt = "('DVFVA', 'DSFVA', 'AFOND', 'AVFVA', 'AMAND', 'AFVA', 'AKUND', 'ASFVA')" // Dokumentarten, entspricht SQL-Where In ...
int LoeschModus = 2                 // 1 = erzeuge d3l-Datei, 2 = Dokumente Loeschen
 
// Optionale Felder
// ----------------
// Falls leer, im Format <Feldname> = "" angeben, dann wird ueber das Feld nicht eingeschränkt,
def ImportDatum     = ""       // Dokumente >= Import-Datum gem. DB-Tabelle phys_datei, Spalte datum_einbring
                                           // Format: DD.MM.YYYY
def ImportBenutzer  = ""            // d.3 Benutzerkürzel, optional
def StammGPNummer   = ""             // Stamm-GP-Nummer
 
// Pfade
// -----
def LogPfad             = "D:\\d3log\\DokumenteLoeschen\\"
def LogDateiName        = "DokumenteLoeschen"
def LinkDateiName       = "DokumenteLoeschenLink"
 
// #################################################################################
// Ende Konfigurationsbereich
// #################################################################################
 
d3.log.info("Starte Lösch-Skript für Dokumentarten: " + DokumentArt)
d3.log.info("ImportDatum >= " + ImportDatum)
d3.log.info("ImportBenutzer = " + ImportBenutzer)
d3.log.info("StammGPNummer = " + StammGPNummer)
 
def LogDatei = new File(LogPfad + LogDateiName + ".log")
LogDatei.append("\n\rStarte Löschen von Dokumenten ")
 
def LinkDatei = new File(LogPfad + LinkDateiName + ".d3l")
 
int countDeleted = 0
 
if (LoeschModus == 1)
{
   LinkDatei.write("idlist")
}
 
try
{
    // SQL Abfrage zusammensetzen
    def SQLWhere = "where kue_dokuart in " + DokumentArt
    if (ImportDatum)
    {
        SQLWhere = SQLWhere + " and datum_einbring >= to_date('" + ImportDatum + "', 'DD.MM.YYYY')"
    }
    if (ImportBenutzer)
    {
        SQLWhere = SQLWhere + " and besitzer = '" + ImportBenutzer + "'"
    }
    if (StammGPNummer)
    {
        SQLWhere = SQLWhere + " and dok_dat_feld_3 = '" + StammGPNummer + "'"
    }
     
    def resultset = d3.sql.executeAndGet("""select fs.doku_id
                                            from firmen_spezifisch fs
                                            inner join phys_datei pd on (fs.doku_id = pd.doku_id)""" + SQLWhere)
    if (resultset.size() > 0)
    {
        d3.log.info (resultset.size() + " Dokumente zum Löschen ermittelt.")
        LogDatei.append("\n\r" + resultset.size() + " Dokumente zum Löschen ermittelt.")
         
        // Ergebnis durchlaufen und Dokumente / Akten aktualisieren
        resultset.each
        {
            if (LoeschModus == 1)
            {
               LinkDatei.append("\n" + it.get("doku_id"))
            }
            else if (LoeschModus == 2)
            {
               LogDatei.append("\n" + it.get("doku_id") + " wird gelöscht.")
               d3.call.document_delete("TestdokumenteLoeschen", true, true, it.get("doku_id"), "", false)
                           countDeleted++
                           d3.log.info(countDeleted + " von " + resultset.size() + " Dokumente geloescht.")
            }
        }
    }
}
catch (SQLException e)
{
    d3.log.error ("Dokumente loeschen: Fehler in Script aufgetreten!");
}