MS Jobs 2.7.0 xRechnung Sichtbeleg

This commit is contained in:
Developer01
2025-02-11 10:15:26 +01:00
parent 6515e1811b
commit 99f954d406
4 changed files with 88 additions and 38 deletions

View File

@@ -30,5 +30,5 @@ Imports System.Runtime.InteropServices
' Sie können alle Werte angeben oder die standardmäßigen Build- und Revisionsnummern
' übernehmen, indem Sie "*" eingeben:
<Assembly: AssemblyVersion("2.6.4.0")>
<Assembly: AssemblyFileVersion("2.6.4.0")>
<Assembly: AssemblyVersion("2.7.0.0")>
<Assembly: AssemblyFileVersion("2.7.0.0")>

View File

@@ -139,15 +139,6 @@ Public Class ImportZUGFeRDFiles
' This way we can rollback database changes for the whole filegroup in case something goes wrong.
Dim oSQLConnection As SqlConnection = _mssql.GetConnection()
If oArgs.AllowXRechnung Then
'but before we need to get all Data we need
MyTemplateValues_xInvDT = Nothing
Dim oSQL_MsgIDReplacec = SQL_xRechnung_ItemTemplate
oSQL_MsgIDReplacec = oSQL_MsgIDReplacec.Replace("@MSG_ID", oFileGroup.Key)
MyTemplateValues_xInvDT = _mssql.GetDatatable(oSQL_MsgIDReplacec)
End If
Dim oSQLTransaction As SqlTransaction = oSQLConnection?.BeginTransaction()
@@ -424,12 +415,25 @@ Public Class ImportZUGFeRDFiles
ElseIf oArgs.AllowXRechnung And oIsSuccess And oEInvoiceFileGroup.Item(0).Extension = ".xml" Then
oxRechnungHandle = True
' Hier das neue PDF erzeugen
'but before we need to get all Data we need
MyTemplateValues_xInvDT = Nothing
Dim oSQL_MsgIDReplace = SQL_xRechnung_ItemTemplate
oSQL_MsgIDReplace = oSQL_MsgIDReplace.Replace("@MSG_ID", oFileGroup.Key)
If oSQLTransaction IsNot Nothing Then
' Commit Transaction
oSQLTransaction.Commit()
End If
MyTemplateValues_xInvDT = _mssql.GetDatatable(oSQL_MsgIDReplace)
If Not IsNothing(MyTemplateValues_xInvDT) Then
Dim oViewReceiptFileInfo As FileInfo = _xRechnungCreator.Create_PDFfromXML(oEInvoiceFileGroup.Item(0), MyTemplateValues_xInvDT)
If Not IsNothing(oViewReceiptFileInfo) Then
oEInvoiceFileGroup.Item(0) = oViewReceiptFileInfo
oRegularMove = True
If MyTemplateValues_xInvDT.rows.count > 0 Then
Dim oViewReceiptFileInfo As FileInfo = _xRechnungCreator.Create_PDFfromXML(oEInvoiceFileGroup.Item(0), MyTemplateValues_xInvDT)
If Not IsNothing(oViewReceiptFileInfo) Then
oEInvoiceFileGroup.Item(0) = oViewReceiptFileInfo
oRegularMove = True
End If
End If
End If
Else

View File

@@ -3,5 +3,4 @@
Public Const CommentSichtbeleg_DE_Row2 = "Die Darstellung basiert auf den Inhalten der xml-Datei, welche als Anhang in diese PDF integriert wurde!"
Public Const CommentSichtbeleg_EN_Row1 = "Please note: this is a technically created image of a digital invoice."
Public Const CommentSichtbeleg_EN_Row2 = "The representation is based on the contents of the xml file, which has been integrated into this PDF as an attachment!"
Public Const Seperator_Line = "-------------------------------------------------------------------------"
End Class

View File

@@ -1,4 +1,5 @@
Imports System.Data
Imports System.Collections.Generic
Imports System.Data
Imports System.Data.SqlClient
Imports System.IO
Imports DigitalData.Modules.Base
@@ -11,7 +12,6 @@ Public Class XRechnungViewDocument
Private ReadOnly _logger As Logger
Private ReadOnly _logConfig As LogConfig
Private ReadOnly _filesystem As FilesystemEx
'Private ReadOnly _mssql As MSSQLServer
Private ReadOnly _file As ZUGFeRD.FileFunctions
Private ReadOnly _gdpictureLicenseKey As String
@@ -63,7 +63,7 @@ Public Class XRechnungViewDocument
'Create a New page
gdpicturePDF.NewPage(PdfPageSizes.PdfPageSizeA4)
'Draw content on the PDF
Dim yPosition As Integer = 20
Dim yPosition As Integer = 15
gdpicturePDF.SetTextSize(18)
gdpicturePDF.DrawText(fontResName, 10, yPosition, "xRechnung Sichtbeleg - xInvoice Visual Receipt")
yPosition += 10
@@ -88,7 +88,6 @@ Public Class XRechnungViewDocument
Dim oItemSPECNAME As String = oRow.Item("SPEC_NAME")
Dim oItemValue As String = oRow.Item("ITEM_VALUE")
Dim oDisplay As Boolean = oRow.Item("Display")
Dim oRowGUID As String = oRow.Item("GUID")
Dim oAreaSwitch As Boolean = False
_logger.Debug($"Working on SPEC_NAME: {oItemSPECNAME}")
@@ -107,7 +106,10 @@ Public Class XRechnungViewDocument
oAREACaption = "Positionen / Positions:"
oIsPosition = True
ElseIf oArea = "AMOUNT" Then
oAREACaption = "Steuern / Taxes:"
oAREACaption = "Beträge / Amounts:"
ElseIf oArea = "TAXPOS" Then
oAREACaption = "Steuerbeträge / Tax amounts:"
oIsPosition = True
ElseIf oArea = "PAYMENT" Then
oAREACaption = "Zahlungsinformationen / Payment details:"
Else
@@ -116,12 +118,13 @@ Public Class XRechnungViewDocument
If Not oAREACaption = String.Empty Then
'erste Area-Linie
yPosition += 8
yPosition += 5
gdpicturePDF.DrawLine(10, yPosition, 125, yPosition)
'gdpicturePDF.DrawText(fontResName, 10, yPosition, XRechnungStrings.Seperator_Line)
yPosition += 5
'Area caption
gdpicturePDF.DrawText(fontResNameBold, 10, yPosition, oAREACaption)
yPosition += 5
If oArea = "TYPE" Then
gdpicturePDF.DrawLine(10, yPosition, 125, yPosition)
@@ -130,28 +133,40 @@ Public Class XRechnungViewDocument
End If
End If
If oArea = "TYPE" Then
If oItemSPECNAME = "INVOICE_CURRENCY" Then
If oItemValue <> "EUR" Then
oCurrencySymbol = oItemValue
End If
If oItemSPECNAME = "INVOICE_CURRENCY" Then
If oItemValue <> "EUR" Then
oCurrencySymbol = oItemValue
End If
End If
If oArea = "POSITION" Then
ElseIf oArea = "POSITION" Then
oIsPosition = True
If oItemSPECNAME = "INVOICE_POSITION_AMOUNT" Then
oPosCount += 1
oPosTerm = $"{oPosCount}. {oItemValue} * "
oItemValue = oPosTerm
oDisplay = False
yPosition -= 5
End If
ElseIf oArea = "TAXPOS" Then
oIsPosition = True
If oItemSPECNAME = "INVOICE_TAXPOS_RATE" Then
oPosCount = 1
oPosTerm = $"{oItemValue} %:"
oItemValue = oPosTerm
oDisplay = False
yPosition -= 5
End If
End If
Else
'INDIVIDUELLES VERHALTEN BEI Folge-ITEMS
If oArea = "POSITION" Then
oIsPosition = True
'INDIVIDUELLES VERHALTEN BEI Folge-ITEMS
If oArea = "POSITION" Then
If oItemSPECNAME = "INVOICE_POSITION_AMOUNT" Then
oPosCount += 1
oPosTerm = $"{oPosCount}. {oItemValue} * "
oDisplay = False
ElseIf oItemSPECNAME = "INVOICE_POSITION_ARTICLE" Then
oPosTerm += $" {oItemValue}"
oDisplay = False
ElseIf oItemSPECNAME = "INVOICE_TAXPOS_TAX_RATE" Or oItemSPECNAME = "INVOICE_TAXPOS_RATE" Then
oPosTerm += $" - ({oItemValue} %)"
End If
@@ -159,23 +174,37 @@ Public Class XRechnungViewDocument
If oPosCount >= 9 Then
oDisplay = False
End If
ElseIf oArea = "AMOUNT" Then
If oItemSPECNAME = "INVOICE_TOTAL_NET" Or oItemSPECNAME = "INVOICE_TOTAL_TAX" Then
oItemValue += $" {oCurrencySymbol}"
End If
ElseIf oArea = "HEAD" Then
If oItemSPECNAME = "INVOICE_DATE" Or oItemSPECNAME = "INVOICE_SERVICE_DATE" Then
Dim oDateString As String = oItemValue
Dim oParsedDate As DateTime = DateTime.ParseExact(oDateString, "yyyyMMdd", System.Globalization.CultureInfo.InvariantCulture)
oItemValue = oParsedDate.ToString("dd.MM.yyyy")
End If
ElseIf oArea = "TAXPOS" Then
If oItemSPECNAME = "INVOICE_TAXPOS_RATE" Then
oPosCount += 1
oPosTerm = $"{oItemValue} %:"
oDisplay = False
ElseIf oItemSPECNAME = "INVOICE_TAXPOS_AMOUNT" Then
oPosTerm += $" {oItemValue} {oCurrencySymbol}"
oDisplay = False
ElseIf oItemSPECNAME = "INVOICE_TAXPOS_TYPE" Then
oPosTerm += $" - {oItemValue}"
End If
oItemValue = oPosTerm
End If
End If
If oDisplay = True Then
If Y_eq_lastrow = False And oAreaSwitch = False Then
yPosition += 5
End If
If oArea = "AMOUNT" Then
If oItemSPECNAME = "INVOICE_TOTAL_NET" Or oItemSPECNAME = "INVOICE_TOTAL_GROSS" Then
oItemValue += $" {oCurrencySymbol}"
End If
End If
If oRowCaption <> String.Empty Then
gdpicturePDF.DrawText(fontResName, 10, yPosition, oRowCaption)
gdpicturePDF.DrawText(fontResName, 70, yPosition, oItemValue)
@@ -188,7 +217,26 @@ Public Class XRechnungViewDocument
gdpicturePDF.DrawText(fontResName, oRow.Item("xPosition"), yPosition, oItemValue)
End If
Else
gdpicturePDF.DrawText(fontResName, 10, yPosition, oItemValue)
If oItemValue.Length > 112 Then
' Liste zur Speicherung der Teilstrings
Dim teilStrings As New List(Of String)
' Schleife, um den String in Teilstrings zu zerlegen
For i As Integer = 0 To oItemValue.Length - 1 Step 112
' Sicherstellen, dass wir nicht über die Länge des Strings hinausgehen
Dim laenge As Integer = Math.Min(112, oItemValue.Length - i)
Dim teilString As String = oItemValue.Substring(i, laenge)
teilStrings.Add(teilString)
Next
' Ausgabe der Teilstrings
For Each teilString As String In teilStrings
gdpicturePDF.DrawText(fontResName, 10, yPosition, teilString)
yPosition += 5
Next
Else
gdpicturePDF.DrawText(fontResName, 10, yPosition, oItemValue)
End If
End If
End If
End If
@@ -197,8 +245,7 @@ Public Class XRechnungViewDocument
Dim oCreated = Now.ToString
gdpicturePDF.DrawLine(10, 280, 200, 280)
'gdpicturePDF.DrawText(fontResName, 10, 285, XRechnungStrings.Seperator_Line)
Dim oCreatedString = $"Maschinell erstellt durch/Automatically created by Digital Data E-Rechnung Parser: {oCreated}"
Dim oCreatedString = $"Maschinell erstellt durch / Automatically created by Digital Data E-Rechnung Parser: {oCreated}"
gdpicturePDF.DrawText(fontResName, 10, 285, oCreatedString)
Dim oeinv_Format As PdfInvoiceDataFormat = PdfInvoiceDataFormat.ZUGFeRD_2_0
gdpicturePDF.EmbedFile(oTempFilePath, "Rechnungsdaten im ZUGFeRD-XML-Format")