Interfaces: Support ZUGFeRD 1.0 - 2.1.1

This commit is contained in:
Jonathan Jenne 2021-12-09 14:29:42 +01:00
parent 39483efe4d
commit 5aa41d2b9f
7 changed files with 11295 additions and 3187 deletions

View File

@ -109,11 +109,13 @@
<DependentUpon>Settings.settings</DependentUpon> <DependentUpon>Settings.settings</DependentUpon>
<DesignTimeSharedInput>True</DesignTimeSharedInput> <DesignTimeSharedInput>True</DesignTimeSharedInput>
</Compile> </Compile>
<Compile Include="ZUGFeRDInterface\CrossIndustryDocumentType.vb" /> <Compile Include="ZUGFeRDInterface\Version1.0\CrossIndustryDocumentType.vb" />
<Compile Include="ZUGFeRDInterface.vb" /> <Compile Include="ZUGFeRDInterface.vb" />
<Compile Include="ZUGFeRDInterface\FileGroups.vb" /> <Compile Include="ZUGFeRDInterface\FileGroups.vb" />
<Compile Include="ZUGFeRDInterface\PDFEmbeds.vb" /> <Compile Include="ZUGFeRDInterface\PDFEmbeds.vb" />
<Compile Include="ZUGFeRDInterface\PropertyValues.vb" /> <Compile Include="ZUGFeRDInterface\PropertyValues.vb" />
<Compile Include="ZUGFeRDInterface\Version2.0\CrossIndustryInvoiceType.vb" />
<Compile Include="ZUGFeRDInterface\Version2.1.1\CrossIndustryInvoiceType.vb" />
<Compile Include="ZUGFeRDInterface\XmlItemProperty.vb" /> <Compile Include="ZUGFeRDInterface\XmlItemProperty.vb" />
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>

View File

@ -11,9 +11,6 @@ Public Class ZUGFeRDInterface
Private _logConfig As LogConfig Private _logConfig As LogConfig
Private _logger As Logger Private _logger As Logger
Private Const ZUGFERD_CONVERTER_EXE = "ZUGFeRDInterface\pdf_zugferd_test.exe" 'ZUGFeRDInterface\pdf_zugferd_lib\pdf_zugferd_test.exe
Private Const ZUGFERD_CONVERTER_SUCCESS_MESSAGE = "Document contains ZUGFeRD data."
Public Enum ErrorType Public Enum ErrorType
NoValidFile NoValidFile
NoZugferd NoZugferd
@ -46,7 +43,7 @@ Public Class ZUGFeRDInterface
''' <param name="Path"></param> ''' <param name="Path"></param>
''' <exception cref="ZUGFeRDExecption"></exception> ''' <exception cref="ZUGFeRDExecption"></exception>
''' <returns></returns> ''' <returns></returns>
Public Function ExtractZUGFeRDFileWithGDPicture(Path As String) As CrossIndustryDocumentType Public Function ExtractZUGFeRDFileWithGDPicture(Path As String) As Object
Dim oXmlDocument = ValidateZUGFeRDFileWithGDPicture(Path) Dim oXmlDocument = ValidateZUGFeRDFileWithGDPicture(Path)
If IsNothing(oXmlDocument) Then If IsNothing(oXmlDocument) Then
@ -62,7 +59,7 @@ Public Class ZUGFeRDInterface
''' <param name="Stream"></param> ''' <param name="Stream"></param>
''' <exception cref="ZUGFeRDExecption"></exception> ''' <exception cref="ZUGFeRDExecption"></exception>
''' <returns></returns> ''' <returns></returns>
Public Function ExtractZUGFeRDFileWithGDPicture(Stream As Stream) As CrossIndustryDocumentType Public Function ExtractZUGFeRDFileWithGDPicture(Stream As Stream) As Object
Dim oXmlDocument = ValidateZUGFeRDFileWithGDPicture(Stream) Dim oXmlDocument = ValidateZUGFeRDFileWithGDPicture(Stream)
If IsNothing(oXmlDocument) Then If IsNothing(oXmlDocument) Then
@ -164,16 +161,45 @@ Public Class ZUGFeRDInterface
End Try End Try
End Function End Function
Public Function SerializeZUGFeRDDocument(Document As XPathDocument) As CrossIndustryDocumentType Public Function SerializeZUGFeRDDocument(Document As XPathDocument) As Object
Try Try
Dim oNavigator As XPathNavigator = Document.CreateNavigator() Dim oNavigator As XPathNavigator = Document.CreateNavigator()
Dim oReader = oNavigator.ReadSubtree() Dim oReader As XmlReader
Dim oSerializer As New XmlSerializer(GetType(CrossIndustryDocumentType)) Dim oResult = Nothing
Dim oTypes As New List(Of Type) From {
GetType(ZUGFeRD.Version1_0.CrossIndustryDocumentType),
GetType(ZUGFeRD.Version2_0.CrossIndustryInvoiceType),
GetType(ZUGFeRD.Version2_1_1.CrossIndustryInvoiceType)
}
For Each oType In oTypes
_logger.Debug("Trying Type [{0}]", oType.FullName)
Dim oSerializer As New XmlSerializer(oType)
Try
oReader = oNavigator.ReadSubtree()
oResult = oSerializer.Deserialize(oReader)
_logger.Debug("Serializing with type [{0}] succeeded", oType.FullName)
Exit For
Catch ex As Exception
_logger.Debug("Serializing with type [{0}] failed", oType.FullName)
_logger.Debug(ex.Message)
_logger.Error(ex.InnerException?.Message)
End Try
Next
If oResult Is Nothing Then
Throw New ApplicationException("No Types matched the given document. Document could not be serialized.")
End If
Return oResult
Return oSerializer.Deserialize(oReader)
Catch ex As Exception Catch ex As Exception
_logger.Error(ex) _logger.Error(ex)
Throw New ZUGFeRDExecption(ErrorType.NoValidZugferd, "Datei ist eine ungültige ZUGFeRD Datei.") Throw New ZUGFeRDExecption(ErrorType.NoValidZugferd, "Datei ist eine ungültige ZUGFeRD Datei.")
End Try End Try
End Function End Function
End Class End Class

View File

@ -31,7 +31,7 @@ Public Class PropertyValues
Public Value As String Public Value As String
End Class End Class
Public Function CheckPropertyValues(Document As CrossIndustryDocumentType, PropertyMap As Dictionary(Of String, XmlItemProperty), MessageId As String) As CheckPropertyValuesResult Public Function CheckPropertyValues(Document As Object, PropertyMap As Dictionary(Of String, XmlItemProperty), MessageId As String) As CheckPropertyValuesResult
Dim oGlobalGroupCounter = 0 Dim oGlobalGroupCounter = 0
Dim oMissingProperties As New List(Of String) Dim oMissingProperties As New List(Of String)
Dim oResult As New CheckPropertyValuesResult() Dim oResult As New CheckPropertyValuesResult()

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff