Jobs: Add exception for unsupported zugferd documents
This commit is contained in:
parent
a8862709d8
commit
b1aba0a80d
@ -89,10 +89,10 @@ Public Class ZUGFeRDInterface
|
|||||||
''' </summary>
|
''' </summary>
|
||||||
''' <param name="Path"></param>
|
''' <param name="Path"></param>
|
||||||
''' <exception cref="ZUGFeRDExecption"></exception>
|
''' <exception cref="ZUGFeRDExecption"></exception>
|
||||||
Public Function ExtractZUGFeRDFileWithGDPicture(Path As String) As Object
|
Public Function ExtractZUGFeRDFileWithGDPicture(Path As String) As Tuple(Of String, Object)
|
||||||
Dim oXmlDocument = ValidateZUGFeRDFileWithGDPicture(Path)
|
Dim oXmlDocument = ValidateZUGFeRDFileWithGDPicture(Path)
|
||||||
|
|
||||||
If IsNothing(oXmlDocument) Then
|
If IsNothing(oXmlDocument.Item2) Then
|
||||||
Throw New ZUGFeRDExecption(ErrorType.NoZugferd, "Datei ist keine ZUGFeRD Datei.")
|
Throw New ZUGFeRDExecption(ErrorType.NoZugferd, "Datei ist keine ZUGFeRD Datei.")
|
||||||
End If
|
End If
|
||||||
|
|
||||||
@ -104,10 +104,10 @@ Public Class ZUGFeRDInterface
|
|||||||
''' </summary>
|
''' </summary>
|
||||||
''' <param name="Stream"></param>
|
''' <param name="Stream"></param>
|
||||||
''' <exception cref="ZUGFeRDExecption"></exception>
|
''' <exception cref="ZUGFeRDExecption"></exception>
|
||||||
Public Function ExtractZUGFeRDFileWithGDPicture(Stream As Stream) As Object
|
Public Function ExtractZUGFeRDFileWithGDPicture(Stream As Stream) As Tuple(Of String, Object)
|
||||||
Dim oXmlDocument = ValidateZUGFeRDFileWithGDPicture(Stream)
|
Dim oXmlDocument = ValidateZUGFeRDFileWithGDPicture(Stream)
|
||||||
|
|
||||||
If IsNothing(oXmlDocument) Then
|
If IsNothing(oXmlDocument.Item2) Then
|
||||||
Throw New ZUGFeRDExecption(ErrorType.NoZugferd, "Datei ist keine ZUGFeRD Datei.")
|
Throw New ZUGFeRDExecption(ErrorType.NoZugferd, "Datei ist keine ZUGFeRD Datei.")
|
||||||
End If
|
End If
|
||||||
|
|
||||||
@ -120,7 +120,7 @@ Public Class ZUGFeRDInterface
|
|||||||
''' <param name="pStream"></param>
|
''' <param name="pStream"></param>
|
||||||
''' <exception cref="ZUGFeRDExecption"></exception>
|
''' <exception cref="ZUGFeRDExecption"></exception>
|
||||||
''' <returns>The embedded xml data as an XPath document</returns>
|
''' <returns>The embedded xml data as an XPath document</returns>
|
||||||
Public Function ValidateZUGFeRDFileWithGDPicture(pStream As Stream) As XPathDocument
|
Public Function ValidateZUGFeRDFileWithGDPicture(pStream As Stream) As Tuple(Of String, XPathDocument)
|
||||||
Dim oEmbedExtractor = New PDFEmbeds(_logConfig)
|
Dim oEmbedExtractor = New PDFEmbeds(_logConfig)
|
||||||
|
|
||||||
Try
|
Try
|
||||||
@ -148,7 +148,7 @@ Public Class ZUGFeRDInterface
|
|||||||
''' <param name="pPath"></param>
|
''' <param name="pPath"></param>
|
||||||
''' <exception cref="ZUGFeRDExecption"></exception>
|
''' <exception cref="ZUGFeRDExecption"></exception>
|
||||||
''' <returns>The embedded xml data as an XPath document</returns>
|
''' <returns>The embedded xml data as an XPath document</returns>
|
||||||
Public Function ValidateZUGFeRDFileWithGDPicture(pPath As String) As XPathDocument
|
Public Function ValidateZUGFeRDFileWithGDPicture(pPath As String) As Tuple(Of String, XPathDocument)
|
||||||
Dim oEmbedExtractor = New PDFEmbeds(_logConfig)
|
Dim oEmbedExtractor = New PDFEmbeds(_logConfig)
|
||||||
|
|
||||||
Try
|
Try
|
||||||
@ -170,9 +170,7 @@ Public Class ZUGFeRDInterface
|
|||||||
End Try
|
End Try
|
||||||
End Function
|
End Function
|
||||||
|
|
||||||
Private Function HandleEmbeddedFiles(pResults As List(Of PDFEmbeds.EmbeddedFile)) As XPathDocument
|
Private Function HandleEmbeddedFiles(pResults As List(Of PDFEmbeds.EmbeddedFile)) As Tuple(Of String, XPathDocument)
|
||||||
Dim oXmlDocument As XPathDocument
|
|
||||||
|
|
||||||
If pResults Is Nothing Then
|
If pResults Is Nothing Then
|
||||||
Throw New ZUGFeRDExecption(ErrorType.NoZugferd, "Datei ist keine ZUGFeRD Datei, weil die Attachments nicht gelesen werden konnten.")
|
Throw New ZUGFeRDExecption(ErrorType.NoZugferd, "Datei ist keine ZUGFeRD Datei, weil die Attachments nicht gelesen werden konnten.")
|
||||||
End If
|
End If
|
||||||
@ -183,7 +181,7 @@ Public Class ZUGFeRDInterface
|
|||||||
|
|
||||||
' Find the first file which filename matches the valid filenames for embedded invoice files
|
' Find the first file which filename matches the valid filenames for embedded invoice files
|
||||||
Dim oValidResult As PDFEmbeds.EmbeddedFile = pResults.
|
Dim oValidResult As PDFEmbeds.EmbeddedFile = pResults.
|
||||||
Where(Function(result) ValidFilenames.Contains(result.FileName.ToUpper)).
|
Where(Function(f) ValidFilenames.Contains(f.FileName.ToUpper)).
|
||||||
FirstOrDefault()
|
FirstOrDefault()
|
||||||
|
|
||||||
If oValidResult Is Nothing Then
|
If oValidResult Is Nothing Then
|
||||||
@ -193,19 +191,18 @@ Public Class ZUGFeRDInterface
|
|||||||
' Search the embedded files for the ones which are allowed as per the configuration.
|
' Search the embedded files for the ones which are allowed as per the configuration.
|
||||||
' The config might say, allow ZUGFeRD but not Factur-X.
|
' The config might say, allow ZUGFeRD but not Factur-X.
|
||||||
Dim oAllowedResult As PDFEmbeds.EmbeddedFile = pResults.
|
Dim oAllowedResult As PDFEmbeds.EmbeddedFile = pResults.
|
||||||
Where(Function(result) AllowedFilenames.Contains(result.FileName.ToUpper)).
|
Where(Function(f) AllowedFilenames.Contains(f.FileName.ToUpper)).
|
||||||
FirstOrDefault()
|
FirstOrDefault()
|
||||||
|
|
||||||
If oAllowedResult Is Nothing Then
|
If oAllowedResult Is Nothing Then
|
||||||
Throw New ZUGFeRDExecption(ErrorType.UnsupportedFormat, "Datei ist eine ZUGFeRD Datei, aber das Format wird nicht unterstützt.")
|
Throw New ZUGFeRDExecption(ErrorType.UnsupportedFormat, "Datei ist eine ZUGFeRD Datei, aber das Format wird nicht unterstützt.", oAllowedResult.FileName)
|
||||||
End If
|
End If
|
||||||
|
|
||||||
Try
|
Try
|
||||||
Using oStream As New MemoryStream(oAllowedResult.FileContents)
|
Using oStream As New MemoryStream(oAllowedResult.FileContents)
|
||||||
oXmlDocument = New XPathDocument(oStream)
|
Return New Tuple(Of String, XPathDocument)(oAllowedResult.FileName, New XPathDocument(oStream))
|
||||||
End Using
|
End Using
|
||||||
|
|
||||||
Return oXmlDocument
|
|
||||||
Catch ex As ZUGFeRDExecption
|
Catch ex As ZUGFeRDExecption
|
||||||
' Don't log ZUGFeRD Exceptions here, they should be handled by the calling code.
|
' Don't log ZUGFeRD Exceptions here, they should be handled by the calling code.
|
||||||
' It also produces misleading error messages when checking if an attachment is a zugferd file.
|
' It also produces misleading error messages when checking if an attachment is a zugferd file.
|
||||||
@ -217,9 +214,9 @@ Public Class ZUGFeRDInterface
|
|||||||
End Try
|
End Try
|
||||||
End Function
|
End Function
|
||||||
|
|
||||||
Public Function SerializeZUGFeRDDocument(pDocument As XPathDocument) As Object
|
Public Function SerializeZUGFeRDDocument(pDocument As Tuple(Of String, XPathDocument)) As Tuple(Of String, Object)
|
||||||
Try
|
Try
|
||||||
Dim oNavigator As XPathNavigator = pDocument.CreateNavigator()
|
Dim oNavigator As XPathNavigator = pDocument.Item2.CreateNavigator()
|
||||||
Dim oReader As XmlReader
|
Dim oReader As XmlReader
|
||||||
Dim oResult = Nothing
|
Dim oResult = Nothing
|
||||||
|
|
||||||
|
|||||||
@ -4,10 +4,23 @@
|
|||||||
|
|
||||||
Public ReadOnly Property ErrorType() As ZUGFeRDInterface.ErrorType
|
Public ReadOnly Property ErrorType() As ZUGFeRDInterface.ErrorType
|
||||||
|
|
||||||
|
''' <summary>
|
||||||
|
''' Contains the name of the extracted xml file if already extracted.
|
||||||
|
''' </summary>
|
||||||
|
''' <returns>A filename like zugferd-invoice.xml</returns>
|
||||||
|
Public ReadOnly Property XmlFile As String = String.Empty
|
||||||
|
|
||||||
Public Sub New(ErrorType As ZUGFeRDInterface.ErrorType, Message As String)
|
Public Sub New(ErrorType As ZUGFeRDInterface.ErrorType, Message As String)
|
||||||
MyBase.New(Message)
|
MyBase.New(Message)
|
||||||
|
|
||||||
_ErrorType = ErrorType
|
_ErrorType = ErrorType
|
||||||
End Sub
|
End Sub
|
||||||
|
|
||||||
|
Public Sub New(ErrorType As ZUGFeRDInterface.ErrorType, Message As String, pXmlFileName As String)
|
||||||
|
MyBase.New(Message)
|
||||||
|
|
||||||
|
_ErrorType = ErrorType
|
||||||
|
_XmlFile = pXmlFileName
|
||||||
|
End Sub
|
||||||
End Class
|
End Class
|
||||||
End Class
|
End Class
|
||||||
|
|||||||
@ -43,8 +43,11 @@ Public Class Exceptions
|
|||||||
Public Class UnsupportedFerdException
|
Public Class UnsupportedFerdException
|
||||||
Inherits ApplicationException
|
Inherits ApplicationException
|
||||||
|
|
||||||
Public Sub New()
|
Public ReadOnly Property XmlFile As String
|
||||||
|
|
||||||
|
Public Sub New(pXmlFile As String)
|
||||||
MyBase.New("ZUGFeRD document found but is not supported!")
|
MyBase.New("ZUGFeRD document found but is not supported!")
|
||||||
|
_XmlFile = pXmlFile
|
||||||
End Sub
|
End Sub
|
||||||
End Class
|
End Class
|
||||||
|
|
||||||
|
|||||||
@ -39,6 +39,6 @@
|
|||||||
"
|
"
|
||||||
|
|
||||||
Public Const EMAIL_UNSUPPORTED_DOCUMENT = "
|
Public Const EMAIL_UNSUPPORTED_DOCUMENT = "
|
||||||
<p>Ihre Email enthielt ein ZUGFeRD Dokument, welches aber zur Zeit noch nicht unsterstützt wird.</p>
|
<p>Ihre Email enthielt ein ZUGFeRD Dokument ({0}), welches zur Zeit noch nicht unsterstützt wird.</p>
|
||||||
"
|
"
|
||||||
End Class
|
End Class
|
||||||
|
|||||||
@ -205,7 +205,9 @@ Public Class ImportZUGFeRDFiles
|
|||||||
For Each oFile In oFileGroupFiles
|
For Each oFile In oFileGroupFiles
|
||||||
' 09.12.2021: oDocument is now an Object, because have different classes corresponding to the
|
' 09.12.2021: oDocument is now an Object, because have different classes corresponding to the
|
||||||
' different versions of ZUGFeRD and the type is unknown at compile-time.
|
' different versions of ZUGFeRD and the type is unknown at compile-time.
|
||||||
Dim oDocument As Object
|
' 17.11.2022: oDocument is now a Tuple of (String, Object), to be able to return the filename
|
||||||
|
' of the extracted xml file.
|
||||||
|
Dim oDocument As Tuple(Of String, Object)
|
||||||
|
|
||||||
' Start a global group counter for each file
|
' Start a global group counter for each file
|
||||||
Dim oGlobalGroupCounter = 0
|
Dim oGlobalGroupCounter = 0
|
||||||
@ -245,8 +247,8 @@ Public Class ImportZUGFeRDFiles
|
|||||||
Continue For
|
Continue For
|
||||||
|
|
||||||
Case ZUGFeRDInterface.ErrorType.UnsupportedFormat
|
Case ZUGFeRDInterface.ErrorType.UnsupportedFormat
|
||||||
_logger.Info("File [{0}] is an unsupported ZUFeRD document format!")
|
_logger.Info("File [{0}/{1}] is an unsupported ZUFeRD document format!", oFile.Name, ex.XmlFile)
|
||||||
Throw New UnsupportedFerdException()
|
Throw New UnsupportedFerdException(ex.XmlFile)
|
||||||
|
|
||||||
Case ZUGFeRDInterface.ErrorType.NoValidZugferd
|
Case ZUGFeRDInterface.ErrorType.NoValidZugferd
|
||||||
_logger.Warn("File [{0}] is an Incorrectly formatted ZUGFeRD document!", oFile.Name)
|
_logger.Warn("File [{0}] is an Incorrectly formatted ZUGFeRD document!", oFile.Name)
|
||||||
@ -397,7 +399,7 @@ Public Class ImportZUGFeRDFiles
|
|||||||
' That 's why we set it to String.Empty here.
|
' 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", oFBTransaction)
|
||||||
|
|
||||||
Dim oBody = EmailStrings.EMAIL_UNSUPPORTED_DOCUMENT
|
Dim oBody As String = String.Format(EmailStrings.EMAIL_UNSUPPORTED_DOCUMENT, ex.XmlFile)
|
||||||
Dim oEmailData = MoveAndRenameEmailToRejected(oArgs, oMessageId)
|
Dim oEmailData = MoveAndRenameEmailToRejected(oArgs, oMessageId)
|
||||||
_email.AddToEmailQueueMSSQL(oMessageId, oBody, oEmailData, "UnsupportedFerdException", _EmailOutAccountId, oArgs.NamePortal)
|
_email.AddToEmailQueueMSSQL(oMessageId, oBody, oEmailData, "UnsupportedFerdException", _EmailOutAccountId, oArgs.NamePortal)
|
||||||
AddRejectedState(oMessageId, "UnsupportedFerdException", "Nicht unterstütztes Datenformat", "", oSQLTransaction)
|
AddRejectedState(oMessageId, "UnsupportedFerdException", "Nicht unterstütztes Datenformat", "", oSQLTransaction)
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user