2023-04-27 13:16:14 +02:00

735 lines
35 KiB
VB.net

Imports System.ComponentModel
Imports System.IO
Imports DigitalData.Modules.Logging
Imports DigitalData.Modules.Database
Imports DevExpress.DataAccess.Sql
Imports GdPicture14
Imports System.Drawing
Imports DigitalData.Modules.Windream
Imports System.Threading
Imports DevExpress.XtraRichEdit
Imports DevExpress.Pdf.Native
Public Class MyService
#Region "+++++ variables +++++"
Private _threadRunner1 As BackgroundWorker
Private _threadRunner2 As BackgroundWorker
Private MyLogger As LogConfig
Private Logger As Logger
Private MyDatabase As MSSQLServer
Dim MyStempel1 As String
Dim MyStempel2 As String
Private _licenseManager As New GdPicture14.LicenseManager()
#End Region
Protected Overrides Sub OnStart(ByVal args() As String)
Try
MyLogger = New LogConfig(LogConfig.PathType.CustomPath, Path.Combine(My.Application.Info.DirectoryPath, "Log"), Nothing, "Digital Data", "DD EBCreator")
Logger = MyLogger.GetLogger
WINDREAM = New Windream(MyLogger, False, My.Settings.WMDriveLetter, "\\windream\objects", True, "", "", "", "")
If Not IsNothing(WINDREAM) Then
If WINDREAM.SessionLoggedin = True Then
Logger.Debug("windream initialisiert")
Else
Throw New Exception("Could not create a windream session")
End If
End If
Try
Dim directory As New IO.DirectoryInfo(MyLogger.LogDirectory)
For Each file As IO.FileInfo In directory.GetFiles
If (Now - file.CreationTime).Days > 29 Then
file.Delete()
Else
Exit For
End If
Next
Catch ex As Exception
End Try
Logger.Info("## Service started ## ")
If My.Settings.MyConnectionString = String.Empty Then
Logger.Warn("NO CONNECTIONSTRING CONFIGURED.")
Else
If My.Settings.DEBUG = True Then
Logger.Info("DEBUG ACTIVATED")
MyLogger.Debug = True
Else
MyLogger.Debug = False
End If
MyDatabase = New MSSQLServer(MyLogger, My.Settings.MyConnectionString)
If MyDatabase.DBInitialized = False Then
Logger.Warn("ATTENTION: No Connection was established '" & My.Settings.MyConnectionString & "'!")
Else
Dim oSQL = "SELECT LICENSE FROM TBDD_3RD_PARTY_MODULES WHERE NAME = 'GDPICTURE' AND ACTIVE = 1"
Dim oGDPICTURE_LIC_KEY As String
oGDPICTURE_LIC_KEY = MyDatabase.GetScalarValue(oSQL)
_licenseManager.RegisterKEY(oGDPICTURE_LIC_KEY)
'### Thread 1 generieren
_threadRunner1 = New BackgroundWorker()
_threadRunner1.WorkerReportsProgress = True
_threadRunner1.WorkerSupportsCancellation = True
AddHandler _threadRunner1.DoWork, AddressOf RUN_THREAD1
AddHandler _threadRunner1.RunWorkerCompleted, AddressOf Thread1_Completed
_threadRunner2 = New BackgroundWorker()
_threadRunner2.WorkerReportsProgress = True
_threadRunner2.WorkerSupportsCancellation = True
AddHandler _threadRunner2.DoWork, AddressOf RUN_THREAD2
AddHandler _threadRunner2.RunWorkerCompleted, AddressOf Thread2_Completed
'### Den Timer für Thread 1 generieren
Dim Timer_Thread1 As New System.Timers.Timer()
'Das Event hinterlegen welches bei "Tick" ausgelöst wird
AddHandler Timer_Thread1.Elapsed, AddressOf Thread_Run1
' Set the Interval
Timer_Thread1.Interval = (My.Settings.TIMER_INTERVALL * 60000)
Timer_Thread1.Enabled = True
Logger.Debug("...Timer 1 started.")
' Und den Durchlauf das erste Mal starten
_threadRunner1.RunWorkerAsync()
'### Den Timer für Thread 1 generieren
Dim Timer_Thread2 As New System.Timers.Timer()
'Das Event hinterlegen welches bei "Tick" ausgelöst wird
AddHandler Timer_Thread2.Elapsed, AddressOf Thread_Run2
' Set the Interval
Timer_Thread2.Interval = (My.Settings.TIMER_INTERVALL * 60000)
Timer_Thread2.Enabled = True
Logger.Debug("...Timer 2 started.")
End If
End If
Catch ex As Exception
EventLog.WriteEntry(Me.ServiceName, ex.ToString(), EventLogEntryType.Error)
Logger.Error(ex)
End Try
End Sub
Public Sub Thread_Run1()
If Not _threadRunner1.IsBusy Then
_threadRunner1.RunWorkerAsync()
Else
Logger.Info("##### Thread 1 IsBusy #####")
End If
End Sub
Public Sub Thread_Run2()
If Not _threadRunner2.IsBusy Then
_threadRunner2.RunWorkerAsync()
Else
Logger.Info("##### Thread 2 IsBusy #####")
End If
End Sub
Public Sub RUN_THREAD1(ByVal sender As Object, ByVal e As System.ComponentModel.DoWorkEventArgs)
Try
If My.Computer.Clock.LocalTime.Hour <> 4 And My.Computer.Clock.LocalTime.Hour <> 5 Then
Generator_Run("01", My.Settings.oSQLThread1)
Else
Logger.Debug($"In Sleep Mode 04-05h: {Now.ToString}")
End If
Catch ex As Exception
Logger.Error(ex)
End Try
End Sub
Public Sub Generator_Run(GeneratorID As String, oGetDTSQL As String)
Try
Dim oSQLDelete = $"DELETE FROM TBCUST_PM_RPT_2BCREATED WHERE GEN_ID = '{GeneratorID}'"
MyDatabase.ExecuteNonQuery(oSQLDelete)
Dim oDTEB_Workload As DataTable = MyDatabase.GetDatatable(oGetDTSQL)
If Not IsNothing(oDTEB_Workload) Then
Dim oDocID As Long
Dim oOutputfilename, OutputFolder As String
Dim oReRun As Boolean
If oDTEB_Workload.Rows.Count > 0 Then
Logger.Info($"##### THREAD for Generator {GeneratorID} has [{oDTEB_Workload.Rows.Count}] results 2Bworked #####")
For Each oRow As DataRow In oDTEB_Workload.Rows
oDocID = oRow.Item(0).ToString
Logger.Debug($"WORKING ON DOCID - {oDocID.ToString}")
Try
oOutputfilename = oRow.Item("Outputfilename").ToString
Catch ex As Exception
oOutputfilename = "STANDARD"
End Try
Try
OutputFolder = oRow.Item("OutputFolder").ToString
Catch ex As Exception
OutputFolder = "STANDARD"
End Try
Try
oReRun = oRow.Item("ReRun")
Catch ex As Exception
oReRun = False
End Try
Dim oSQLCheck = $"SELECT * FROM TBCUST_PM_RPT_2BCREATED WHERE DocID = {oDocID}"
Dim oDTRPT2BCreated As DataTable = MyDatabase.GetDatatable(oSQLCheck)
If Not IsNothing(oDTRPT2BCreated) And (oDTRPT2BCreated.Rows.Count = 0 Or oReRun = True) Then
oSQLCheck = $"select * From VWCUST_STAMP Where DocID = {oDocID}"
Dim oCheckStamp As DataTable = MyDatabase.GetDatatable(oSQLCheck)
If oCheckStamp.Rows.Count > 0 Then
If oReRun = True Then
Logger.Info($"## THIS IS A RERUN {oDocID}")
Delete_EB2bCreated(oDocID)
End If
Dim oInsert = $"IF NOT EXISTS(SELECT DocID FROM TBCUST_PM_RPT_2BCREATED WHERE DocID = {oDocID}) INSERT INTO TBCUST_PM_RPT_2BCREATED (DocID,GEN_ID,Outputfilename) VALUES ({oDocID},'{GeneratorID}','{oOutputfilename}')"
MyDatabase.ExecuteNonQuery(oInsert)
Else
Logger.Warn($"oCheckStamp = False [{oSQLCheck}]")
End If
Else
Logger.Info($"DocID already worked (TBCUST_PM_RPT_2BCREATED) [{oSQLCheck}]")
End If
Next
Dim oSQLWorkload2 = $"SELECT * FROM TBCUST_PM_RPT_2BCREATED WHERE GEN_ID = '{GeneratorID}'"
oDTEB_Workload = MyDatabase.GetDatatable(oSQLWorkload2)
For Each oRow As DataRow In oDTEB_Workload.Rows
Dim oSQL As String
oDocID = oRow.Item(0).ToString
Try
oOutputfilename = oRow.Item("Outputfilename").ToString
Catch ex As Exception
oOutputfilename = "STANDARD"
End Try
Dim oError = False
If My.Settings.PROC_BEFORE_POS = True Then
oSQL = $"EXEC PRCUST_CREATE_RPTERGEBNISBERICHT_POS {oDocID.ToString}"
Logger.Debug($"DocID - {oDocID.ToString} Now executing [{oSQL}]")
If MyDatabase.ExecuteNonQuery(oSQL, 500) = False Then
Delete_EB2bCreated(oDocID)
oError = True
End If
End If
If My.Settings.PROC_BEFORE_POS = False And oError = False Then
oSQL = $"select * from VWCUST_RPTERGEBNISBERICHT where DocID = {oDocID}"
Dim oDTEB = MyDatabase.GetDatatable(oSQL)
If oDTEB.Rows.Count > 0 Then
Create_EB_Report(oDocID.ToString, GeneratorID, oOutputfilename, OutputFolder, oReRun)
Else
Logger.Warn($"DocID - {oDocID.ToString} - No EB-Rows [{oSQL}]")
Delete_EB2bCreated(oDocID)
End If
End If
Logger.Debug($"")
Next
End If
End If
Catch ex As Exception
Logger.Warn($"Unexpected Error Generator_Run for GenID {GeneratorID}:")
Logger.Error(ex)
End Try
End Sub
Public Sub RUN_THREAD2(ByVal sender As Object, ByVal e As System.ComponentModel.DoWorkEventArgs)
Try
If My.Computer.Clock.LocalTime.Hour <> 4 And My.Computer.Clock.LocalTime.Hour <> 5 Then
If My.Settings.oSQLThread2 <> String.Empty Then
Generator_Run("02", My.Settings.oSQLThread2)
End If
Else
Logger.Debug($"In Sleep Mode 04-05h: {Now.ToString}")
End If
Catch ex As Exception
Logger.Error(ex)
End Try
End Sub
Protected Overrides Sub OnStop()
' Hier Code zum Ausführen erforderlicher Löschvorgänge zum Beenden des Dienstes einfügen.
Logger.Info("## Service stopped manually. ##")
Try
If UsedTempFile = True Then
Try
If File.Exists(TempFile) Then
File.Delete(TempFile)
End If
Catch ex As Exception
Logger.Warn(ex.Message)
End Try
End If
Catch ex As Exception
End Try
Try
If DocID <> 0 Then
Delete_EB2bCreated(DocID)
End If
Catch ex As Exception
End Try
End Sub
Private Sub Thread1_Completed(ByVal sender As Object, ByVal e As System.ComponentModel.RunWorkerCompletedEventArgs) 'Handles threadDateiimport.RunWorkerCompleted
'This event fires when the DoWork event completes
Try
Dim result As String = ""
If e.Cancelled Then
Logger.Warn("## Thread1 was cancelled.")
ElseIf e.Error IsNot Nothing Then
Logger.Warn("Unexpected error in thread 1: " & e.Error.Message)
End If
Catch ex As Exception
Logger.Error(ex)
End Try
End Sub
Private Sub Thread2_Completed(ByVal sender As Object, ByVal e As System.ComponentModel.RunWorkerCompletedEventArgs) 'Handles threadDateiimport.RunWorkerCompleted
'This event fires when the DoWork event completes
Try
Dim result As String = ""
If e.Cancelled Then
Logger.Warn("## Thread2 was cancelled.")
ElseIf e.Error IsNot Nothing Then
Logger.Warn("Unexpected error in thread 2: " & e.Error.Message)
End If
Catch ex As Exception
Logger.Error(ex)
End Try
End Sub
Sub Create_EB_Report(pDocID As String, GENID As String, Outputfilename As String, OutputFolder As String, pRerun As Boolean)
Dim MyFreigabebericht As String
If GENID = "01" Then
MyStempel1 = ""
Else
MyStempel2 = ""
End If
Logger.Info($"#### Starting Create_EB_Report (EB-Protokoll) for DocID: {pDocID} - GENID: {GENID}... ####")
Dim errortext As String
Dim oStep As String
Try
Dim oReport As New RptErgebnisbericht()
Dim oDatasource As SqlDataSource = oReport.DataSource
'Parameter für 1.Query
Dim oSelectQuery As CustomSqlQuery = oDatasource.Queries(0)
'-------
If oSelectQuery.Parameters.Count = 1 Then
Logger.Debug($"DocID: {pDocID} - Exactly [{oSelectQuery.Parameters.Count}] Parameter in Query 1!")
Else
Delete_EB2bCreated(pDocID)
Logger.Warn($"DocID: {pDocID} - There is no parameter in Query 1 - Check the parameters for Query1")
DocID = 0
Exit Sub
End If
'-------
Logger.Debug($"DocID: {pDocID} - Now passing the value [{pDocID}] to parameter 0 of Query 1...")
oStep = $"DocID: {pDocID} - Now passing the value [{pDocID}] to parameter 0 of Query 1..."
Dim oParameter As QueryParameter = oSelectQuery.Parameters(0)
oParameter.Value = pDocID
'---------
Logger.Debug($"DocID: {pDocID} - Parameter passed successfully!")
oStep = $"Parameter passed successfully!"
'---------
'Parameter für 2.Query
'Dim oSelectQuery2 As CustomSqlQuery = oDatasource.Queries(1)
'Dim oParameter2 As QueryParameter = oSelectQuery2.Parameters(0)
'oParameter2.Value = pDocID
DocID = pDocID
Try
'Logger.Debug($"Now passing the value [{pDocID}] to parameter pDocID...")
'----------
'If oReport.Parameters.Count = 1 Then
'Logger.Debug($"Exactly [{oReport.Parameters.Count}] Parameter!")
'Else
'Delete_EB2bCreated(pDocID)
'Logger.Warn($"There is no parameter in Report - Check the parameters for pDocID-Parameter")
'DocID = 0
'Exit Sub
'End If
'oReport.Parameters("pDocID").Value = pDocID
'oReport.FilterString = oFilter
'----------
oReport.ReportPrintOptions.PrintOnEmptyDataSource = False
oStep = $"DocID: {pDocID} - Trying to create the report-document.."
oReport.CreateDocument(False)
Dim filePath As String = $"C:\Temp\{DocID}.prnx"
Logger.Debug($"DocID: {pDocID} - oReport successfully created!")
Catch ex As Exception
Delete_EB2bCreated(pDocID)
Logger.Error(ex)
Logger.Info($"Unexpected Error in Create_EB_Report - STEP: [{oStep}] - Create for DocID: {pDocID} - GENID: {GENID} - ERROR: {ex.Message}")
DocID = 0
Exit Sub
End Try
Dim oMyErgebnisbericht As String = Path.Combine(My.Settings.CONCAT_TEMPFolder, pDocID & "_ERPT.pdf")
If File.Exists(oMyErgebnisbericht) Then
Try
File.Delete(oMyErgebnisbericht)
Catch ex As Exception
Logger.Info($"Could not delete existing Reportfile: {oMyErgebnisbericht}")
DocID = 0
Exit Sub
End Try
End If
oReport.ExportToPdf(oMyErgebnisbericht)
If File.Exists(oMyErgebnisbericht) Then
MyFreigabebericht = oMyErgebnisbericht
Dim oOriginFile As String
Dim osql = $"select dbo.FNDD_GET_WINDREAM_FILE_PATH ({pDocID},{My.Settings.FNDD_GET_WM_FPATH_VARIANT})"
oOriginFile = MyDatabase.GetScalarValue(osql)
TempFile = ""
If File.Exists(oOriginFile) = False Then
If Not IsNothing(WINDREAM) And oOriginFile.StartsWith("\\windream\objects") Then
Logger.Debug($"Trying to export WMFile: {oOriginFile}...")
Dim oReturn = WINDREAM.Export_WMFile(oOriginFile, Path.GetTempPath())
Logger.Debug($"Result of WINDREAM.Export_WMFile: [{oReturn.ToString}]")
If oReturn <> "False" Then
If File.Exists(oReturn) Then
UsedTempFile = True
TempFile = oReturn
Else
Logger.Info($"TempFile not existing ### [{oReturn}]!")
Delete_EB2bCreated(pDocID)
DocID = 0
Exit Sub
End If
Else
Logger.Info($"Unexpected Error in WINDREAM.Export_WMFile!")
Delete_EB2bCreated(pDocID)
DocID = 0
Exit Sub
End If
'End If
Else
Logger.Warn($"File.Exists = false ### [{oOriginFile}] is not existing. Check Your security-permissions [{osql}]!")
Delete_EB2bCreated(pDocID)
DocID = 0
Exit Sub
End If
Else
End If
If Not IsNothing(TempFile) Then
If File.Exists(My.Settings.Path2PDFTK) Then
If Create_MyStempel(pDocID, GENID) = True Then
'Jetzt Stempeln des OriginalBeleges mit dem Stamp-Report
Dim oFilewithStamp = CreateStampedPDF(TempFile, pDocID, GENID)
If oFilewithStamp <> "" Then
If Concat_Files(pDocID, TempFile, GENID, Outputfilename, OutputFolder, oFilewithStamp, MyFreigabebericht) = True Then
If pRerun = False Then
Dim oInsert = $"INSERT INTO TBCUST_PM_RPT_CREATED (DocID,GEN_ID) VALUES ({Convert.ToInt64(pDocID)},'{GENID}')"
MyDatabase.ExecuteNonQuery(oInsert)
End If
Logger.Info($"#### DocID: {pDocID} - Created Ergebnisbericht - GENID: {GENID}! #####")
If UsedTempFile = True Then
Try
File.Delete(TempFile)
Catch ex As Exception
Logger.Warn(ex.Message)
End Try
End If
End If
Else
Logger.Info($"DocID: {pDocID} - ERROR: oFilewithStamp = False or """)
End If
Else
Logger.Warn($"DocID: {pDocID} - Create_MyStempel = False")
Delete_EB2bCreated(pDocID)
DocID = 0
End If
End If
Else
Logger.Warn($"DocID: {pDocID} - OriginFile is nothing!!")
End If
Else
Logger.Warn($"Error in Create_EB_Report for DocID: {pDocID} - GENID: {GENID} - ERROR: EB_Reportfile {oMyErgebnisbericht} is not existing!!")
Delete_EB2bCreated(pDocID)
DocID = 0
End If
Catch ex As Exception
Delete_EB2bCreated(pDocID)
errortext = "ex.message: " & ex.Message & vbNewLine & "ex.StackTrace: " & ex.StackTrace.ToString & vbNewLine & "ex.InnerException: " & ex.InnerException.Message
Logger.Warn($"Unexpected Error in Create_Report for DocID: {pDocID} - ERROR: {errortext}")
DocID = 0
End Try
End Sub
Private Function Create_MyStempel(pDocID As String, GENID As String)
If GENID = "01" Then
MyStempel1 = ""
Else
MyStempel2 = ""
End If
Dim errortext As String
Try
Logger.Info($"### DocID: {pDocID} - Create_MyStempel starting - GENID {GENID} ###")
Logger.Debug($"### DocID: {pDocID} - Create_MyStempel starting - GENID {GENID} ###")
Dim oRptStampFirstPage As New RptStampIcon()
Dim oDatasource As SqlDataSource = oRptStampFirstPage.DataSource
Dim oSelectQuery As CustomSqlQuery = oDatasource.Queries(0)
Dim oParameter As QueryParameter = oSelectQuery.Parameters(0)
oParameter.Value = pDocID
oRptStampFirstPage.ReportPrintOptions.PrintOnEmptyDataSource = False
oRptStampFirstPage.FilterString = "DocID = " + pDocID
'report.ObjectDataSource1.Parameters(0).Value = Convert.ToInt64(TextBox1.Text)
oRptStampFirstPage.CreateDocument(False)
Dim oTempStempel As String = Path.Combine(My.Settings.CONCAT_TEMPFolder, pDocID & "_Stamp.jpg")
If File.Exists(oTempStempel) Then
Try
File.Delete(oTempStempel)
Catch ex As Exception
Return False
End Try
End If
'myReport.ExportToPdf(oTempStempel)
Dim oExportOptions As New DevExpress.XtraPrinting.ImageExportOptions
oExportOptions.Resolution = 400
oExportOptions.Format = Imaging.ImageFormat.Jpeg
oExportOptions.ExportMode = DevExpress.XtraPrinting.ImageExportMode.SingleFile
oRptStampFirstPage.ExportToImage(oTempStempel, oExportOptions)
If File.Exists(oTempStempel) Then
If GENID = "02" Then
MyStempel2 = oTempStempel
Else
MyStempel1 = oTempStempel
End If
Logger.Info($"DocID: {pDocID} - Stampreport created - GENID {GENID}!")
Return True
Else
If GENID = "02" Then
MyStempel2 = ""
Else
MyStempel1 = ""
End If
Return False
End If
Catch ex As Exception
errortext = "ex.message: " & ex.Message & vbNewLine & "ex.StackTrace: " & ex.StackTrace.ToString & vbNewLine & "ex.InnerException: " & ex.InnerException.Message
Delete_EB2bCreated(pDocID)
Logger.Error(ex)
Return False
End Try
End Function
Private Function CreateStampedPDF(oOriginFile As String, pDocID As Integer, GENID As String)
Try
Logger.Info($"### DocID: {pDocID} - CreateStampedPDF starting - GENID {GENID} ###")
Logger.Debug($"### DocID: {pDocID} - CreateStampedPDF starting - GENID {GENID} ###")
Dim MyLocalStempel As String
If GENID = "01" Then
MyLocalStempel = MyStempel1
Else
MyLocalStempel = MyStempel2
End If
Dim oStampedOriginWithPicture As String
oStampedOriginWithPicture = Path.GetFileNameWithoutExtension(oOriginFile)
oStampedOriginWithPicture = Path.Combine(My.Settings.CONCAT_TEMPFolder, oStampedOriginWithPicture + "_StampedFirstPage.pdf")
If System.IO.File.Exists(oStampedOriginWithPicture) Then
System.IO.File.Delete(oStampedOriginWithPicture)
End If
Dim oGdPicturePDF As New GdPicturePDF()
Dim oGdPictureImaging As New GdPictureImaging()
'Creating a new empty PDF document.
If oGdPicturePDF.LoadFromFile(oOriginFile, False) = GdPictureStatus.OK Then
Logger.Debug($"CreateStampedPDF - DocID: {pDocID} - ..oGdPicturePDF Created")
Dim oYDistance = oGdPicturePDF.GetPageHeight
'Just to remind you that units are set to points and the origin is set to bottom left by default.
'Loading an image from a file.
Dim imageID As Integer = oGdPictureImaging.CreateGdPictureImageFromFile(MyLocalStempel)
If oGdPictureImaging.GetStat() = GdPictureStatus.OK Then
Logger.Debug($"CreateStampedPDF - DocID: {pDocID} - ..GdPictureImaging.GetStat")
'Adding an image as a resource into the PDF document - we decided not to draw the image in this moment.
Dim imageResName As String = oGdPicturePDF.AddImageFromGdPictureImage(imageID, False, False)
Logger.Debug($"CreateStampedPDF - DocID: {pDocID} - ..oGdPicturePDF.AddImageFromGdPictureImage")
Dim oStempelHEight = oGdPictureImaging.GetHeight(imageID) / 5
oYDistance = (oYDistance - oStempelHEight) - 10
'Drawing the image resource onto the current page and saving the PDF document.
If (oGdPicturePDF.GetStat() <> GdPictureStatus.OK) OrElse
(oGdPicturePDF.DrawImage(imageResName, My.Settings.XDistance, oYDistance, oGdPictureImaging.GetWidth(imageID) / 5, oGdPictureImaging.GetHeight(imageID) / 5) <> GdPictureStatus.OK) OrElse
(oGdPicturePDF.SaveToFile(oStampedOriginWithPicture) <> GdPictureStatus.OK) Then
Logger.Warn("The example has NOT been followed successfully. Error: " + oGdPicturePDF.GetStat().ToString())
'MessageBox.Show("The example has NOT been followed successfully. Error: " + oGdPicturePDF.GetStat().ToString(), "Adding an image Example", MessageBoxButtons.OK, MessageBoxIcon.Error)
Return ""
End If
Logger.Debug($"CreateStampedPDF - DocID: {pDocID} - ..oGdPicturePDF.SaveToFile")
'Releasing the image.
oGdPictureImaging.ReleaseGdPictureImage(imageID)
Else
Logger.Warn($"CreateStampedPDF - DocID: {pDocID} - The image [{MyLocalStempel}] can't be loaded. Error: " + oGdPictureImaging.GetStat().ToString())
Return ""
'MessageBox.Show("The image can't be loaded. Error: " + oGdPictureImaging.GetStat().ToString(), "Adding an image Example", MessageBoxButtons.OK, MessageBoxIcon.Error)
End If
oGdPicturePDF.CloseDocument()
Else
Logger.Warn($"CreateStampedPDF - DocID: {pDocID} - The new PDF document can't be created. Error: {oGdPicturePDF.GetStat().ToString()}")
'MessageBox.Show("The new PDF document can't be created. Error: " + oGdPicturePDF.GetStat().ToString(), "Adding an image Example", MessageBoxButtons.OK, MessageBoxIcon.Error)
Return ""
End If
oGdPictureImaging.Dispose()
oGdPicturePDF.Dispose()
Dim sw As Stopwatch = New Stopwatch()
Dim oSuccess As Boolean = True
sw.Start()
Logger.Debug($"CreateStampedPDF - DocID: {pDocID} - Waiting for file: {oStampedOriginWithPicture}")
Do While File.Exists(oStampedOriginWithPicture) = False
If sw.Elapsed.TotalSeconds = 30 Then
Logger.Info($"CreateStampedPDF - DocID: {pDocID} - ATTENTION: Still waiting (30 sec) for file: {oStampedOriginWithPicture}")
Logger.Debug($"CreateStampedPDF - DocID: {pDocID} - ATTENTION: Still waiting (30 sec) for file: {oStampedOriginWithPicture}")
ElseIf sw.Elapsed.TotalMinutes = 1 Then
Logger.Info($"CreateStampedPDF - DocID: {pDocID} - ATTENTION: Still waiting (60 sec) for file: {oStampedOriginWithPicture}")
Logger.Debug($"CreateStampedPDF - DocID: {pDocID} - ATTENTION: Still waiting (60 sec) for file: {oStampedOriginWithPicture}")
oSuccess = False
Exit Do
End If
Loop
sw.Stop()
Try
File.Delete(MyLocalStempel)
Logger.Debug($"CreateStampedPDF - DocID: {pDocID} - Deleted StempelFile [{MyLocalStempel}]!")
Catch ex As Exception
Logger.Warn($"CreateStampedPDF - DocID: {pDocID} - Could not delete reportfile {MyLocalStempel} after creating concatted file: {ex.Message}")
End Try
If oSuccess = True Then
Return oStampedOriginWithPicture
Else
Return ""
End If
Catch ex As Exception
Logger.Error(ex)
Return ""
End Try
End Function
Private Function Concat_Files(pDocID As String, oOriginFile As String, GENID As String, Outputfilename As String, pOutputFolder As String, pFilewithStamp As String, MyFreigabebericht As String)
Dim oConcatSuccessfull As Boolean = True
Dim MyFile2Concat As String
Try
Logger.Debug($"######### Function Concat_Files - DocID {pDocID} #############")
If Outputfilename = "STANDARD" Then
Outputfilename = Path.GetFileNameWithoutExtension(oOriginFile) & My.Settings.Concatted_File_Suffix + ".pdf"
End If
If pOutputFolder = "STANDARD" Then
pOutputFolder = My.Settings.Path_ConcattedFile
End If
MyFile2Concat = Path.Combine(pOutputFolder, Outputfilename)
If File.Exists(My.Settings.Path2PDFTK) Then
If File.Exists(MyFile2Concat) Then
Try
File.Delete(MyFile2Concat)
Catch ex As Exception
Logger.Warn($"Concat_Files - DocID {pDocID} - Could not delete ConcattedFile {MyFile2Concat}: {ex.Message}")
Return False
End Try
End If
Try
Dim oPDFTKProcess As New Process
Dim ProcID
oPDFTKProcess.StartInfo.FileName = My.Settings.Path2PDFTK
oPDFTKProcess.StartInfo.CreateNoWindow = True
Dim _argument As String = $"""{pFilewithStamp}"" ""{MyFreigabebericht}"" cat output ""{MyFile2Concat}"""
oPDFTKProcess.StartInfo.Arguments = _argument
Logger.Debug($"Concat_Files - DocID {pDocID} - Arguments: [{_argument}]")
oPDFTKProcess.Start()
ProcID = oPDFTKProcess.Id
Dim oProcID As Process
oProcID = Process.GetProcessById(ProcID)
Dim sw As Stopwatch = New Stopwatch()
'---am 13.10.2022 auskommentiert---
'sw.Start()
'Do While oProcID.HasExited = False
' If sw.Elapsed.TotalSeconds = 30 Then
' Logger.Info("Still waiting (30 sec) for ending of process-id: " & ProcID.ToString)
' ElseIf sw.Elapsed.TotalMinutes = 1 Then
' Logger.Info("Still waiting (60 sec) for ending of process-id: " & ProcID.ToString & " - Exit now")
' Exit Do
' End If
'Loop
'Logger.Debug("...process has exited: ")
'sw.Stop()
Thread.Sleep(500)
Logger.Debug($"Concat_Files - DocID {pDocID} - Now waiting for final concatted file [{MyFile2Concat}] ...")
sw.Start()
Do While File.Exists(MyFile2Concat) = False
If sw.Elapsed.TotalSeconds = 30 Then
Logger.Info($"Concat_Files - DocID {pDocID} - ATTENTION: Still waiting (30 sec) for file: {MyFile2Concat}")
ElseIf sw.Elapsed.TotalMinutes = 1 Then
Logger.Info($"Concat_Files - DocID {pDocID} - ATTENTION: waiting (60 sec) for file: {MyFile2Concat}")
oConcatSuccessfull = False
Exit Do
End If
Loop
Thread.Sleep(1000)
sw.Stop()
Try
File.Delete(pFilewithStamp)
Logger.Debug($"Concat_Files - DocID {pDocID} - Deleted file [{pFilewithStamp}]!")
File.Delete(MyFreigabebericht)
Logger.Debug($"Concat_Files - DocID {pDocID} - Deleted file [{MyFreigabebericht}]!")
Catch ex As Exception
Logger.Warn($"Concat_Files - DocID {pDocID} - Could not delete reportfile after creating concatted file: {ex.Message}")
End Try
Return oConcatSuccessfull
Catch ex As Exception
Logger.Error(ex) '("Unexpected error: " & ex.Message, "clsProfil.Profil_Durchlauf(Concat Files to one pdf)")
Return False
End Try
Else
Logger.Warn($"Concat_Files - DocID {pDocID} - pdftk is not existing")
Return False
End If
Catch ex As Exception
Logger.Error(ex)
Logger.Warn($"Concat_Files - DocID {pDocID} - Unexpected Error: {ex.Message}")
Return False
End Try
End Function
Sub Delete_EB2bCreated(pDocID As Long)
Try
Dim oDelete = $"DELETE FROM TBCUST_PM_RPT_2BCREATED WHERE DocID = {pDocID}"
MyDatabase.ExecuteNonQuery(oDelete)
Catch ex As Exception
Logger.Error(ex)
End Try
End Sub
End Class