diff --git a/Jobs/ZUGFeRD/EmailFunctions.vb b/Jobs/ZUGFeRD/EmailFunctions.vb
index 010de5b1..949d95a0 100644
--- a/Jobs/ZUGFeRD/EmailFunctions.vb
+++ b/Jobs/ZUGFeRD/EmailFunctions.vb
@@ -9,61 +9,60 @@ Public Class EmailFunctions
Private ReadOnly _logConfig As LogConfig
Private ReadOnly _logger As Logger
Private ReadOnly _mssql As MSSQLServer
- Private ReadOnly _firebird As Firebird
- Public Sub New(LogConfig As LogConfig, MSSQL As MSSQLServer, Firebird As Firebird)
+ Public Sub New(LogConfig As LogConfig, MSSQL As MSSQLServer)
_logConfig = LogConfig
_logger = _logConfig.GetLogger()
_mssql = MSSQL
- _firebird = Firebird
End Sub
- Public Sub AddToEmailQueueFB(MessageId As String, BodyText As String, EmailData As EmailData, NamePortal As String)
- If EmailData Is Nothing Then
- _logger.Warn("EmailData is empty. Email will not be sent!")
- Exit Sub
- End If
+ 'Public Sub AddToEmailQueueFB(MessageId As String, BodyText As String, EmailData As EmailData, NamePortal As String)
+ ' If EmailData Is Nothing Then
+ ' _logger.Warn("EmailData is empty. Email will not be sent!")
+ ' Exit Sub
+ ' End If
- Try
- Dim oJobId = RandomValue(1, 10000)
- Dim oReference = MessageId
- Dim oEmailTo = ""
- Dim oSubject = EmailStrings.EMAIL_SUBJECT_REJECTED.Replace(EmailStrings.constNAME_ZUGFERD_PORTAL, NamePortal)
- Dim oAccountId = 1
- Dim oCreatedWho = "ZUGFeRD Service"
- Dim oFinalBodyText = String.Format(EmailStrings.EMAIL_WRAPPING_TEXT.Replace(EmailStrings.constNAME_ZUGFERD_PORTAL, NamePortal), BodyText)
+ ' Try
+ ' Dim oJobId = RandomValue(1, 10000)
+ ' Dim oReference = MessageId
+ ' Dim oEmailTo = ""
+ ' Dim oSubject = EmailStrings.EMAIL_SUBJECT_REJECTED.Replace(EmailStrings.constNAME_ZUGFERD_PORTAL, NamePortal)
+ ' Dim oAccountId = 1
+ ' Dim oCreatedWho = "ZUGFeRD Service"
+ ' Dim oFinalBodyText = String.Format(EmailStrings.EMAIL_WRAPPING_TEXT.Replace(EmailStrings.constNAME_ZUGFERD_PORTAL, NamePortal), BodyText)
- Dim oEmailAddress = EmailData.From
- Dim oAttachment = EmailData.Attachment
+ ' Dim oEmailAddress = EmailData.From
+ ' Dim oAttachment = EmailData.Attachment
- If IsNothing(oEmailAddress) OrElse String.IsNullOrWhiteSpace(oEmailAddress) Then
- _logger.Warn("Could not find email-address for MessageId {0}", MessageId)
- oEmailTo = String.Empty
- Else
- oEmailTo = oEmailAddress
- End If
+ ' If IsNothing(oEmailAddress) OrElse String.IsNullOrWhiteSpace(oEmailAddress) Then
+ ' _logger.Warn("Could not find email-address for MessageId {0}", MessageId)
+ ' oEmailTo = String.Empty
+ ' Else
+ ' oEmailTo = oEmailAddress
+ ' End If
- _logger.Debug("Generated Email:")
- _logger.Debug("To: {0}", oEmailTo)
- _logger.Debug("Subject: {0}", oSubject)
- _logger.Debug("Body {0}", oFinalBodyText)
- Dim osql = $"select * from TBEDM_EMAIL_QUEUE where REFERENCE1 = '{oReference} and EMAIL_TO = ''{oEmailTo}' and EMAIL_SUBJ = '{oSubject}'"
+ ' _logger.Debug("Generated Email:")
+ ' _logger.Debug("To: {0}", oEmailTo)
+ ' _logger.Debug("Subject: {0}", oSubject)
+ ' _logger.Debug("Body {0}", oFinalBodyText)
+ ' Dim osql = $"select * from TBEDM_EMAIL_QUEUE where REFERENCE1 = '{oReference} and EMAIL_TO = ''{oEmailTo}' and EMAIL_SUBJ = '{oSubject}'"
- Dim oDTResult As DataTable = _firebird.GetDatatable(osql)
+ ' Dim oDTResult As DataTable = _firebird.GetDatatable(osql)
+
+ ' If oDTResult.Rows.Count = 0 Then
+ ' Dim oSQLInsert = $"INSERT INTO TBEDM_EMAIL_QUEUE "
+ ' oSQLInsert &= "(JOB_ID, REFERENCE1, EMAIL_ACCOUNT_ID, EMAIL_TO, EMAIL_SUBJ, EMAIL_BODY, CREATEDWHO, EMAIL_ATTMT1) VALUES "
+ ' oSQLInsert &= $"({oJobId}, '{oReference}', {oAccountId}, '{oEmailTo}', '{oSubject}', '{oFinalBodyText.Replace("'", "''")}', '{oCreatedWho}', '{oAttachment}')"
+ ' _firebird.ExecuteNonQuery(oSQLInsert)
+ ' _logger.Debug("Email Queue updated for MessageId {0}.", MessageId, oEmailTo)
+ ' Else
+ ' _logger.Debug("Email has already been sent!!")
+ ' End If
+ ' Catch ex As Exception
+ ' _logger.Error(ex)
+ ' End Try
+ 'End Sub
- If oDTResult.Rows.Count = 0 Then
- Dim oSQLInsert = $"INSERT INTO TBEDM_EMAIL_QUEUE "
- oSQLInsert &= "(JOB_ID, REFERENCE1, EMAIL_ACCOUNT_ID, EMAIL_TO, EMAIL_SUBJ, EMAIL_BODY, CREATEDWHO, EMAIL_ATTMT1) VALUES "
- oSQLInsert &= $"({oJobId}, '{oReference}', {oAccountId}, '{oEmailTo}', '{oSubject}', '{oFinalBodyText.Replace("'", "''")}', '{oCreatedWho}', '{oAttachment}')"
- _firebird.ExecuteNonQuery(oSQLInsert)
- _logger.Debug("Email Queue updated for MessageId {0}.", MessageId, oEmailTo)
- Else
- _logger.Debug("Email has already been sent!!")
- End If
- Catch ex As Exception
- _logger.Error(ex)
- End Try
- End Sub
Public Sub AddToEmailQueueMSSQL(MessageId As String, BodyText As String, pEmailData As EmailData, SourceProcedure As String, pEmailAccountId As Integer, NamePortal As String)
If pEmailData Is Nothing Then
_logger.Warn("EmailData is empty. Email will not be sent!")
@@ -107,13 +106,9 @@ Public Class EmailFunctions
Dim osql = $"Select MAX(GUID) FROM TBEMLP_HISTORY WHERE EMAIL_MSGID = '{MessageId}'"
Dim oHistoryID = _mssql.GetScalarValue(osql)
- 'osql = $"select * from TBEMLP_EMAIL_OUT where REFERENCE_ID = {oHistoryID} and EMAIL_ADRESS = '{oEmailTo}' and EMAIL_SUBJ = '{oSubject}'"
-
- 'Dim oDTResult As DataTable = _mssql.GetDatatable(osql)
-
If IsNumeric(oHistoryID) Then
- Dim oInsert = $"INSERT INTO [dbo].[TBEMLP_EMAIL_OUT] (
- [REMINDER_TYPE_ID]
+ Dim oInsert = $"INSERT INTO [dbo].[TBEMLP_EMAIL_OUT]
+ ([REMINDER_TYPE_ID]
,[SENDING_PROFILE]
,[REFERENCE_ID]
,[REFERENCE_STRING]
@@ -138,11 +133,7 @@ Public Class EmailFunctions
,'{oAttachmentPathEscaped}')"
_mssql.ExecuteNonQuery(oInsert)
Else
- 'If oDTResult.Rows.Count = 0 Then
- ' _logger.Debug("Email has already been sent!!")
- 'Else
_logger.Warn("Could not get oHistoryID in AddToEmailQueueMSSQL!!")
- ' End If
End If
Catch ex As Exception
_logger.Error(ex)
@@ -150,9 +141,9 @@ Public Class EmailFunctions
End Sub
Public Function GetEmailDataForMessageId(MessageId As String) As EmailData
- Dim oSQL = $"SELECT EMAIL_FROM, EMAIL_SUBJECT, EMAIL_ATTMT1 FROM TBEDM_EMAIL_PROFILER_HISTORY WHERE EMAIL_MSGID = '{MessageId}'"
+ Dim oSQL = $"SELECT EMAIL_FROM, EMAIL_SUBJECT, EMAIL_ATTMT1 FROM TBEMLP_HISTORY WHERE EMAIL_MSGID = '{MessageId}'"
Try
- Dim oDatatable = _firebird.GetDatatable(oSQL)
+ Dim oDatatable = _mssql.GetDatatable(oSQL)
Dim oRow As DataRow
If oDatatable.Rows.Count = 0 Then
@@ -186,9 +177,8 @@ Public Class EmailFunctions
End Function
Public Function GetOriginalEmailPath(OriginalEmailDirectory As String, MessageId As String) As String
- Dim oAttachmentDirectory = OriginalEmailDirectory
Dim oAttachmentFile = MessageId & ".eml"
- Dim oAttachmentPath = Path.Combine(oAttachmentDirectory, oAttachmentFile)
+ Dim oAttachmentPath = Path.Combine(OriginalEmailDirectory, oAttachmentFile)
If File.Exists(oAttachmentPath) Then
Return oAttachmentPath
diff --git a/Jobs/ZUGFeRD/ImportZUGFeRDFiles.vb b/Jobs/ZUGFeRD/ImportZUGFeRDFiles.vb
index 515e5da8..5bd4fa93 100644
--- a/Jobs/ZUGFeRD/ImportZUGFeRDFiles.vb
+++ b/Jobs/ZUGFeRD/ImportZUGFeRDFiles.vb
@@ -3,6 +3,7 @@ Imports System.Data
Imports System.IO
Imports System.Linq
Imports System.Security.Cryptography
+Imports DigitalData.Modules.Base
Imports DigitalData.Modules.Database
Imports DigitalData.Modules.Interfaces
Imports DigitalData.Modules.Interfaces.Exceptions
@@ -32,7 +33,6 @@ Public Class ImportZUGFeRDFiles
Private ReadOnly _logger As Logger
Private ReadOnly _logConfig As LogConfig
- Private ReadOnly _firebird As Firebird
Private ReadOnly _filesystem As Filesystem.File
Private ReadOnly _mssql As MSSQLServer
Private ReadOnly _email As EmailFunctions
@@ -44,17 +44,14 @@ Public Class ImportZUGFeRDFiles
Private Class DatabaseConnections
Public Property SQLServerConnection As SqlConnection
Public Property SQLServerTransaction As SqlTransaction
- Public Property FirebirdConnection As FbConnection
- Public Property FirebirdTransaction As FbTransaction
End Class
- Public Sub New(LogConfig As LogConfig, Firebird As Firebird, Optional MSSQL As MSSQLServer = Nothing)
+ Public Sub New(LogConfig As LogConfig, Optional MSSQL As MSSQLServer = Nothing)
_logConfig = LogConfig
_logger = LogConfig.GetLogger()
- _firebird = Firebird
_filesystem = New Filesystem.File(_logConfig)
_mssql = MSSQL
- _email = New EmailFunctions(LogConfig, _mssql, _firebird)
+ _email = New EmailFunctions(LogConfig, _mssql)
_logger.Debug("Registering GDPicture License")
If _mssql IsNot Nothing Then
@@ -67,6 +64,9 @@ Public Class ImportZUGFeRDFiles
End Sub
Private Function MoveAndRenameEmailToRejected(Args As WorkerArgs, MessageId As String) As EmailData
+ _logger.Info("Moving Mail with MessageId [{0}] to Rejected folder", MessageId)
+ _logger.Debug("Fetching Email Data")
+
Dim oEmailData = _email.GetEmailDataForMessageId(MessageId)
Dim oSource = _email.GetOriginalEmailPath(Args.OriginalEmailDirectory, MessageId)
Dim oDateSubDirectoryName As String = Now.ToString("yyyy-MM-dd")
@@ -104,7 +104,7 @@ Public Class ImportZUGFeRDFiles
Try
_logger.Info("Moving email from {0} to {1}", oSource, oFinalFileName)
- IO.File.Move(oSource, oFinalFileName)
+ File.Move(oSource, oFinalFileName)
oEmailData.Attachment = oFinalFileName
Catch ex As Exception
_logger.Warn("File {0} could not be moved! Original Filename will be used!", oSource)
@@ -171,24 +171,15 @@ Public Class ImportZUGFeRDFiles
For Each oFileGroup In oGrouped
' Start a new transaction for each file group.
' This way we can rollback database changes for the whole filegroup in case something goes wrong.
- Dim oFBConnection As FbConnection = _firebird.GetConnection()
- Dim oFBTransaction As FbTransaction = oFBConnection.BeginTransaction()
Dim oSQLConnection As SqlConnection = _mssql.GetConnection()
Dim oSQLTransaction As SqlTransaction = oSQLConnection?.BeginTransaction()
Dim oConnections As New DatabaseConnections() With {
.SQLServerConnection = oSQLConnection,
- .SQLServerTransaction = oSQLTransaction,
- .FirebirdConnection = oFBConnection,
- .FirebirdTransaction = oFBTransaction
+ .SQLServerTransaction = oSQLTransaction
}
- If oSQLConnection Is Nothing Then
- _logger.Warn("SQL Connection was not set. No INSERTs for MSSQL Server will be performed!")
- oArgs.InsertIntoSQLServer = False
- End If
-
' Count the amount of ZUGFeRD files
Dim oZUGFeRDCount As Integer = 0
@@ -298,7 +289,7 @@ Public Class ImportZUGFeRDFiles
End If
' Check the Checksum and rejection status
- oMD5CheckSum = GenerateAndCheck_MD5Sum(oFile.FullName, oArgs.IgnoreRejectionStatus)
+ oMD5CheckSum = GenerateAndCheck_MD5Sum(oFile.FullName, oMessageId, oArgs.IgnoreRejectionStatus)
' Check the document against the configured property map and return:
' - a List of valid properties
@@ -360,7 +351,7 @@ Public Class ImportZUGFeRDFiles
'If no errors occurred...
'Log the History
If oMD5CheckSum <> String.Empty Then
- Create_HistoryEntry(oMessageId, oMD5CheckSum, "SUCCESS", oFBTransaction)
+ Create_HistoryEntry(oMessageId, oMD5CheckSum, "SUCCESS", oSQLTransaction)
'Dim oInsertCommand = $"INSERT INTO TBEDM_ZUGFERD_HISTORY_IN (MESSAGE_ID, MD5HASH) VALUES ('{oMessageId}', '{oMD5CheckSum}')"
'_firebird.ExecuteNonQueryWithConnection(oInsertCommand, oFBConnection, Firebird.TransactionMode.ExternalTransaction, oFBTransaction)
@@ -373,7 +364,7 @@ Public Class ImportZUGFeRDFiles
' HISTORY_ID = 0
'End Try
Else
- Create_HistoryEntry(oMessageId, String.Empty, "SUCCESS (with empty MD5Hash)", oFBTransaction)
+ Create_HistoryEntry(oMessageId, String.Empty, "SUCCESS (with empty MD5Hash)", oSQLTransaction)
End If
oIsSuccess = True
@@ -384,7 +375,7 @@ Public Class ImportZUGFeRDFiles
Dim oErrors = ex.ValidationErrors
Dim oMessage = "REJECTED - ZUGFeRD yes but formal validation failed!"
- Update_HistoryEntry(oMessageId, oMD5CheckSum, oMessage, oFBTransaction)
+ Update_HistoryEntry(oMessageId, oMD5CheckSum, oMessage, oSQLTransaction)
Dim oErrorList As String = ""
For Each oError In oErrors
@@ -400,8 +391,10 @@ Public Class ImportZUGFeRDFiles
Catch ex As MD5HashException
_logger.Error(ex)
+ ' When MD5HashException is thrown, we don't have a MD5Hash yet.
+ ' That 's why we set it to String.Empty here.
Dim oMessage = "REJECTED - Already processed (MD5Hash)"
- Update_HistoryEntry(oMessageId, oMD5CheckSum, oMessage, oFBTransaction)
+ Update_HistoryEntry(oMessageId, String.Empty, oMessage, oSQLTransaction)
Dim oBody = EmailStrings.EMAIL_MD5_ERROR
Dim oEmailData = MoveAndRenameEmailToRejected(oArgs, oMessageId)
@@ -413,7 +406,7 @@ Public Class ImportZUGFeRDFiles
' When UnsupportedFerdException is thrown, we don't have a MD5Hash yet.
' That 's why we set it to String.Empty here.
- Create_HistoryEntry(oMessageId, String.Empty, "REJECTED - ZUGFeRD yes but unsupported format", oFBTransaction)
+ Create_HistoryEntry(oMessageId, String.Empty, "REJECTED - ZUGFeRD yes but unsupported format", oSQLTransaction)
Dim oEmailData = MoveAndRenameEmailToRejected(oArgs, oMessageId)
Dim oBody As String = String.Format(EmailStrings.EMAIL_UNSUPPORTED_DOCUMENT, oEmailData.Subject, ex.XmlFile)
@@ -426,7 +419,7 @@ Public Class ImportZUGFeRDFiles
' When InvalidFerdException is thrown, we don't have a MD5Hash yet.
' That 's why we set it to String.Empty here.
- Create_HistoryEntry(oMessageId, String.Empty, "REJECTED - ZUGFeRD yes but incorrect format", oFBTransaction)
+ Create_HistoryEntry(oMessageId, String.Empty, "REJECTED - ZUGFeRD yes but incorrect format", oSQLTransaction)
Dim oEmailData = MoveAndRenameEmailToRejected(oArgs, oMessageId)
Dim oBody = String.Format(EmailStrings.EMAIL_INVALID_DOCUMENT, oEmailData.Subject)
@@ -437,7 +430,7 @@ Public Class ImportZUGFeRDFiles
Catch ex As TooMuchFerdsException
_logger.Error(ex)
- Create_HistoryEntry(oMessageId, oMD5CheckSum, "REJECTED - More than one ZUGFeRD-document in email", oFBTransaction)
+ Create_HistoryEntry(oMessageId, oMD5CheckSum, "REJECTED - More than one ZUGFeRD-document in email", oSQLTransaction)
Dim oEmailData = MoveAndRenameEmailToRejected(oArgs, oMessageId)
Dim oBody = String.Format(EmailStrings.EMAIL_TOO_MUCH_FERDS, oEmailData.Subject)
@@ -448,7 +441,7 @@ Public Class ImportZUGFeRDFiles
Catch ex As NoFerdsException
_logger.Error(ex)
- Create_HistoryEntry(oMessageId, oMD5CheckSum, "REJECTED - no ZUGFeRD-Document in email", oFBTransaction)
+ Create_HistoryEntry(oMessageId, oMD5CheckSum, "REJECTED - no ZUGFeRD-Document in email", oSQLTransaction)
Dim oEmailData = MoveAndRenameEmailToRejected(oArgs, oMessageId)
Dim oBody = String.Format(EmailStrings.EMAIL_NO_FERDS, oEmailData.Subject)
@@ -469,7 +462,7 @@ Public Class ImportZUGFeRDFiles
oMessage &= $"- {prop}"
Next
- Create_HistoryEntry(oMessageId, oMD5CheckSum, $"REJECTED - Missing Required Properties: [{oMessage}]", oFBTransaction)
+ Create_HistoryEntry(oMessageId, oMD5CheckSum, $"REJECTED - Missing Required Properties: [{oMessage}]", oSQLTransaction)
Dim oBody = CreateBodyForMissingProperties(ex.File.Name, oMissingProperties)
Dim oEmailData = MoveAndRenameEmailToRejected(oArgs, oMessageId)
@@ -479,7 +472,7 @@ Public Class ImportZUGFeRDFiles
Catch ex As FileSizeLimitReachedException
_logger.Error(ex)
- Create_HistoryEntry(oMessageId, oMD5CheckSum, "REJECTED - File size limit reached", oFBTransaction)
+ Create_HistoryEntry(oMessageId, oMD5CheckSum, "REJECTED - File size limit reached", oSQLTransaction)
Dim oEmailData = MoveAndRenameEmailToRejected(oArgs, oMessageId)
@@ -506,10 +499,7 @@ Public Class ImportZUGFeRDFiles
}
_email.AddToEmailQueueMSSQL(oMessageId, oBody, oEmailData, "OutOfMemoryException", _EmailOutAccountId, oArgs.NamePortal)
- ' Rollback Firebird
- oFBTransaction.Rollback()
-
- ' Rollback MSSQL
+ ' Rollback Transaction
oSQLTransaction.Rollback()
oMoveDirectory = DIRECTORY_DONT_MOVE
@@ -528,10 +518,7 @@ Public Class ImportZUGFeRDFiles
}
_email.AddToEmailQueueMSSQL(oMessageId, oBody, oEmailData, "UnhandledException", _EmailOutAccountId, oArgs.NamePortal)
- ' Rollback Firebird
- oFBTransaction.Rollback()
-
- ' Rollback MSSQL
+ ' Rollback Transaction
oSQLTransaction.Rollback()
oMoveDirectory = DIRECTORY_DONT_MOVE
@@ -567,11 +554,8 @@ Public Class ImportZUGFeRDFiles
' finally commit all changes To the Database
' ==================================================================
If oIsSuccess Or oExpectedError Then
- ' Commit SQL Transaction
+ ' Commit Transaction
oSQLTransaction.Commit()
-
- ' Commit Firebird Transaction
- oFBTransaction.Commit()
End If
Catch ex As Exception
_logger.Error(ex)
@@ -579,7 +563,6 @@ Public Class ImportZUGFeRDFiles
End Try
Try
- oFBConnection.Close()
oSQLConnection.Close()
Catch ex As Exception
_logger.Error(ex)
@@ -601,22 +584,12 @@ Public Class ImportZUGFeRDFiles
Dim oDelSQL = $"DELETE FROM TBEDMI_ITEM_VALUE where REFERENCE_GUID = '{pMessageId}'"
Dim oStep As String
- oStep = "Firebird TBEDMI_ITEM_VALUE Delete messageID Items"
+ oStep = "TBEDMI_ITEM_VALUE Delete MessageID Items"
Try
- _firebird.ExecuteNonQueryWithConnection(oDelSQL, pConnections.FirebirdConnection, Firebird.TransactionMode.ExternalTransaction, pConnections.FirebirdTransaction)
+ _mssql.ExecuteNonQueryWithConnectionObject(oDelSQL, pConnections.SQLServerConnection, MSSQLServer.TransactionMode.ExternalTransaction, pConnections.SQLServerTransaction)
Catch ex As Exception
- _logger.Error(ex)
_logger.Warn("Step [{0}] with SQL [{1}] was not successful.", oStep, oDelSQL)
End Try
-
- If pArgs.InsertIntoSQLServer = True Then
- oStep = "MSSQL TBEDMI_ITEM_VALUE Delete messageID Items"
- Try
- _mssql.ExecuteNonQueryWithConnectionObject(oDelSQL, pConnections.SQLServerConnection, MSSQLServer.TransactionMode.ExternalTransaction, pConnections.SQLServerTransaction)
- Catch ex As Exception
- _logger.Warn("Step [{0}] with SQL [{1}] was not successful.", oStep, oDelSQL)
- End Try
- End If
End Sub
Private Sub InsertPropertyValue(pMessageId As String, pArgs As WorkerArgs, pConnections As DatabaseConnections, pProperty As PropertyValues.ValidProperty)
@@ -632,14 +605,11 @@ Public Class ImportZUGFeRDFiles
('{pMessageId}', '{pProperty.Description}', '{pProperty.Value.Replace("'", "''")}', {oGroupCounterValue},'{pProperty.TableColumn}','{pProperty.IsRequired}')"
_logger.Debug("Mapping Property [{0}] with value [{1}], Will be inserted into table [{2}]", pProperty.TableColumn, pProperty.Value.Replace("'", "''"), pProperty.TableName)
' Insert into SQL Server
- If pArgs.InsertIntoSQLServer = True Then
- Dim oResult = _mssql.ExecuteNonQueryWithConnectionObject(oCommand, pConnections.SQLServerConnection, MSSQLServer.TransactionMode.ExternalTransaction, pConnections.SQLServerTransaction)
- If oResult = False Then
- _logger.Warn($"SQL Command [{oCommand}] was not successful. Check the log.")
- End If
+
+ Dim oResult = _mssql.ExecuteNonQueryWithConnectionObject(oCommand, pConnections.SQLServerConnection, MSSQLServer.TransactionMode.ExternalTransaction, pConnections.SQLServerTransaction)
+ If oResult = False Then
+ _logger.Warn($"SQL Command [{oCommand}] was not successful. Check the log.")
End If
- ' Insert into Firebird
- _firebird.ExecuteNonQueryWithConnection(oCommand, pConnections.FirebirdConnection, Firebird.TransactionMode.ExternalTransaction, pConnections.FirebirdTransaction)
End Sub
Private Function DoGetPropertyMapFor(pWorkerArgs As WorkerArgs, pSpecification As String) As Dictionary(Of String, XmlItemProperty)
@@ -779,17 +749,19 @@ Public Class ImportZUGFeRDFiles
End Try
End Function
- Private Function Create_HistoryEntry(MessageId As String, MD5Checksum As String, Message As String, Transaction As FbTransaction) As Boolean
+ Private Function Create_HistoryEntry(MessageId As String, MD5Checksum As String, Message As String, Transaction As SqlTransaction) As Boolean
Try
- Dim oConnection = _firebird.GetConnection()
+ _logger.Info("Creating History Entry for MessageId [{0}] with comment [{1}]", MessageId, Message)
Dim oSQL = $"INSERT INTO TBEDM_ZUGFERD_HISTORY_IN (COMMENT, MD5HASH, MESSAGE_ID) VALUES ('{Message}', '{MD5Checksum}', '{MessageId}')"
- ' 09.07.2021: This can't be in the transaction since the history
- ' Entry needs to be accessed by MoveAndRenameEmailToRejected shortly after
- _firebird.ExecuteNonQueryWithConnection(oSQL, oConnection, Firebird.TransactionMode.WithTransaction)
+ Using oConnection = _mssql.GetConnection()
+ ' 09.07.2021: This can't be in the transaction since the history
+ ' Entry needs to be accessed by MoveAndRenameEmailToRejected shortly after
+ _mssql.ExecuteNonQueryWithConnectionObject(oSQL, Transaction.Connection, MSSQLServer.TransactionMode.NoTransaction)
+ End Using
+
+ _logger.Debug("History Entry created!")
- ' Close the connection
- oConnection.Close()
If Message.Contains("REJECTED") Then
oSQL = $"UPDATE TBEMLP_HISTORY SET STATUS = 'REJECTED', COMMENT = '{Message}', CUST_REJECTED = 1,CUST_REJECTED_WHEN = GETDATE() WHERE EMAIL_MSGID = '{MessageId}'"
_mssql.ExecuteNonQuery(oSQL)
@@ -804,15 +776,19 @@ Public Class ImportZUGFeRDFiles
End Try
End Function
- Private Function Update_HistoryEntry(MessageId As String, MD5Checksum As String, Message As String, Transaction As FbTransaction) As Boolean
+ Private Function Update_HistoryEntry(MessageId As String, MD5Checksum As String, Message As String, Transaction As SqlTransaction) As Boolean
Try
- Dim oConnection = _firebird.GetConnection()
- Dim oSQL = $"UPDATE TBEDM_ZUGFERD_HISTORY_IN SET COMMENT = '{Message}' WHERE MD5HASH = '{MD5Checksum}' AND MESSAGE_ID = '{MessageId}'"
+ _logger.Info("Updating History Entry for MessageId [{0}] with comment [{1}]", MessageId, Message)
+ ' Only look for history entry by MessageId since the MD5 Hash might not be generated yet
+ Dim oSQL = $"UPDATE TBEDM_ZUGFERD_HISTORY_IN SET COMMENT = '{Message}' WHERE MESSAGE_ID = '{MessageId}'"
- _firebird.ExecuteNonQueryWithConnection(oSQL, oConnection, Firebird.TransactionMode.WithTransaction)
+ Using oConnection = _mssql.GetConnection()
+ ' 09.07.2021: This can't be in the transaction since the history
+ ' Entry needs to be accessed by MoveAndRenameEmailToRejected shortly after
+ _mssql.ExecuteNonQueryWithConnectionObject(oSQL, Transaction.Connection, MSSQLServer.TransactionMode.NoTransaction)
+ End Using
- ' Close the connection
- oConnection.Close()
+ _logger.Debug("History Entry created!")
Return True
Catch ex As Exception
@@ -830,7 +806,7 @@ Public Class ImportZUGFeRDFiles
''' Should the check take into account the rejection status of the file?
''' The MD5 Checksum of the file, or an empty string, if the Checksum could not be created
''' Throws, when the file should be rejected, ie. if it already exists in the table
- Private Function GenerateAndCheck_MD5Sum(pFilePath As String, pIgnoreRejectionStatus As Boolean) As String
+ Private Function GenerateAndCheck_MD5Sum(pFilePath As String, pMessageId As String, pIgnoreRejectionStatus As Boolean) As String
Dim oMD5CheckSum = CreateMD5(pFilePath)
' Exit if MD5 could not be created
@@ -840,8 +816,13 @@ Public Class ImportZUGFeRDFiles
End If
' Check if Checksum exists in History Table
- Dim oCheckCommand = $"SELECT * FROM TBEDM_ZUGFERD_HISTORY_IN WHERE GUID = (SELECT MAX(GUID) FROM TBEDM_ZUGFERD_HISTORY_IN WHERE UPPER(MD5HASH) = UPPER('{oMD5CheckSum}'))"
- Dim oTable As DataTable = _firebird.GetDatatable(oCheckCommand, Firebird.TransactionMode.NoTransaction)
+ 'Dim oCheckCommand = $"SELECT * FROM TBEDM_ZUGFERD_HISTORY_IN WHERE GUID = (SELECT MAX(GUID) FROM TBEDM_ZUGFERD_HISTORY_IN WHERE UPPER(MD5HASH) = UPPER('{oMD5CheckSum}'))"
+ 'Dim oTable As DataTable = _firebird.GetDatatable(oCheckCommand, Firebird.TransactionMode.NoTransaction)
+
+ ' Check if Checksum exists in History Table
+ ' TODO: WHAT THE FUCK IS THIS
+ Dim oCheckCommand = $"SELECT * FROM TBEMLP_HISTORY WHERE GUID = (SELECT MAX(GUID) FROM TBEMLP_HISTORY WHERE UPPER(MD5HASH) = UPPER('{oMD5CheckSum}'))"
+ Dim oTable As DataTable = _mssql.GetDatatable(oCheckCommand, MSSQLServer.TransactionMode.NoTransaction)
' If History entries could not be fetched, just return the MD5 Checksum
If IsNothing(oTable) Then
@@ -865,7 +846,7 @@ Public Class ImportZUGFeRDFiles
' Try to read Rejected Status and History Id
Try
Dim oRow As DataRow = oTable.Rows.Item(0)
- oRejected = DirectCast(oRow.Item("REJECTED"), Boolean)
+ oRejected = oRow.ItemEx("CUST_REJECTED", False)
oHistoryId = oRow.Item("GUID")
Catch ex As Exception
@@ -873,7 +854,9 @@ Public Class ImportZUGFeRDFiles
oRejected = False
End Try
- _logger.Info("File has already been processed...")
+
+ _logger.Info("File with MessageId [{0}] has already been processed.", pMessageId)
+
' If the file was already rejected, it is allowed to be processed again,
' even if the Checksum exists in the history entries (default case)
' Which means, if it was not rejected before, it will be rejected in any case!
@@ -881,10 +864,15 @@ Public Class ImportZUGFeRDFiles
' This logic can be overwritten by the IgnoreRejectionStatus parameter.
' If it is set to true, the file will be rejected if the file exists in the history entries,
' regardless of the rejected parameter.
+
If oRejected = True And pIgnoreRejectionStatus = True Then
- _logger.Info("ZuGFeRDFile already has been processed, but formerly obviously was rejected!")
+ _logger.Info("ZuGFeRDFile already has been processed, but Rejection Status will be ignored!")
+ ElseIf oRejected = False Then
+ _logger.Info("ZuGFeRDFile already has been processed. Will be rejected.")
+ Throw New MD5HashException($"There is already an identical invoice! - HistoryID [{oHistoryId}] - Case 1")
Else
- Throw New MD5HashException($"There is already an identical invoice! - HistoryID [{oHistoryId}]")
+ _logger.Info("ZuGFeRDFile already has been processed. Will be rejected.")
+ Throw New MD5HashException($"There is already an identical invoice! - HistoryID [{oHistoryId}] - Case 2")
End If
Return oMD5CheckSum
diff --git a/Jobs/ZUGFeRD/WorkerArgs.vb b/Jobs/ZUGFeRD/WorkerArgs.vb
index ba9ac70d..226ad109 100644
--- a/Jobs/ZUGFeRD/WorkerArgs.vb
+++ b/Jobs/ZUGFeRD/WorkerArgs.vb
@@ -18,7 +18,6 @@ Public Class WorkerArgs
Public EmailOutProfileId As Integer = 0
' Misc Flag Parameters
- Public InsertIntoSQLServer As Boolean = False
Public ExceptionEmailAddress As String = Nothing
Public IgnoreRejectionStatus As Boolean = False
Public MaxAttachmentSizeInMegaBytes As Integer = -1