Erstattunsgsvhreiben, Kundenblatt, Seriendruck, ustva, uta
This commit is contained in:
@@ -5,6 +5,7 @@ Imports Microsoft.Office.Interop
|
||||
Imports VERAG_PROG_ALLGEMEIN
|
||||
Imports s2industries.ZUGFeRD
|
||||
Imports System.IO
|
||||
Imports VERAG_PROG_ALLGEMEIN.TESTJSON
|
||||
|
||||
|
||||
Public Class cFakturierung
|
||||
@@ -1539,10 +1540,10 @@ Public Class cFakturierung
|
||||
Dim Paramslist As New cParameterList(VERAG_PROG_ALLGEMEIN.cAllgemein.PROGID)
|
||||
Dim enableZugpferd = Paramslist.GET_PARAMETER_VALUE_BOOL("ZUGFeRD")
|
||||
If enableZugpferd Then
|
||||
tmpPath = VERAG_PROG_ALLGEMEIN.DATENVERVER_OPTIONS.addAttachementToPDF(tmpPath, createZUGFeRD(RECHNUNG))
|
||||
tmpPath = VERAG_PROG_ALLGEMEIN.DATENVERVER_OPTIONS.addAttachementToPDF(tmpPath, createZUGFeRD(True, RECHNUNG))
|
||||
Else
|
||||
|
||||
Dim Zugferdpath = createZUGFeRD(RECHNUNG)
|
||||
Dim Zugferdpath = createZUGFeRD(True, RECHNUNG)
|
||||
Dim fileInfo_ZP As New FileInfo(Zugferdpath)
|
||||
Dim ZUGF_DS As New VERAG_PROG_ALLGEMEIN.cDATENSERVER("DOKUMENTE", "ZUGFERD", Now().Year, "", "", fileInfo_ZP.Name, -1, False)
|
||||
ZUGF_DS.uploadDataToDATENSERVER(Zugferdpath, fileInfo_ZP.Name, fileInfo_ZP.Extension,,,, True)
|
||||
@@ -1736,69 +1737,75 @@ Public Class cFakturierung
|
||||
Return False
|
||||
End Function
|
||||
|
||||
Shared Function createZUGFeRD(RECHNUNG As VERAG_PROG_ALLGEMEIN.cRechnungsausgang) As String
|
||||
Shared Function createZUGFeRD(einzelrechnung As Boolean, Optional RECHNUNG As VERAG_PROG_ALLGEMEIN.cRechnungsausgang = Nothing, Optional SR_DT As DataTable = Nothing, Optional rpt As rptSammelRechnungDruck = Nothing) As String
|
||||
|
||||
Dim ZZTage = 10
|
||||
Dim vatSeller As ElectronicAddressSchemeIdentifiers
|
||||
Dim vatBuyer As ElectronicAddressSchemeIdentifiers
|
||||
|
||||
If RECHNUNG.RechnungsKundenNr > 0 Then
|
||||
If einzelrechnung AndAlso RECHNUNG IsNot Nothing Then
|
||||
|
||||
Dim RECHNUNG_AD As New VERAG_PROG_ALLGEMEIN.cAdressen(RECHNUNG.RechnungsKundenNr)
|
||||
Dim RECHNUNG_KD As New VERAG_PROG_ALLGEMEIN.cKunde(RECHNUNG.RechnungsKundenNr)
|
||||
'---------------------------------------------------------------------------------
|
||||
'--------------------------------EINZELRECHNUNG-----------------------------------
|
||||
'---------------------------------------------------------------------------------
|
||||
|
||||
If RECHNUNG_KD.Zahlungsziel IsNot Nothing AndAlso IsNumeric(RECHNUNG_KD.Zahlungsziel) Then
|
||||
ZZTage = RECHNUNG_KD.Zahlungsziel
|
||||
End If
|
||||
End If
|
||||
If RECHNUNG.RechnungsKundenNr > 0 Then
|
||||
|
||||
Dim zahlungszieldatum As Date = CDate(RECHNUNG.RechnungsDatum).AddDays(ZZTage)
|
||||
Dim FIRMA As New VERAG_PROG_ALLGEMEIN.cFirmen(RECHNUNG.Firma_ID)
|
||||
Dim desc As InvoiceDescriptor = InvoiceDescriptor.CreateInvoice(RECHNUNG.RechnungsNr, RECHNUNG.RechnungsDatum, IIf(FIRMA.Firma_ID = 26, CurrencyCodes.GBP, CurrencyCodes.EUR))
|
||||
Dim RECHNUNG_AD As New VERAG_PROG_ALLGEMEIN.cAdressen(RECHNUNG.RechnungsKundenNr)
|
||||
Dim RECHNUNG_KD As New VERAG_PROG_ALLGEMEIN.cKunde(RECHNUNG.RechnungsKundenNr)
|
||||
|
||||
Select Case RECHNUNG.BelegartenKz
|
||||
Case "AR"
|
||||
desc.Name = "SPEDITIONSRECHNUNG"
|
||||
desc.Type = InvoiceType.ForwardersInvoice
|
||||
Case "AG"
|
||||
desc.Name = "GUTSCHRIFT"
|
||||
desc.Type = InvoiceType.CreditNote
|
||||
End Select
|
||||
|
||||
If RECHNUNG.Besonderheiten IsNot Nothing Then desc.AddNote(RECHNUNG.Besonderheiten.ToString, SubjectCodes.AAI)
|
||||
If RECHNUNG.Text IsNot Nothing Then desc.AddNote(RECHNUNG.Text.ToString, SubjectCodes.AAI)
|
||||
desc.AddNote("Es bestehen Rabatt- und Bonusvereinbarungen.", SubjectCodes.AAK)
|
||||
|
||||
desc.SetBuyer(RECHNUNG.RechnungsName_1, RECHNUNG.RechnungsOrt, RECHNUNG.RechnungsOrt, RECHNUNG.RechnungsStraße, GetCountryCodeFromLandKZ(RECHNUNG.RechnungsLandKz, vatBuyer), IIf(Not IsDBNull(RECHNUNG.KundenNrZentrale), RECHNUNG.KundenNrZentrale, ""))
|
||||
|
||||
desc.SetSeller(FIRMA.Firma_Bez, FIRMA.Firma_Ort, FIRMA.Firma_Ort, FIRMA.Firma_Straße, GetCountryCodeFromLandKZ(FIRMA.Firma_LandKz, vatSeller))
|
||||
desc.AddSellerTaxRegistration(FIRMA.Firma_UID.ToString.Replace("UID: ", ""), TaxRegistrationSchemeID.VA)
|
||||
|
||||
' Optionally, to support Peppol-----------------------------
|
||||
|
||||
|
||||
If Not IsDBNull(RECHNUNG.RechnungsUstIdNr) AndAlso RECHNUNG.RechnungsUstIdNr IsNot Nothing AndAlso Not IsDBNull(RECHNUNG.RechnungsUstIdKz) AndAlso RECHNUNG.RechnungsUstIdKz IsNot Nothing Then
|
||||
desc.AddBuyerTaxRegistration(RECHNUNG.RechnungsUstIdKz & RECHNUNG.RechnungsUstIdNr, TaxRegistrationSchemeID.VA)
|
||||
If vatBuyer Then
|
||||
desc.SetBuyerElectronicAddress(RECHNUNG.RechnungsUstIdKz & RECHNUNG.RechnungsUstIdNr, vatBuyer)
|
||||
desc.SetSellerElectronicAddress(FIRMA.Firma_UID.ToString.Replace("UID: ", ""), vatSeller)
|
||||
If RECHNUNG_KD.Zahlungsziel IsNot Nothing AndAlso IsNumeric(RECHNUNG_KD.Zahlungsziel) Then
|
||||
ZZTage = RECHNUNG_KD.Zahlungsziel
|
||||
End If
|
||||
End If
|
||||
|
||||
End If
|
||||
'-----------------------------
|
||||
Dim zahlungszieldatum As Date = CDate(RECHNUNG.RechnungsDatum).AddDays(ZZTage)
|
||||
Dim FIRMA As New VERAG_PROG_ALLGEMEIN.cFirmen(RECHNUNG.Firma_ID)
|
||||
Dim desc As InvoiceDescriptor = InvoiceDescriptor.CreateInvoice(RECHNUNG.RechnungsNr, RECHNUNG.RechnungsDatum, IIf(FIRMA.Firma_ID = 26, CurrencyCodes.GBP, CurrencyCodes.EUR))
|
||||
|
||||
Select Case RECHNUNG.BelegartenKz
|
||||
Case "AR"
|
||||
desc.Name = "SPEDITIONSRECHNUNG"
|
||||
desc.Type = InvoiceType.ForwardersInvoice
|
||||
Case "AG"
|
||||
desc.Name = "GUTSCHRIFT"
|
||||
desc.Type = InvoiceType.CreditNote
|
||||
End Select
|
||||
|
||||
If RECHNUNG.Besonderheiten IsNot Nothing Then desc.AddNote(RECHNUNG.Besonderheiten.ToString, SubjectCodes.AAI)
|
||||
If RECHNUNG.Text IsNot Nothing Then desc.AddNote(RECHNUNG.Text.ToString, SubjectCodes.AAI)
|
||||
desc.AddNote("Es bestehen Rabatt- und Bonusvereinbarungen.", SubjectCodes.AAK)
|
||||
|
||||
desc.SetBuyer(RECHNUNG.RechnungsName_1, RECHNUNG.RechnungsOrt, RECHNUNG.RechnungsOrt, RECHNUNG.RechnungsStraße, GetCountryCodeFromLandKZ(RECHNUNG.RechnungsLandKz, vatBuyer), IIf(Not IsDBNull(RECHNUNG.KundenNrZentrale), RECHNUNG.KundenNrZentrale, ""))
|
||||
|
||||
desc.SetSeller(FIRMA.Firma_Bez, FIRMA.Firma_Ort, FIRMA.Firma_Ort, FIRMA.Firma_Straße, GetCountryCodeFromLandKZ(FIRMA.Firma_LandKz, vatSeller))
|
||||
desc.AddSellerTaxRegistration(FIRMA.Firma_UID.ToString.Replace("UID: ", ""), TaxRegistrationSchemeID.VA)
|
||||
|
||||
' Optionally, to support Peppol-----------------------------
|
||||
|
||||
|
||||
Dim steuerProzent As Double = SQL.DLookup(" isnull([Steuersatz %],0)", "[Steuertabelle] ", "[Steuerschlüssel]='" & checkNull(RECHNUNG.Steuerschlüssel) & "'", "FMZOLL", 0)
|
||||
Dim steuerProzenFaktor As Double = 0
|
||||
If steuerProzent > 0 AndAlso steuerProzent < 1 Then
|
||||
steuerProzenFaktor = steuerProzent * 100
|
||||
End If
|
||||
If Not IsDBNull(RECHNUNG.RechnungsUstIdNr) AndAlso RECHNUNG.RechnungsUstIdNr IsNot Nothing AndAlso Not IsDBNull(RECHNUNG.RechnungsUstIdKz) AndAlso RECHNUNG.RechnungsUstIdKz IsNot Nothing Then
|
||||
desc.AddBuyerTaxRegistration(RECHNUNG.RechnungsUstIdKz & RECHNUNG.RechnungsUstIdNr, TaxRegistrationSchemeID.VA)
|
||||
If vatBuyer Then
|
||||
desc.SetBuyerElectronicAddress(RECHNUNG.RechnungsUstIdKz & RECHNUNG.RechnungsUstIdNr, vatBuyer)
|
||||
desc.SetSellerElectronicAddress(FIRMA.Firma_UID.ToString.Replace("UID: ", ""), vatSeller)
|
||||
End If
|
||||
|
||||
End If
|
||||
'-----------------------------
|
||||
|
||||
|
||||
Dim sumNetto As Double = 0
|
||||
For Each p In RECHNUNG.POSITIONEN
|
||||
Dim steuerProzent As Double = SQL.DLookup(" isnull([Steuersatz %],0)", "[Steuertabelle] ", "[Steuerschlüssel]='" & checkNull(RECHNUNG.Steuerschlüssel) & "'", "FMZOLL", 0)
|
||||
Dim steuerProzenFaktor As Double = 0
|
||||
If steuerProzent > 0 AndAlso steuerProzent < 1 Then
|
||||
steuerProzenFaktor = steuerProzent * 100
|
||||
End If
|
||||
|
||||
Dim tradeLineItemNew As TradeLineItem = desc.AddTradeLineItem(
|
||||
|
||||
Dim sumNetto As Double = 0
|
||||
For Each p In RECHNUNG.POSITIONEN
|
||||
|
||||
Dim tradeLineItemNew As TradeLineItem = desc.AddTradeLineItem(
|
||||
name:=p.LeistungsBez,
|
||||
billedQuantity:=Convert.ToDecimal(p.Anzahl),
|
||||
unitCode:=QuantityCodes.C62, ' immer in Stück
|
||||
@@ -1808,24 +1815,24 @@ Public Class cFakturierung
|
||||
taxPercent:=IIf(p.Steuerpflichtig, Convert.ToDecimal(RECHNUNG.Steuersatz_Proz * 100), 0),
|
||||
taxType:=IIf(p.Steuerpflichtig, TaxTypes.VAT, TaxTypes.VAT)
|
||||
)
|
||||
Dim netUnitPrice = Convert.ToDecimal(p.Preis)
|
||||
Dim netUnitPrice = Convert.ToDecimal(p.Preis)
|
||||
Dim grossUnitPrice = IIf(p.Steuerpflichtig, Convert.ToDecimal(p.Preis * (1 + RECHNUNG.Steuersatz_Proz)), Convert.ToDecimal(p.Preis))
|
||||
Dim netPricePos = netUnitPrice * Convert.ToDecimal(p.Anzahl)
|
||||
sumNetto += netPricePos
|
||||
Next
|
||||
sumNetto += netPricePos
|
||||
Next
|
||||
|
||||
'Summe aller Rechnungspositions-Nettobeträge der Rechnung
|
||||
Dim lineTotalAmont = sumNetto
|
||||
'Der Gesamtbetrag der Umsatzsteuer für die Rechnung,
|
||||
Dim taxTotalAmount = IIf(RECHNUNG.SteuerpflichtigerGesamtbetrag <> 0, Math.Round(Convert.ToDecimal(RECHNUNG.SteuerpflichtigerGesamtbetrag) / (100 + steuerProzenFaktor) * steuerProzenFaktor, 2), 0)
|
||||
' Die Gesamtsumme der Rechnung ohne Umsatzsteuer ' RECHNUNG.SteuerfreierGesamtbetrag + RECHNUNG.SteuerpflichtigerGesamtbetrag + 0 - 0
|
||||
Dim taxBasisAmount = Convert.ToDecimal(RECHNUNG.SteuerfreierGesamtbetrag + RECHNUNG.SteuerpflichtigerGesamtbetrag + 0 - 0 - taxTotalAmount)
|
||||
'Der Gesamtbetrag der Rechnung mit Umsatzsteuer
|
||||
Dim grandTotalAmount = Convert.ToDecimal(RECHNUNG.SteuerfreierGesamtbetrag + RECHNUNG.SteuerpflichtigerGesamtbetrag)
|
||||
'Der ausstehende Betrag, um dessen Zahlung gebeten wird. Dieser Betrag ist der Rechnungsgesamtbetrag einschließlich Umsatzsteuer abzüglich des im Voraus gezahlten Betrages.Im Falle einer vollständig beglichenen Rechnung ist dieser Betrag gleich null. Der Betrag kann negativ sein; In diesem Fall schuldet der Verkäufer dem Käufer den Betrag
|
||||
Dim duePayableAmount = Convert.ToDecimal(RECHNUNG.SteuerfreierGesamtbetrag + RECHNUNG.SteuerpflichtigerGesamtbetrag)
|
||||
'Summe aller Rechnungspositions-Nettobeträge der Rechnung
|
||||
Dim lineTotalAmont = sumNetto
|
||||
'Der Gesamtbetrag der Umsatzsteuer für die Rechnung,
|
||||
Dim taxTotalAmount = IIf(RECHNUNG.SteuerpflichtigerGesamtbetrag <> 0, Math.Round(Convert.ToDecimal(RECHNUNG.SteuerpflichtigerGesamtbetrag) / (100 + steuerProzenFaktor) * steuerProzenFaktor, 2), 0)
|
||||
' Die Gesamtsumme der Rechnung ohne Umsatzsteuer ' RECHNUNG.SteuerfreierGesamtbetrag + RECHNUNG.SteuerpflichtigerGesamtbetrag + 0 - 0
|
||||
Dim taxBasisAmount = Convert.ToDecimal(RECHNUNG.SteuerfreierGesamtbetrag + RECHNUNG.SteuerpflichtigerGesamtbetrag + 0 - 0 - taxTotalAmount)
|
||||
'Der Gesamtbetrag der Rechnung mit Umsatzsteuer
|
||||
Dim grandTotalAmount = Convert.ToDecimal(RECHNUNG.SteuerfreierGesamtbetrag + RECHNUNG.SteuerpflichtigerGesamtbetrag)
|
||||
'Der ausstehende Betrag, um dessen Zahlung gebeten wird. Dieser Betrag ist der Rechnungsgesamtbetrag einschließlich Umsatzsteuer abzüglich des im Voraus gezahlten Betrages.Im Falle einer vollständig beglichenen Rechnung ist dieser Betrag gleich null. Der Betrag kann negativ sein; In diesem Fall schuldet der Verkäufer dem Käufer den Betrag
|
||||
Dim duePayableAmount = Convert.ToDecimal(RECHNUNG.SteuerfreierGesamtbetrag + RECHNUNG.SteuerpflichtigerGesamtbetrag)
|
||||
|
||||
desc.SetTotals(
|
||||
desc.SetTotals(
|
||||
lineTotalAmount:=Convert.ToDecimal(lineTotalAmont),
|
||||
chargeTotalAmount:=0, 'Summe aller in der Rechnung enthaltenen Zuschläge der Dokumentenebene
|
||||
allowanceTotalAmount:=0, 'Summe aller in der Rechnung enthaltenen Abschläge der Dokumenteneben
|
||||
@@ -1838,27 +1845,278 @@ Public Class cFakturierung
|
||||
)
|
||||
|
||||
|
||||
desc.AddTradePaymentTerms(RECHNUNG.TextZZ, zahlungszieldatum)
|
||||
desc.AddTradePaymentTerms(RECHNUNG.TextZZ, zahlungszieldatum)
|
||||
|
||||
Dim isReverseCharge = isReverseChargeSumme(FIRMA, RECHNUNG)
|
||||
Dim isReverseCharge = isReverseChargeSumme(FIRMA, RECHNUNG)
|
||||
|
||||
If RECHNUNG.SteuerfreierGesamtbetrag > 0 Then
|
||||
desc.AddApplicableTradeTax(Convert.ToDecimal(RECHNUNG.SteuerfreierGesamtbetrag), 0, TaxTypes.VAT, TaxCategoryCodes.Z)
|
||||
End If
|
||||
If RECHNUNG.SteuerfreierGesamtbetrag > 0 Then
|
||||
desc.AddApplicableTradeTax(Convert.ToDecimal(RECHNUNG.SteuerfreierGesamtbetrag), 0, TaxTypes.VAT, TaxCategoryCodes.Z)
|
||||
End If
|
||||
|
||||
If RECHNUNG.SteuerpflichtigerGesamtbetrag > 0 Then
|
||||
desc.AddApplicableTradeTax(Convert.ToDecimal(taxBasisAmount - RECHNUNG.SteuerfreierGesamtbetrag), Convert.ToDecimal(steuerProzenFaktor), Convert.ToDecimal(taxTotalAmount), TaxTypes.VAT, IIf(isReverseCharge, TaxCategoryCodes.AE, TaxCategoryCodes.S))
|
||||
End If
|
||||
|
||||
|
||||
Dim tmpPathZugpferd = VERAG_PROG_ALLGEMEIN.DATENVERVER_OPTIONS.getTMPPath("ZUGFeRD_Invoice_" & RECHNUNG.RechnungsNr, ".xml", True, False)
|
||||
Dim stream As FileStream = New FileStream(tmpPathZugpferd, FileMode.Create, FileAccess.Write)
|
||||
desc.Save(stream, ZUGFeRDVersion.Version20, Profile.Comfort)
|
||||
|
||||
stream.Flush()
|
||||
stream.Close()
|
||||
Return tmpPathZugpferd
|
||||
|
||||
ElseIf Not einzelrechnung AndAlso SR_DT IsNot Nothing Then
|
||||
|
||||
'---------------------------------------------------------------------------------
|
||||
'--------------------------------SAMMELRECHNUNG-----------------------------------
|
||||
'---------------------------------------------------------------------------------
|
||||
|
||||
Dim ROW As DataRow = SR_DT.Rows(0)
|
||||
Dim FIRMA As New VERAG_PROG_ALLGEMEIN.cFirmen(ROW("Firma_ID"))
|
||||
|
||||
Dim RECHNUNG_AD As New VERAG_PROG_ALLGEMEIN.cAdressen(ROW("RechnungsKundenNr"))
|
||||
Dim RECHNUNG_KD As New VERAG_PROG_ALLGEMEIN.cKunde(ROW("RechnungsKundenNr"))
|
||||
|
||||
If RECHNUNG_KD.Zahlungsziel IsNot Nothing AndAlso IsNumeric(RECHNUNG_KD.Zahlungsziel) Then
|
||||
ZZTage = RECHNUNG_KD.Zahlungsziel
|
||||
End If
|
||||
|
||||
Dim Gesamt_RG_BetragSteuerfrei As Double = CDbl(SR_DT.Compute("SUM(SteuerFreierBetrag)", ""))
|
||||
|
||||
Dim Gesamt_RG_BetragSteuerpflichtig As Double = CDbl(SR_DT.Compute("SUM(SteuerpflichtigerBetrag)", ""))
|
||||
|
||||
Dim Gesamt_RG_Betrag As Double = Gesamt_RG_BetragSteuerfrei + Gesamt_RG_BetragSteuerpflichtig
|
||||
|
||||
Dim BelegartenKz = If(Gesamt_RG_Betrag < 0, "AG", "AR")
|
||||
|
||||
Dim RechnungsNr = If(ROW("RechnungsNr") IsNot DBNull.Value, addYeartoRgNr(FIRMA.Firma_ID, ROW("Buchungsjahr")) & ROW("RechnungsNr"), "Vorschau")
|
||||
Dim RechnungsDatum = If(ROW("RechnungsDatum") IsNot DBNull.Value, ROW("RechnungsDatum"), "Vorschau")
|
||||
Dim zahlungszieldatum As Date = CDate(RechnungsDatum).AddDays(ZZTage)
|
||||
Dim desc As InvoiceDescriptor = InvoiceDescriptor.CreateInvoice(RechnungsNr, RechnungsDatum, IIf(FIRMA.Firma_ID = 26, CurrencyCodes.GBP, CurrencyCodes.EUR))
|
||||
|
||||
Select Case BelegartenKz
|
||||
Case "AR"
|
||||
desc.Name = "SPEDITIONSRECHNUNG"
|
||||
desc.Type = InvoiceType.ForwardersInvoice
|
||||
Case "AG"
|
||||
desc.Name = "GUTSCHRIFT"
|
||||
desc.Type = InvoiceType.CreditNote
|
||||
End Select
|
||||
|
||||
|
||||
Dim Rechnugnsname2 As String = ""
|
||||
If ROW("RechnungsName 2") IsNot DBNull.Value AndAlso ROW("RechnungsName 2") <> "" Then
|
||||
Rechnugnsname2 = ROW("RechnungsName 2")
|
||||
End If
|
||||
|
||||
Dim RechnungsName_AdressZusatz As String = ""
|
||||
If ROW("RechnungsName_AdressZusatz") IsNot DBNull.Value AndAlso ROW("RechnungsName_AdressZusatz") <> "" Then
|
||||
RechnungsName_AdressZusatz = ROW("RechnungsName_AdressZusatz")
|
||||
End If
|
||||
|
||||
Dim RechnungsStraße As String = ""
|
||||
If ROW("RechnungsStraße") IsNot DBNull.Value AndAlso ROW("RechnungsStraße") <> "" Then
|
||||
RechnungsStraße = ROW("RechnungsStraße")
|
||||
End If
|
||||
|
||||
Dim RechnungsOrt As String = ""
|
||||
If ROW("RechnungsOrt") IsNot DBNull.Value AndAlso ROW("RechnungsOrt") <> "" Then
|
||||
RechnungsOrt = ROW("RechnungsOrt")
|
||||
End If
|
||||
|
||||
Dim RechnungsLandKz As String = ""
|
||||
If ROW("RechnungsLandKz") IsNot DBNull.Value AndAlso ROW("RechnungsLandKz") <> "" Then
|
||||
RechnungsLandKz = cProgramFunctions.getLandBez_fromISO1Land(ROW("RechnungsLandKz"), "", ROW("RechnungSprache")).ToString.ToUpper
|
||||
End If
|
||||
|
||||
|
||||
Dim RE_UID As String = If(ROW("RechnungsUstIdKz") IsNot DBNull.Value, ROW("RechnungsUstIdKz"), "") & If(ROW("RechnungsUstIdNr") IsNot DBNull.Value, ROW("RechnungsUstIdNr"), "")
|
||||
|
||||
|
||||
'If RECHNUNG.Besonderheiten IsNot Nothing Then
|
||||
' desc.AddNote(RECHNUNG.Besonderheiten.ToString, SubjectCodes.AAI)
|
||||
'End If
|
||||
If rpt.txtVermerk.Text IsNot Nothing AndAlso rpt.txtVermerk.Text <> "" Then desc.AddNote(rpt.txtVermerk.Text.ToString, SubjectCodes.AAI)
|
||||
|
||||
desc.AddNote("Es bestehen Rabatt- und Bonusvereinbarungen.", SubjectCodes.AAK)
|
||||
|
||||
desc.SetBuyer(ROW("RechnungsName 1") & " " & Rechnugnsname2, RechnungsOrt, RechnungsOrt, RechnungsStraße, GetCountryCodeFromLandKZ(RechnungsLandKz, vatBuyer), IIf(Not IsDBNull(ROW("RechnungsKundenNr")), ROW("RechnungsKundenNr"), ""))
|
||||
|
||||
desc.SetSeller(FIRMA.Firma_Bez, FIRMA.Firma_Ort, FIRMA.Firma_Ort, FIRMA.Firma_Straße, GetCountryCodeFromLandKZ(FIRMA.Firma_LandKz, vatSeller))
|
||||
desc.AddSellerTaxRegistration(FIRMA.Firma_UID.ToString.Replace("UID: ", ""), TaxRegistrationSchemeID.VA)
|
||||
|
||||
' Optionally, to support Peppol-----------------------------
|
||||
|
||||
|
||||
If RE_UID <> "" Then
|
||||
desc.AddBuyerTaxRegistration(RE_UID, TaxRegistrationSchemeID.VA)
|
||||
If vatBuyer Then
|
||||
desc.SetBuyerElectronicAddress(RE_UID, vatBuyer)
|
||||
desc.SetSellerElectronicAddress(FIRMA.Firma_UID.ToString.Replace("UID: ", ""), vatSeller)
|
||||
End If
|
||||
|
||||
End If
|
||||
|
||||
|
||||
Dim steuerProzent As Double = SQL.DLookup(" isnull([Steuersatz %],0)", "[Steuertabelle] ", "[Steuerschlüssel]='" & ROW("Steuerschlüssel") & "'", "FMZOLL", 0)
|
||||
Dim steuerProzenFaktor As Double = 0
|
||||
If steuerProzent > 0 AndAlso steuerProzent < 1 Then
|
||||
steuerProzenFaktor = steuerProzent * 100
|
||||
End If
|
||||
|
||||
Dim sumNetto As Double = 0
|
||||
|
||||
|
||||
'---------------------------------------------------------------------------------
|
||||
'--------------------------------TODO---------------------------------------------
|
||||
'---------------------------------------------------------------------------------
|
||||
|
||||
'AddHandler rpt.Detail.Format, Sub()
|
||||
' ' rpt.lblVon.Text = CDate(rpt.Fields.Item("von").Value).ToShortDateString
|
||||
' ' rpt.lblLKWNr.Text = CDate(rpt.Fields.Item("bis").Value).ToShortDateString
|
||||
|
||||
' rpt.lblLeistungNr.Text = checkNull(rpt.Fields.Item("LeistungsNr").Value)
|
||||
' rpt.txtLeistung.Text = checkNull(rpt.Fields.Item("LeistungsBez").Value)
|
||||
|
||||
' If Not ROW("Lastschrift") Then
|
||||
' If checkNull(rpt.Fields.Item("LeistungsNr").Value) = "750" Then
|
||||
' strText = "Pos. 750 kann bei Zahlung innerhalb 10 Tagen gekürzt werden."
|
||||
' End If
|
||||
' End If
|
||||
|
||||
|
||||
' If rpt.Fields.Item("Belegdaten") IsNot Nothing AndAlso rpt.Fields.Item("Belegdaten").Value IsNot Nothing Then
|
||||
' rpt.txtLeistung.Text &= vbNewLine & checkNull(rpt.Fields.Item("Belegdaten").Value)
|
||||
' End If
|
||||
|
||||
' rpt.lblAnzahl.Text = checkNull(rpt.Fields.Item("Anzahl").Value)
|
||||
' ' rpt.lblBetrag.Text = rpt.Fields.Item("betrag").Value
|
||||
|
||||
' Dim stPfl As Double = 0
|
||||
' Dim stFrei As Double = 0
|
||||
|
||||
' If IsNumeric(checkNull(rpt.Fields.Item("SteuerpflichtigerBetrag").Value)) Then stPfl = CDbl(rpt.Fields.Item("SteuerpflichtigerBetrag").Value())
|
||||
' rpt.lblSteuerpflichtig.Text = If(stPfl <> 0, CDbl(stPfl).ToString("N2", Globalization.CultureInfo.CurrentCulture), "")
|
||||
' If IsNumeric(checkNull(rpt.Fields.Item("SteuerfreierBetrag").Value)) Then stFrei = CDbl(rpt.Fields.Item("SteuerfreierBetrag").Value())
|
||||
' rpt.lblSteuerfrei.Text = If(stFrei <> 0, CDbl(stFrei).ToString("N2", Globalization.CultureInfo.CurrentCulture), "")
|
||||
|
||||
|
||||
' sumSteuerpflichtig += stPfl
|
||||
' sumSteuerfrei += stFrei
|
||||
|
||||
' ' Anz += 1
|
||||
' ' gesAnz += 1
|
||||
|
||||
' ' If Anz Mod 2 = 0 Then
|
||||
' ' rpt.Detail.BackColor = Color.FromArgb(240, 240, 240)
|
||||
' 'Else
|
||||
' ' rpt.Detail.BackColor = Color.White
|
||||
' ' End If
|
||||
' 'rpt.Line10.Height = rpt.Detail.Height
|
||||
' End Sub
|
||||
|
||||
'AddHandler rpt.ReportFooter1.Format, Sub()
|
||||
' rpt.lblSteuerpflichtigGes.Text = If(sumSteuerpflichtig <> 0, (sumSteuerpflichtig).ToString("N2", CultureInfo.CurrentCulture), "")
|
||||
' rpt.lblSteuerfreiGes.Text = If(sumSteuerfrei <> 0, (sumSteuerfrei).ToString("N2", CultureInfo.CurrentCulture), "")
|
||||
|
||||
|
||||
' Dim steuerProz As Double = 0
|
||||
' Dim steuerBez As String = ""
|
||||
|
||||
' Dim dt2 As DataTable = SQL.loadDgvBySql("SELECT TOP 1 isnull([Steuersatz %],0),isnull([Steuerbezeichnung],'') FROM [Steuertabelle] WHERE [Steuerschlüssel]='" & ROW("Steuerschlüssel") & "'", "FMZOLL")
|
||||
' If dt2 IsNot Nothing AndAlso dt2.Rows.Count > 0 Then
|
||||
' steuerProz = dt2.Rows(0)(0)
|
||||
' steuerBez = dt2.Rows(0)(1)
|
||||
' End If
|
||||
|
||||
' rpt.lblSteuersatz.Text = steuerBez
|
||||
' rpt.lblSteuerbetrag.Text = If((sumSteuerpflichtig * steuerProz) <> 0, (sumSteuerpflichtig * steuerProz).ToString("N2", CultureInfo.CurrentCulture), "")
|
||||
' rpt.lblZWSumme.Text = (sumSteuerpflichtig + sumSteuerfrei).ToString("N2", CultureInfo.CurrentCulture)
|
||||
' rpt.lblSumme.Text = (sumSteuerpflichtig + sumSteuerfrei + (sumSteuerpflichtig * steuerProz)).ToString("N2", CultureInfo.CurrentCulture)
|
||||
' rpt.Label46.Text = If(ROW("Währungscode") IsNot DBNull.Value, ROW("Währungscode"), "EUR")
|
||||
|
||||
' If sumSteuerfrei = 0 Or sumSteuerpflichtig = 0 Then
|
||||
' rpt.lblZwText.Visible = False
|
||||
' rpt.lblZWSumme.Visible = False
|
||||
' End If
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
' End Sub
|
||||
|
||||
|
||||
AddHandler rpt.Detail.Format, Sub()
|
||||
|
||||
Dim einzelpreis As Double = IIf(rpt.Fields.Item("SteuerpflichtigerBetrag").Value > 0, rpt.Fields.Item("SteuerpflichtigerBetrag").Value / checkNull(rpt.Fields.Item("Anzahl").Value), rpt.Fields.Item("SteuerfreierBetrag").Value / checkNull(rpt.Fields.Item("Anzahl").Value))
|
||||
|
||||
Dim tradeLineItemNew As TradeLineItem = desc.AddTradeLineItem(
|
||||
name:=checkNull(rpt.Fields.Item("LeistungsBez").Value),
|
||||
billedQuantity:=Convert.ToDecimal(checkNull(rpt.Fields.Item("Anzahl").Value)),
|
||||
unitCode:=QuantityCodes.C62, ' immer in Stück
|
||||
netUnitPrice:=Convert.ToDecimal(einzelpreis),
|
||||
grossUnitPrice:=Convert.ToDecimal(einzelpreis),
|
||||
categoryCode:=IIf(rpt.Fields.Item("SteuerpflichtigerBetrag").Value > 0, TaxCategoryCodes.S, TaxCategoryCodes.Z),
|
||||
taxPercent:=IIf(rpt.Fields.Item("SteuerpflichtigerBetrag").Value > 0, Convert.ToDecimal(steuerProzent * 100), 0),
|
||||
taxType:=IIf(rpt.Fields.Item("SteuerpflichtigerBetrag").Value > 0, TaxTypes.VAT, TaxTypes.VAT)
|
||||
)
|
||||
Dim netUnitPrice = Convert.ToDecimal(einzelpreis)
|
||||
Dim netPricePos = netUnitPrice * Convert.ToDecimal(checkNull(rpt.Fields.Item("Anzahl").Value))
|
||||
sumNetto += netPricePos
|
||||
|
||||
End Sub
|
||||
|
||||
|
||||
'Summe aller Rechnungspositions-Nettobeträge der Rechnung
|
||||
Dim lineTotalAmont = sumNetto
|
||||
'Der Gesamtbetrag der Umsatzsteuer für die Rechnung,
|
||||
Dim taxTotalAmount = IIf(Gesamt_RG_BetragSteuerpflichtig <> 0, Math.Round(Convert.ToDecimal(Gesamt_RG_BetragSteuerpflichtig) / (100 + steuerProzenFaktor) * steuerProzenFaktor, 2), 0)
|
||||
' Die Gesamtsumme der Rechnung ohne Umsatzsteuer ' RECHNUNG.SteuerfreierGesamtbetrag + RECHNUNG.SteuerpflichtigerGesamtbetrag + 0 - 0
|
||||
Dim taxBasisAmount = Convert.ToDecimal(Gesamt_RG_BetragSteuerfrei + Gesamt_RG_BetragSteuerpflichtig + 0 - 0 - taxTotalAmount)
|
||||
'Der Gesamtbetrag der Rechnung mit Umsatzsteuer
|
||||
Dim grandTotalAmount = Convert.ToDecimal(Gesamt_RG_BetragSteuerfrei + Gesamt_RG_BetragSteuerpflichtig)
|
||||
'Der ausstehende Betrag, um dessen Zahlung gebeten wird. Dieser Betrag ist der Rechnungsgesamtbetrag einschließlich Umsatzsteuer abzüglich des im Voraus gezahlten Betrages.Im Falle einer vollständig beglichenen Rechnung ist dieser Betrag gleich null. Der Betrag kann negativ sein; In diesem Fall schuldet der Verkäufer dem Käufer den Betrag
|
||||
Dim duePayableAmount = Convert.ToDecimal(Gesamt_RG_BetragSteuerfrei + Gesamt_RG_BetragSteuerpflichtig)
|
||||
|
||||
desc.SetTotals(
|
||||
lineTotalAmount:=Convert.ToDecimal(lineTotalAmont),
|
||||
chargeTotalAmount:=0, 'Summe aller in der Rechnung enthaltenen Zuschläge der Dokumentenebene
|
||||
allowanceTotalAmount:=0, 'Summe aller in der Rechnung enthaltenen Abschläge der Dokumenteneben
|
||||
taxBasisAmount:=Convert.ToDecimal(taxBasisAmount),
|
||||
taxTotalAmount:=Convert.ToDecimal(taxTotalAmount),
|
||||
grandTotalAmount:=Convert.ToDecimal(grandTotalAmount),
|
||||
totalPrepaidAmount:=0, 'Die Summe der im Voraus gezahlten Beträge
|
||||
duePayableAmount:=Convert.ToDecimal(duePayableAmount),
|
||||
roundingAmount:=0 'Der Betrag, der dem Rechnungsgesamtbetrag hinzuzufügen ist, um den zu zahlenden Betrag zu runden
|
||||
)
|
||||
|
||||
desc.AddTradePaymentTerms(rpt.Label2.Text, zahlungszieldatum)
|
||||
|
||||
Dim isReverseCharge = IIf(getReverseChargeSumme(FIRMA, ROW("RechnungsLandKz"), ROW("RechnungsNr"), ROW("RechnungsDatum"), "") > 0, True, False)
|
||||
|
||||
|
||||
If Gesamt_RG_BetragSteuerfrei > 0 Then
|
||||
desc.AddApplicableTradeTax(Convert.ToDecimal(Gesamt_RG_BetragSteuerfrei), 0, TaxTypes.VAT, TaxCategoryCodes.Z)
|
||||
End If
|
||||
|
||||
If Gesamt_RG_BetragSteuerpflichtig > 0 Then
|
||||
desc.AddApplicableTradeTax(Convert.ToDecimal(taxBasisAmount - Gesamt_RG_BetragSteuerfrei), Convert.ToDecimal(steuerProzenFaktor), Convert.ToDecimal(taxTotalAmount), TaxTypes.VAT, IIf(isReverseCharge, TaxCategoryCodes.AE, TaxCategoryCodes.S))
|
||||
End If
|
||||
|
||||
Dim tmpPathZugpferd = VERAG_PROG_ALLGEMEIN.DATENVERVER_OPTIONS.getTMPPath("ZUGFeRD_Invoice_" & RechnungsNr, ".xml", True, False)
|
||||
Dim stream As FileStream = New FileStream(tmpPathZugpferd, FileMode.Create, FileAccess.Write)
|
||||
desc.Save(stream, ZUGFeRDVersion.Version20, Profile.Comfort)
|
||||
|
||||
stream.Flush()
|
||||
stream.Close()
|
||||
Return tmpPathZugpferd
|
||||
|
||||
If RECHNUNG.SteuerpflichtigerGesamtbetrag > 0 Then
|
||||
desc.AddApplicableTradeTax(Convert.ToDecimal(taxBasisAmount), Convert.ToDecimal(steuerProzenFaktor), Convert.ToDecimal(taxTotalAmount), TaxTypes.VAT, IIf(isReverseCharge, TaxCategoryCodes.AE, TaxCategoryCodes.S))
|
||||
End If
|
||||
|
||||
|
||||
Dim tmpPathZugpferd = VERAG_PROG_ALLGEMEIN.DATENVERVER_OPTIONS.getTMPPath("ZUGFeRD_Invoice_" & RECHNUNG.RechnungsNr, ".xml", True, False)
|
||||
Dim stream As FileStream = New FileStream(tmpPathZugpferd, FileMode.Create, FileAccess.Write)
|
||||
desc.Save(stream, ZUGFeRDVersion.Version20, Profile.Comfort)
|
||||
|
||||
stream.Flush()
|
||||
stream.Close()
|
||||
|
||||
Return tmpPathZugpferd
|
||||
|
||||
End Function
|
||||
|
||||
@@ -3657,6 +3915,19 @@ Public Class cFakturierung
|
||||
p.NeverEmbedFonts = ""
|
||||
p.Export(rpt.Document, tmpPath)
|
||||
|
||||
Dim Paramslist As New cParameterList(VERAG_PROG_ALLGEMEIN.cAllgemein.PROGID)
|
||||
Dim enableZugpferd = Paramslist.GET_PARAMETER_VALUE_BOOL("ZUGFeRD")
|
||||
If enableZugpferd Then
|
||||
tmpPath = VERAG_PROG_ALLGEMEIN.DATENVERVER_OPTIONS.addAttachementToPDF(tmpPath, createZUGFeRD(False, Nothing, dt, rpt))
|
||||
Else
|
||||
|
||||
Dim Zugferdpath = createZUGFeRD(False, Nothing, dt, rpt)
|
||||
Dim fileInfo_ZP As New FileInfo(Zugferdpath)
|
||||
Dim ZUGF_DS As New VERAG_PROG_ALLGEMEIN.cDATENSERVER("DOKUMENTE", "ZUGFERD", Now().Year & "_SR", "", "", fileInfo_ZP.Name, -1, False)
|
||||
ZUGF_DS.uploadDataToDATENSERVER(Zugferdpath, fileInfo_ZP.Name, fileInfo_ZP.Extension,,,, True)
|
||||
|
||||
End If
|
||||
|
||||
|
||||
Select Case If(Rechnugnsdruck > 0, Rechnugnsdruck, If(AD.Rechnungsdruck, 0))'If(AD.Rechnungsdruck, 0)
|
||||
Case 0, 1 'DRUCKEN
|
||||
|
||||
Reference in New Issue
Block a user