diff --git a/Jobs/ZUGFeRD/HashFunctions.vb b/Jobs/ZUGFeRD/HashFunctions.vb index 52d22432..5b6834a3 100644 --- a/Jobs/ZUGFeRD/HashFunctions.vb +++ b/Jobs/ZUGFeRD/HashFunctions.vb @@ -72,12 +72,7 @@ Public Class HashFunctions End Try - ' Try to get the original filename from Attachment table - ' If this fails, falls back to the new filename (~Attm.ext) - Dim oSQL = $"SELECT EMAIL_ATTMT FROM TBEMLP_HISTORY_ATTACHMENT WHERE EMAIL_ATTMT_INDEX = '{pFile.Name}'" - Dim oEmailAttachment = Database.GetScalarValue(oSQL, MSSQLServer.TransactionMode.NoTransaction) - Dim oOriginalName = ObjectEx.NotNull(oEmailAttachment, pFile.Name) - + Dim oOriginalName As Object = GetOriginalFilename(pFile.Name) Logger.Info("File with MessageId [{0}] and Filename [{1}] has already been processed.", pMessageId, oOriginalName) ' If the file was already rejected, it is allowed to be processed again, @@ -101,6 +96,15 @@ Public Class HashFunctions Return oMD5CheckSum End Function + Public Function GetOriginalFilename(pFilename As String) As String + ' Try to get the original filename from Attachment table + ' If this fails, falls back to the new filename (~Attm.ext) + Dim oSQL = $"SELECT EMAIL_ATTMT FROM TBEMLP_HISTORY_ATTACHMENT WHERE EMAIL_ATTMT_INDEX = '{pFilename}'" + Dim oEmailAttachment = Database.GetScalarValue(oSQL, MSSQLServer.TransactionMode.NoTransaction) + Dim oOriginalName = ObjectEx.NotNull(oEmailAttachment, pFilename) + Return oOriginalName + End Function + Private Function CreateMD5(pFilename As String) As String Try Dim oMD5 As New MD5CryptoServiceProvider diff --git a/Jobs/ZUGFeRD/ImportZUGFeRDFiles.vb b/Jobs/ZUGFeRD/ImportZUGFeRDFiles.vb index 1ee0edb9..36cdde13 100644 --- a/Jobs/ZUGFeRD/ImportZUGFeRDFiles.vb +++ b/Jobs/ZUGFeRD/ImportZUGFeRDFiles.vb @@ -216,11 +216,14 @@ Public Class ImportZUGFeRDFiles Catch ex As ValidationException _logger.Error(ex) - Dim oErrors = ex.ValidationErrors - 'Dim oMessage = "REJECTED - ZUGFeRD yes but formal validation failed!" - Dim oMessage = $"{EmailStrings.ErrorCodePraefix}{ErrorCode.ValidationException}" - _history.Update_HistoryEntry(oMessageId, oMD5CheckSum, oMessage) + Dim oErrorCodeString = $"{EmailStrings.ErrorCodePraefix}{ErrorCode.ValidationException}" + Dim oErrorMessage = $"Error {oErrorCodeString} occured for '{oMessageId}'" + _logger.Error(oErrorMessage) + 'Dim oMessage = "REJECTED - ZUGFeRD yes but formal validation failed!" + _history.Update_HistoryEntry(oMessageId, oMD5CheckSum, oErrorCodeString) + + Dim oErrors = ex.ValidationErrors Dim oErrorList As String = "" Dim oErrorListDE As String = "" For Each oError In oErrors @@ -231,113 +234,129 @@ Public Class ImportZUGFeRDFiles Dim oBody = String.Format(EmailStrings.EMAIL_VALIDATION_ERROR, oErrorList) Dim oEmailData = _file.MoveAndRenameEmailToRejected(oArgs, oMessageId) _email.AddToEmailQueueMSSQL(oMessageId, oSQLTransaction, oBody, oEmailData, "ValidationException", _EmailOutAccountId, oArgs.NamePortal, oArgs.RejectionTemplateId, ErrorCode.ValidationException, oErrorListDE, oErrorList) - AddRejectedState(oMessageId, oMessage, "Die Rechnungsvalidierung ist fehlgeschlagen!", "", oSQLTransaction) + AddRejectedState(oMessageId, oErrorCodeString, "Die Rechnungsvalidierung ist fehlgeschlagen!", "", oSQLTransaction) Catch ex As MD5HashException _logger.Error(ex) + Dim oErrorCodeString = $"{EmailStrings.ErrorCodePraefix}{ErrorCode.MD5HashException}" + Dim oErrorMessage = $"Error {oErrorCodeString} occured for '{oMessageId}'" + _logger.Error(oErrorMessage) + ' 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)" - Dim oMessage = $"{EmailStrings.ErrorCodePraefix}{ErrorCode.MD5HashException}" - _history.Update_HistoryEntry(oMessageId, String.Empty, oMessage) + _history.Update_HistoryEntry(oMessageId, String.Empty, oErrorCodeString) Dim oBody = String.Format(EmailStrings.EMAIL_MD5_ERROR, ex.FileName) Dim oEmailData = _file.MoveAndRenameEmailToRejected(oArgs, oMessageId) _email.AddToEmailQueueMSSQL(oMessageId, oSQLTransaction, oBody, oEmailData, "MD5HashException", _EmailOutAccountId, oArgs.NamePortal, oArgs.RejectionTemplateId, ErrorCode.MD5HashException, ex.FileName, "") - AddRejectedState(oMessageId, oMessage, "Die gesendete Rechnung wurde bereits verarbeitet!", "", oSQLTransaction) + AddRejectedState(oMessageId, oErrorCodeString, "Die gesendete Rechnung wurde bereits verarbeitet!", "", oSQLTransaction) Catch ex As UnsupportedFerdException _logger.Error(ex) + Dim oErrorCodeString = $"{EmailStrings.ErrorCodePraefix}{ErrorCode.UnsupportedFerdException}" + Dim oErrorMessage = $"Error {oErrorCodeString} occured for '{oMessageId}'" + _logger.Error(oErrorMessage) + ' When UnsupportedFerdException is thrown, we don't have a MD5Hash yet. ' That 's why we set it to String.Empty here. - Dim oMessage = $"{EmailStrings.ErrorCodePraefix}{ErrorCode.UnsupportedFerdException}" - _history.Update_HistoryEntry(oMessageId, String.Empty, oMessage) + _history.Update_HistoryEntry(oMessageId, String.Empty, oErrorCodeString) Dim oEmailData = _file.MoveAndRenameEmailToRejected(oArgs, oMessageId) Dim oBody As String = String.Format(EmailStrings.EMAIL_UNSUPPORTED_DOCUMENT, oEmailData.Subject, ex.XmlFile) _email.AddToEmailQueueMSSQL(oMessageId, oSQLTransaction, oBody, oEmailData, "UnsupportedFerdException", _EmailOutAccountId, oArgs.NamePortal, oArgs.RejectionTemplateId, ErrorCode.UnsupportedFerdException, ex.XmlFile, "") - AddRejectedState(oMessageId, oMessage, "Nicht unterstütztes Datenformat", "", oSQLTransaction) + AddRejectedState(oMessageId, oErrorCodeString, "Nicht unterstütztes Datenformat", "", oSQLTransaction) Catch ex As InvalidFerdException _logger.Error(ex) + Dim oErrorCodeString = $"{EmailStrings.ErrorCodePraefix}{ErrorCode.InvalidFerdException}" + Dim oErrorMessage = $"Error {oErrorCodeString} occured for '{oMessageId}'" + _logger.Error(oErrorMessage) + ' When InvalidFerdException is thrown, we don't have a MD5Hash yet. ' That 's why we set it to String.Empty here. - Dim oMessage = $"{EmailStrings.ErrorCodePraefix}{ErrorCode.InvalidFerdException}" - _history.Update_HistoryEntry(oMessageId, String.Empty, oMessage) + _history.Update_HistoryEntry(oMessageId, String.Empty, oErrorCodeString) Dim oEmailData = _file.MoveAndRenameEmailToRejected(oArgs, oMessageId) Dim oBody = String.Format(EmailStrings.EMAIL_INVALID_DOCUMENT, oEmailData.Subject) _email.AddToEmailQueueMSSQL(oMessageId, oSQLTransaction, oBody, oEmailData, "InvalidFerdException", _EmailOutAccountId, oArgs.NamePortal, oArgs.RejectionTemplateId, ErrorCode.InvalidFerdException, "", "") - AddRejectedState(oMessageId, oMessage, "Inkorrektes Format", "", oSQLTransaction) + AddRejectedState(oMessageId, oErrorCodeString, "Inkorrektes Format", "", oSQLTransaction) Catch ex As TooMuchFerdsException _logger.Error(ex) - Dim oMessage = $"{EmailStrings.ErrorCodePraefix}{ErrorCode.TooMuchFerdsException}" - _history.Update_HistoryEntry(oMessageId, oMD5CheckSum, oMessage) + Dim oErrorCodeString = $"{EmailStrings.ErrorCodePraefix}{ErrorCode.TooMuchFerdsException}" + Dim oErrorMessage = $"Error {oErrorCodeString} occured for '{oMessageId}'" + _logger.Error(oErrorMessage) + + _history.Update_HistoryEntry(oMessageId, oMD5CheckSum, oErrorCodeString) Dim oEmailData = _file.MoveAndRenameEmailToRejected(oArgs, oMessageId) Dim oBody = String.Format(EmailStrings.EMAIL_TOO_MUCH_FERDS, oEmailData.Subject) _email.AddToEmailQueueMSSQL(oMessageId, oSQLTransaction, oBody, oEmailData, "TooMuchFerdsException", _EmailOutAccountId, oArgs.NamePortal, oArgs.RejectionTemplateId, ErrorCode.TooMuchFerdsException, "", "") - AddRejectedState(oMessageId, oMessage, "Email enthielt mehr als ein ZUGFeRD-Dokument", "", oSQLTransaction) + AddRejectedState(oMessageId, oErrorCodeString, "Email enthielt mehr als ein ZUGFeRD-Dokument", "", oSQLTransaction) Catch ex As NoFerdsException _logger.Error(ex) - Dim oMessage = $"{EmailStrings.ErrorCodePraefix}{ErrorCode.NoFerdsException}" - _history.Update_HistoryEntry(oMessageId, oMD5CheckSum, oMessage) + Dim oErrorCodeString = $"{EmailStrings.ErrorCodePraefix}{ErrorCode.NoFerdsException}" + Dim oErrorMessage = $"Error {oErrorCodeString} occured for '{oMessageId}'" + _logger.Error(oErrorMessage) + + _history.Update_HistoryEntry(oMessageId, oMD5CheckSum, oErrorCodeString) Dim oEmailData = _file.MoveAndRenameEmailToRejected(oArgs, oMessageId) Dim oBody = String.Format(EmailStrings.EMAIL_NO_FERDS, oEmailData.Subject) _email.AddToEmailQueueMSSQL(oMessageId, oSQLTransaction, oBody, oEmailData, "NoFerdsException", _EmailOutAccountId, oArgs.NamePortal, oArgs.RejectionTemplateId, ErrorCode.NoFerdsException, "", "") - AddRejectedState(oMessageId, oMessage, "Email enthielt keine ZUGFeRD-Dokumente", "", oSQLTransaction) + AddRejectedState(oMessageId, oErrorCodeString, "Email enthielt keine ZUGFeRD-Dokumente", "", oSQLTransaction) Catch ex As MissingValueException _logger.Error(ex) - 'Dim oMessage As String = "" - 'For Each prop In ex.MissingProperties - ' oMessage &= $"- {prop}" - 'Next + Dim oErrorCodeString = $"{EmailStrings.ErrorCodePraefix}{ErrorCode.MissingValueException}" + Dim oErrorMessage = $"Error {oErrorCodeString} occured for '{oMessageId}'" + _logger.Error(oErrorMessage) - Dim oMessage = $"{EmailStrings.ErrorCodePraefix}{ErrorCode.MissingValueException}" - _history.Update_HistoryEntry(oMessageId, oMD5CheckSum, oMessage) + _history.Update_HistoryEntry(oMessageId, oMD5CheckSum, oErrorCodeString) Dim oMissingFieldList As String = "" For Each oMissingFieldDescription In ex.MissingProperties oMissingFieldList += $"
  • {oMissingFieldDescription}
  • " Next + Dim oOrgFilename = _hash.GetOriginalFilename(ex.File.Name) Dim oBody = _email.CreateBodyForMissingProperties(ex.File.Name, ex.MissingProperties) Dim oEmailData = _file.MoveAndRenameEmailToRejected(oArgs, oMessageId) - _email.AddToEmailQueueMSSQL(oMessageId, oSQLTransaction, oBody, oEmailData, "MissingValueException", _EmailOutAccountId, oArgs.NamePortal, oArgs.RejectionTemplateId, ErrorCode.MissingValueException, ex.File.Name, oMissingFieldList) - AddRejectedState(oMessageId, oMessage, "Es fehlten ZugferdSpezifikationen", "", oSQLTransaction) + + _email.AddToEmailQueueMSSQL(oMessageId, oSQLTransaction, oBody, oEmailData, "MissingValueException", _EmailOutAccountId, oArgs.NamePortal, oArgs.RejectionTemplateId, ErrorCode.MissingValueException, oOrgFilename, oMissingFieldList) + AddRejectedState(oMessageId, oErrorCodeString, "Es fehlten ZugferdSpezifikationen", "", oSQLTransaction) Catch ex As FileSizeLimitReachedException _logger.Error(ex) - Dim oMessage = $"{EmailStrings.ErrorCodePraefix}{ErrorCode.FileSizeLimitReachedException}" - _history.Update_HistoryEntry(oMessageId, oMD5CheckSum, oMessage) + Dim oErrorCodeString = $"{EmailStrings.ErrorCodePraefix}{ErrorCode.FileSizeLimitReachedException}" + Dim oErrorMessage = $"Error {oErrorCodeString} occured for '{oMessageId}'" + _logger.Error(oErrorMessage) + + _history.Update_HistoryEntry(oMessageId, oMD5CheckSum, oErrorCodeString) Dim oEmailData = _file.MoveAndRenameEmailToRejected(oArgs, oMessageId) Dim oKey = FileSizeLimitReachedException.KEY_FILENAME Dim oFileExceedingThreshold As String = IIf(ex.Data.Contains(oKey), ex.Data.Item(oKey), "") - Dim oFileWithoutMessageId = oFileExceedingThreshold. - Replace(oMessageId, ""). - Replace("~", "") + Dim oOrgFilename = _hash.GetOriginalFilename(oFileExceedingThreshold) - Dim oBody = String.Format(EmailStrings.EMAIL_FILE_SIZE_REACHED, oArgs.MaxAttachmentSizeInMegaBytes, oFileWithoutMessageId) + Dim oBody = String.Format(EmailStrings.EMAIL_FILE_SIZE_REACHED, oArgs.MaxAttachmentSizeInMegaBytes, oOrgFilename) - _email.AddToEmailQueueMSSQL(oMessageId, oSQLTransaction, oBody, oEmailData, "FileSizeLimitReachedException", _EmailOutAccountId, oArgs.NamePortal, oArgs.RejectionTemplateId, ErrorCode.FileSizeLimitReachedException, oArgs.MaxAttachmentSizeInMegaBytes, oFileWithoutMessageId) - AddRejectedState(oMessageId, oMessage, "Erlaubte Dateigröße überschritten", "", oSQLTransaction) + _email.AddToEmailQueueMSSQL(oMessageId, oSQLTransaction, oBody, oEmailData, "FileSizeLimitReachedException", _EmailOutAccountId, oArgs.NamePortal, oArgs.RejectionTemplateId, ErrorCode.FileSizeLimitReachedException, oArgs.MaxAttachmentSizeInMegaBytes, oOrgFilename) + AddRejectedState(oMessageId, oErrorCodeString, "Erlaubte Dateigröße überschritten", "", oSQLTransaction) Catch ex As NoFerdsAlternateException