Merge branch 'master' of https://vcs.digitaldata.works/AppStd/Modules
This commit is contained in:
@@ -13,7 +13,7 @@ Imports System.Runtime.InteropServices
|
|||||||
<Assembly: AssemblyCompany("Digital Data")>
|
<Assembly: AssemblyCompany("Digital Data")>
|
||||||
<Assembly: AssemblyProduct("Modules.Interfaces")>
|
<Assembly: AssemblyProduct("Modules.Interfaces")>
|
||||||
<Assembly: AssemblyCopyright("Copyright © 2026")>
|
<Assembly: AssemblyCopyright("Copyright © 2026")>
|
||||||
<Assembly: AssemblyTrademark("2.4.6.0")>
|
<Assembly: AssemblyTrademark("2.5.0.0")>
|
||||||
|
|
||||||
<Assembly: ComVisible(False)>
|
<Assembly: ComVisible(False)>
|
||||||
|
|
||||||
@@ -31,5 +31,5 @@ Imports System.Runtime.InteropServices
|
|||||||
' übernehmen, indem Sie "*" eingeben:
|
' übernehmen, indem Sie "*" eingeben:
|
||||||
' <Assembly: AssemblyVersion("1.0.*")>
|
' <Assembly: AssemblyVersion("1.0.*")>
|
||||||
|
|
||||||
<Assembly: AssemblyVersion("2.4.6.0")>
|
<Assembly: AssemblyVersion("2.5.0.0")>
|
||||||
<Assembly: AssemblyFileVersion("2.4.6.0")>
|
<Assembly: AssemblyFileVersion("2.5.0.0")>
|
||||||
|
|||||||
@@ -209,10 +209,9 @@ Public Class ZUGFeRDInterface
|
|||||||
Catch ex As Exception
|
Catch ex As Exception
|
||||||
_logger.Error(ex)
|
_logger.Error(ex)
|
||||||
End Try
|
End Try
|
||||||
Else
|
|
||||||
Return Nothing
|
|
||||||
End If
|
End If
|
||||||
|
|
||||||
|
Return Nothing
|
||||||
End Function
|
End Function
|
||||||
|
|
||||||
Public Function GetSerializedXMLContentFromFile(oFileInfo As FileInfo) As ZugferdResult
|
Public Function GetSerializedXMLContentFromFile(oFileInfo As FileInfo) As ZugferdResult
|
||||||
|
|||||||
@@ -3,6 +3,7 @@ Imports System.Reflection
|
|||||||
Imports System.Text.RegularExpressions
|
Imports System.Text.RegularExpressions
|
||||||
Imports System.Xml
|
Imports System.Xml
|
||||||
Imports DigitalData.Modules.Logging
|
Imports DigitalData.Modules.Logging
|
||||||
|
Imports GdPicture.Internal.MSOfficeBinary.translator.Spreadsheet.XlsFileFormat.Records
|
||||||
Imports GdPicture.Internal.MSOfficeBinary.translator.Tools
|
Imports GdPicture.Internal.MSOfficeBinary.translator.Tools
|
||||||
|
|
||||||
Public Class PropertyValues
|
Public Class PropertyValues
|
||||||
@@ -225,9 +226,15 @@ Public Class PropertyValues
|
|||||||
|
|
||||||
' This should hopefully show config errors
|
' This should hopefully show config errors
|
||||||
If TypeOf oPropertyValue Is List(Of Object) Then
|
If TypeOf oPropertyValue Is List(Of Object) Then
|
||||||
_logger.Warn("Item with specification [{0}] may be configured incorrectly", oTableColumn)
|
_logger.Warn("Item [{0}] may be configured incorrectly", oTableColumn)
|
||||||
oPropertyValue = Nothing
|
oPropertyValue = Nothing
|
||||||
End If
|
End If
|
||||||
|
|
||||||
|
If IsComplexeObject(oPropertyValue) = True Then
|
||||||
|
_logger.Debug("Item Value [{0}] is complexe. cant be used.", oTableColumn)
|
||||||
|
oPropertyValue = Nothing
|
||||||
|
End If
|
||||||
|
|
||||||
End Select
|
End Select
|
||||||
End If
|
End If
|
||||||
Catch ex As Exception
|
Catch ex As Exception
|
||||||
@@ -593,8 +600,21 @@ Public Class PropertyValues
|
|||||||
firstElement = oList.FirstOrDefault()
|
firstElement = oList.FirstOrDefault()
|
||||||
If firstElement IsNot Nothing AndAlso IsArray(firstElement) Then
|
If firstElement IsNot Nothing AndAlso IsArray(firstElement) Then
|
||||||
|
|
||||||
' Attachments sind Byte-Arrays und müssen umgewandelt werden
|
Dim oStr As String
|
||||||
Return Convert.ToBase64String(firstElement)
|
' Array behandeln -> erstes Element nehmen
|
||||||
|
If TypeOf firstElement Is String() Then
|
||||||
|
Dim arr As String() = CType(firstElement, String())
|
||||||
|
oStr = If(arr.Length > 0, arr(0), String.Empty)
|
||||||
|
Else
|
||||||
|
oStr = firstElement.ToString()
|
||||||
|
End If
|
||||||
|
|
||||||
|
If IsBase64String(oStr) Then
|
||||||
|
' Attachments sind Byte-Arrays und müssen umgewandelt werden
|
||||||
|
Return Convert.ToBase64String(firstElement)
|
||||||
|
Else
|
||||||
|
Return oStr
|
||||||
|
End If
|
||||||
|
|
||||||
Else
|
Else
|
||||||
Return DoGetFinalPropValue(oList.First())
|
Return DoGetFinalPropValue(oList.First())
|
||||||
@@ -636,4 +656,40 @@ Public Class PropertyValues
|
|||||||
Return Regex.IsMatch(Prop, _indexPattern)
|
Return Regex.IsMatch(Prop, _indexPattern)
|
||||||
End Function
|
End Function
|
||||||
|
|
||||||
|
Private Function IsComplexeObject(obj As Object) As Boolean
|
||||||
|
If obj Is Nothing Then Return False
|
||||||
|
|
||||||
|
Dim t As Type = obj.GetType()
|
||||||
|
|
||||||
|
' Einfache Typen ausschließen
|
||||||
|
If t.IsPrimitive OrElse
|
||||||
|
t.IsEnum OrElse
|
||||||
|
t Is GetType(String) OrElse
|
||||||
|
t Is GetType(Decimal) OrElse
|
||||||
|
t Is GetType(DateTime) Then
|
||||||
|
Return False
|
||||||
|
End If
|
||||||
|
|
||||||
|
' Wenn es öffentliche Properties hat, ist es "komplex"
|
||||||
|
Return t.GetProperties().Length > 0 OrElse t.IsClass
|
||||||
|
End Function
|
||||||
|
|
||||||
|
Function IsBase64String(str As String) As Boolean
|
||||||
|
If String.IsNullOrEmpty(str) Then Return False
|
||||||
|
|
||||||
|
' Base64 hat bestimmte Zeichen und meist Länge Vielfaches von 4
|
||||||
|
If str.Length Mod 4 <> 0 Then Return False
|
||||||
|
|
||||||
|
' Regex-Check für gültige Base64-Zeichen
|
||||||
|
If Not System.Text.RegularExpressions.Regex.IsMatch(str, "^[A-Za-z0-9+/]*={0,2}$") Then
|
||||||
|
Return False
|
||||||
|
End If
|
||||||
|
|
||||||
|
Try
|
||||||
|
Dim bytes As Byte() = Convert.FromBase64String(str)
|
||||||
|
Return True
|
||||||
|
Catch ex As FormatException
|
||||||
|
Return False
|
||||||
|
End Try
|
||||||
|
End Function
|
||||||
End Class
|
End Class
|
||||||
|
|||||||
@@ -13,7 +13,7 @@ Imports System.Runtime.InteropServices
|
|||||||
<Assembly: AssemblyCompany("Digital Data")>
|
<Assembly: AssemblyCompany("Digital Data")>
|
||||||
<Assembly: AssemblyProduct("Modules.Jobs")>
|
<Assembly: AssemblyProduct("Modules.Jobs")>
|
||||||
<Assembly: AssemblyCopyright("Copyright © 2026")>
|
<Assembly: AssemblyCopyright("Copyright © 2026")>
|
||||||
<Assembly: AssemblyTrademark("3.8.2.0")>
|
<Assembly: AssemblyTrademark("3.9.0.0")>
|
||||||
|
|
||||||
<Assembly: ComVisible(False)>
|
<Assembly: ComVisible(False)>
|
||||||
|
|
||||||
@@ -30,5 +30,5 @@ Imports System.Runtime.InteropServices
|
|||||||
' Sie können alle Werte angeben oder die standardmäßigen Build- und Revisionsnummern
|
' Sie können alle Werte angeben oder die standardmäßigen Build- und Revisionsnummern
|
||||||
' übernehmen, indem Sie "*" eingeben:
|
' übernehmen, indem Sie "*" eingeben:
|
||||||
|
|
||||||
<Assembly: AssemblyVersion("3.8.2.0")>
|
<Assembly: AssemblyVersion("3.9.0.0")>
|
||||||
<Assembly: AssemblyFileVersion("3.8.2.0")>
|
<Assembly: AssemblyFileVersion("3.9.0.0")>
|
||||||
|
|||||||
@@ -137,7 +137,11 @@ Namespace ZUGFeRD
|
|||||||
, '{pParameter2}'
|
, '{pParameter2}'
|
||||||
, 77"
|
, 77"
|
||||||
|
|
||||||
_mssql.ExecuteNonQuery(oExecute, pTransaction)
|
If pTransaction IsNot Nothing Then
|
||||||
|
_mssql.ExecuteNonQuery(oExecute, pTransaction)
|
||||||
|
Else
|
||||||
|
_mssql.ExecuteNonQuery(oExecute)
|
||||||
|
End If
|
||||||
|
|
||||||
Catch ex As Exception
|
Catch ex As Exception
|
||||||
_logger.Error(ex)
|
_logger.Error(ex)
|
||||||
|
|||||||
@@ -68,6 +68,7 @@ Public Class ImportZUGFeRDFiles
|
|||||||
Private ReadOnly _embeds As PDFEmbeds
|
Private ReadOnly _embeds As PDFEmbeds
|
||||||
|
|
||||||
Private SQL_xRechnung_ItemTemplate As String = ""
|
Private SQL_xRechnung_ItemTemplate As String = ""
|
||||||
|
Private SQL_ebInterface_CompleteXMLItems As String = ""
|
||||||
|
|
||||||
Private ReadOnly _gdpictureLicenseKey As String
|
Private ReadOnly _gdpictureLicenseKey As String
|
||||||
Private ReadOnly _xRechnungCreator As XRechnungViewDocument
|
Private ReadOnly _xRechnungCreator As XRechnungViewDocument
|
||||||
@@ -81,6 +82,8 @@ Public Class ImportZUGFeRDFiles
|
|||||||
|
|
||||||
Public ZugferdFileCount As Integer = 0
|
Public ZugferdFileCount As Integer = 0
|
||||||
Public MD5Checksum As String = Nothing
|
Public MD5Checksum As String = Nothing
|
||||||
|
Public XMLSpecification As String = Nothing
|
||||||
|
Public XMLSchema As String = Nothing
|
||||||
|
|
||||||
Public EmailAttachmentFiles As New List(Of FileInfo)
|
Public EmailAttachmentFiles As New List(Of FileInfo)
|
||||||
Public EmbeddedAttachmentFiles As New List(Of PDFEmbeds.EmbeddedFile)
|
Public EmbeddedAttachmentFiles As New List(Of PDFEmbeds.EmbeddedFile)
|
||||||
@@ -114,6 +117,7 @@ Public Class ImportZUGFeRDFiles
|
|||||||
Public Sub Start(Arguments As Object) Implements IJob.Start
|
Public Sub Start(Arguments As Object) Implements IJob.Start
|
||||||
Dim oArgs As WorkerArgs = Arguments
|
Dim oArgs As WorkerArgs = Arguments
|
||||||
Dim oAttachmentExtractor = New PDFEmbeds(_logConfig)
|
Dim oAttachmentExtractor = New PDFEmbeds(_logConfig)
|
||||||
|
Dim oSpecification As String = String.Empty
|
||||||
|
|
||||||
_EmailOutAccountId = oArgs.EmailOutProfileId
|
_EmailOutAccountId = oArgs.EmailOutProfileId
|
||||||
|
|
||||||
@@ -125,12 +129,16 @@ Public Class ImportZUGFeRDFiles
|
|||||||
})
|
})
|
||||||
|
|
||||||
_logger.Debug("Starting Job {0}", [GetType].Name)
|
_logger.Debug("Starting Job {0}", [GetType].Name)
|
||||||
If oArgs.AllowXRechnung Then
|
If oArgs.AllowXRechnung Or oArgs.AllowPeppolBISBill3x Or oArgs.AllowEBInterface Then
|
||||||
' TODO - Config-Schalter hat NIX mit XRechnung-Dateien u. Sichtbelegen zu tun, sondern nur mit Dateinamen zu tun.
|
|
||||||
Dim oSQL = "SELECT SQL_COMMAND FROM TBDD_SQL_COMMANDS WITH (NOLOCK) WHERE TITLE = 'VWDD_ZUGFERD_VIEW_RECEIPT_TEMPLATE_ITEMS'"
|
Dim oSQL = "SELECT SQL_COMMAND FROM TBDD_SQL_COMMANDS WITH (NOLOCK) WHERE TITLE = 'VWDD_ZUGFERD_VIEW_RECEIPT_TEMPLATE_ITEMS'"
|
||||||
SQL_xRechnung_ItemTemplate = _mssql.GetScalarValue(oSQL)
|
SQL_xRechnung_ItemTemplate = _mssql.GetScalarValue(oSQL)
|
||||||
End If
|
End If
|
||||||
|
|
||||||
|
If oArgs.AllowEBInterface Then
|
||||||
|
Dim oSQL = "SELECT SQL_COMMAND FROM TBDD_SQL_COMMANDS WITH (NOLOCK) WHERE TITLE = 'EBINTERFACE_COMPLETE_MISSING_XML_ITEMS'"
|
||||||
|
SQL_ebInterface_CompleteXMLItems = _mssql.GetScalarValue(oSQL)
|
||||||
|
End If
|
||||||
|
|
||||||
Try
|
Try
|
||||||
'For Each oPath As String In oArgs.WatchDirectory
|
'For Each oPath As String In oArgs.WatchDirectory
|
||||||
Dim oPath As String = oArgs.WatchDirectory
|
Dim oPath As String = oArgs.WatchDirectory
|
||||||
@@ -209,6 +217,7 @@ Public Class ImportZUGFeRDFiles
|
|||||||
Try
|
Try
|
||||||
|
|
||||||
For Each oFile In oEInvoiceFileGroup
|
For Each oFile In oEInvoiceFileGroup
|
||||||
|
oSpecification = String.Empty
|
||||||
oFileCounter += 1
|
oFileCounter += 1
|
||||||
Dim oResult As ProcessFileResult
|
Dim oResult As ProcessFileResult
|
||||||
|
|
||||||
@@ -222,6 +231,7 @@ Public Class ImportZUGFeRDFiles
|
|||||||
_logger.Debug("eInvoice File found")
|
_logger.Debug("eInvoice File found")
|
||||||
oMD5CheckSum = oResult.MD5Checksum
|
oMD5CheckSum = oResult.MD5Checksum
|
||||||
oZUGFeRDCount = oResult.ZugferdFileCount
|
oZUGFeRDCount = oResult.ZugferdFileCount
|
||||||
|
oSpecification = oResult.XMLSpecification
|
||||||
oEmailAttachmentFiles.AddRange(oResult.EmailAttachmentFiles)
|
oEmailAttachmentFiles.AddRange(oResult.EmailAttachmentFiles)
|
||||||
oEmbeddedAttachmentFiles.AddRange(oResult.EmbeddedAttachmentFiles)
|
oEmbeddedAttachmentFiles.AddRange(oResult.EmbeddedAttachmentFiles)
|
||||||
Else ' No zugferd found!
|
Else ' No zugferd found!
|
||||||
@@ -440,21 +450,34 @@ Public Class ImportZUGFeRDFiles
|
|||||||
If oMoveDirectory = DIRECTORY_DONT_MOVE Then
|
If oMoveDirectory = DIRECTORY_DONT_MOVE Then
|
||||||
_logger.Info("Application Error occurred. Files for message Id {0} will not be moved.", oMessageId)
|
_logger.Info("Application Error occurred. Files for message Id {0} will not be moved.", oMessageId)
|
||||||
|
|
||||||
ElseIf oArgs.AllowXRechnung And oIsSuccess And
|
ElseIf (oArgs.AllowXRechnung Or oArgs.AllowPeppolBISBill3x Or oArgs.AllowEBInterface) And oIsSuccess And
|
||||||
oEInvoiceFileGroup.Item(0).Extension.Equals(".xml", StringComparison.OrdinalIgnoreCase) = True Then
|
oEInvoiceFileGroup.Item(0).Extension.Equals(".xml", StringComparison.OrdinalIgnoreCase) = True Then
|
||||||
_logger.Debug("Before Creating the PDF-File from XML data / Before Commit")
|
_logger.Debug("Before Creating the PDF-File from XML data / Before Commit")
|
||||||
|
|
||||||
oxRechnungHandle = True
|
oxRechnungHandle = True
|
||||||
|
|
||||||
|
If oSQLTransaction IsNot Nothing Then
|
||||||
|
' Commit Transaction - muss ausgeführt werden, sonst sind keine Daten in der DB vorhanden
|
||||||
|
oSQLTransaction.Commit()
|
||||||
|
_logger.Debug("XML commit triggered")
|
||||||
|
End If
|
||||||
|
|
||||||
|
' Vor der Sichtbeleg-Erzeugung, müssen ggf Daten nachberechnet werden.
|
||||||
|
' Hier wird die Prozedur für EBINTERFACE_61 aufgerufen, falls der Beleg dieses Schema verwendet
|
||||||
|
If oArgs.AllowEBInterface AndAlso
|
||||||
|
String.Equals(oSpecification, "EBINTERFACE_61", StringComparison.InvariantCultureIgnoreCase) AndAlso
|
||||||
|
Not String.IsNullOrEmpty(SQL_ebInterface_CompleteXMLItems) Then
|
||||||
|
_logger.Debug("Before Calling ebInterface Procedure")
|
||||||
|
Dim oSQL_MsgIDReplace_1 As String = SQL_ebInterface_CompleteXMLItems.Replace("@MSG_ID", oFileGroup.Key)
|
||||||
|
Dim oSqlResult = _mssql.ExecuteNonQuery(oSQL_MsgIDReplace_1)
|
||||||
|
_logger.Debug("Result of ebInterface Procedure: [{0}]", oSqlResult)
|
||||||
|
End If
|
||||||
|
|
||||||
' Hier das neue PDF erzeugen
|
' Hier das neue PDF erzeugen
|
||||||
'but before we need to get all Data we need
|
'but before we need to get all Data we need
|
||||||
MyTemplateValues_xInvDT = Nothing
|
MyTemplateValues_xInvDT = Nothing
|
||||||
Dim oSQL_MsgIDReplace = SQL_xRechnung_ItemTemplate
|
Dim oSQL_MsgIDReplace = SQL_xRechnung_ItemTemplate
|
||||||
oSQL_MsgIDReplace = oSQL_MsgIDReplace.Replace("@MSG_ID", oFileGroup.Key)
|
oSQL_MsgIDReplace = oSQL_MsgIDReplace.Replace("@MSG_ID", oFileGroup.Key)
|
||||||
If oSQLTransaction IsNot Nothing Then
|
|
||||||
' Commit Transaction
|
|
||||||
oSQLTransaction.Commit()
|
|
||||||
_logger.Debug("XML commit triggered")
|
|
||||||
End If
|
|
||||||
MyTemplateValues_xInvDT = _mssql.GetDatatable(oSQL_MsgIDReplace)
|
MyTemplateValues_xInvDT = _mssql.GetDatatable(oSQL_MsgIDReplace)
|
||||||
|
|
||||||
If Not IsNothing(MyTemplateValues_xInvDT) Then
|
If Not IsNothing(MyTemplateValues_xInvDT) Then
|
||||||
@@ -598,6 +621,8 @@ Public Class ImportZUGFeRDFiles
|
|||||||
|
|
||||||
If oDocument IsNot Nothing Then
|
If oDocument IsNot Nothing Then
|
||||||
sqlResult = StoreXMLItemsInDatabase(pMessageId, oDocument, pFile, pConnections, pArgs, oResult)
|
sqlResult = StoreXMLItemsInDatabase(pMessageId, oDocument, pFile, pConnections, pArgs, oResult)
|
||||||
|
oResult.XMLSpecification = oDocument.Specification
|
||||||
|
oResult.XMLSchema = oDocument.UsedXMLSchema
|
||||||
End If
|
End If
|
||||||
|
|
||||||
Catch ex As Exception
|
Catch ex As Exception
|
||||||
|
|||||||
Reference in New Issue
Block a user