diff --git a/SDL/Classes/cEABeleg.vb b/SDL/Classes/cEABeleg.vb index 0a463382..dbf7ec60 100644 --- a/SDL/Classes/cEABeleg.vb +++ b/SDL/Classes/cEABeleg.vb @@ -282,6 +282,9 @@ Public Class EABeleg Property ECZahlungsPerAPI As Boolean = False Property ECTerminalreturnCode As Object = Nothing Property EC_daid As Integer = 0 + Property FT_ReceiptReference As Object = Nothing + + Property FT_ReceiptReference_Storno As Object = Nothing Property POS As New List(Of EABelegPositionen) @@ -362,6 +365,8 @@ Public Class EABeleg Me.ECZahlungsPerAPI = cSqlDb.checkNullReturnValue(dr.Item("ECZahlungsPerAPI"), Nothing) Me.ECTerminalreturnCode = cSqlDb.checkNullReturnValue(dr.Item("ECTerminalreturnCode"), Nothing) Me.EC_daid = cSqlDb.checkNullReturnValue(dr.Item("EC_daid"), Nothing) + Me.FT_ReceiptReference = cSqlDb.checkNullReturnValue(dr.Item("FT_ReceiptReference"), Nothing) + Me.FT_ReceiptReference_Storno = cSqlDb.checkNullReturnValue(dr.Item("FT_ReceiptReference_Storno"), Nothing) If loadPosAswell Then POS = LOAD_POS_List(Mandant, Niederlassung, Benutzer, BelegNr, BelegDat) ' MsgBox(POS.Count) @@ -547,6 +552,8 @@ Public Class EABeleg list.Add(New VERAG_PROG_ALLGEMEIN.MyListItem2("ECZahlungsPerAPI", ECZahlungsPerAPI)) list.Add(New VERAG_PROG_ALLGEMEIN.MyListItem2("ECTerminalreturnCode", ECTerminalreturnCode)) list.Add(New VERAG_PROG_ALLGEMEIN.MyListItem2("EC_daid", EC_daid)) + list.Add(New VERAG_PROG_ALLGEMEIN.MyListItem2("FT_ReceiptReference", FT_ReceiptReference)) + list.Add(New VERAG_PROG_ALLGEMEIN.MyListItem2("FT_ReceiptReference_Storno", FT_ReceiptReference_Storno)) 'For Each p As System.Reflection.PropertyInfo In Me.GetType().GetProperties() 'If p.CanRead Then diff --git a/SDL/Classes/cFiskaltrustClient_chilkat.vb b/SDL/Classes/cFiskaltrustClient_chilkat.vb index b1ba50ff..87785ae8 100644 --- a/SDL/Classes/cFiskaltrustClient_chilkat.vb +++ b/SDL/Classes/cFiskaltrustClient_chilkat.vb @@ -1,9 +1,13 @@  Imports System.Data.SqlClient +Imports System.IO Imports System.Reflection Imports Chilkat +Imports Gma.QrCodeNet.Encoding Imports GrapeCity.DataVisualization.Chart +Imports itextsharp.text.pdf.qrcode Imports Newtonsoft.Json +Imports QRCoder Public Class FtReceiptCases @@ -257,71 +261,71 @@ Public Class cFiskaltrustClient_chilkat json.UpdateString("cbReceiptMoment", DateTime.UtcNow.ToString("o")) - Dim receipCase As Long - Select Case _receiptCase + Dim receipCase As Long + Select Case _receiptCase - Case "Storno" - receipCase = FtReceiptCases.PosReceipt Or FtReceiptCases.ReversalReceipt Or FtReceiptCases.ImplicitTransaction 'Storno + Case "Storno" + receipCase = FtReceiptCases.PosReceipt Or FtReceiptCases.ReversalReceipt Or FtReceiptCases.ImplicitTransaction 'Storno - Case Else - receipCase = FtReceiptCases.PosReceipt Or FtReceiptCases.ImplicitTransaction 'Verkauf + Case Else + receipCase = FtReceiptCases.PosReceipt Or FtReceiptCases.ImplicitTransaction 'Verkauf - End Select + End Select - json.UpdateString("ftReceiptCase", receipCase) + json.UpdateString("ftReceiptCase", receipCase) - Dim chargeItems = json.AppendArray("cbChargeItems") + Dim chargeItems = json.AppendArray("cbChargeItems") - For Each p In POS + For Each p In POS - If chargeItems.AddObjectAt(-1) Then - Dim item As Chilkat.JsonObject = chargeItems.ObjectAt(chargeItems.Size - 1) - item.UpdateInt("Quantity", p.Anzahl) - item.UpdateNumber("Amount", p.Preis.ToString().Replace(",", ".")) - item.UpdateNumber("VATRate", vat.ToString().Replace(",", ".")) - item.UpdateString("Description", p.LeistungsBez) + If chargeItems.AddObjectAt(-1) Then + Dim item As Chilkat.JsonObject = chargeItems.ObjectAt(chargeItems.Size - 1) + item.UpdateInt("Quantity", p.Anzahl) + item.UpdateNumber("Amount", p.Preis.ToString().Replace(",", ".")) + item.UpdateNumber("VATRate", vat.ToString().Replace(",", ".")) + item.UpdateString("Description", p.LeistungsBez) - Dim ChargeItemCase As Long - Select Case vat + Dim ChargeItemCase As Long + Select Case vat - Case 19D - ChargeItemCase = FtChargeItemCase.RevenueNormal + Case 19D + ChargeItemCase = FtChargeItemCase.RevenueNormal - Case 7D - ChargeItemCase = FtChargeItemCase.RevenueReduced + Case 7D + ChargeItemCase = FtChargeItemCase.RevenueReduced - Case 0D - ChargeItemCase = FtChargeItemCase.RevenueTaxFree + Case 0D + ChargeItemCase = FtChargeItemCase.RevenueTaxFree - Case Else - Throw New Exception("Unbekannter Steuersatz") - End Select + Case Else + Throw New Exception("Unbekannter Steuersatz") + End Select - item.UpdateString("ftChargeItemCase", ChargeItemCase) - End If + item.UpdateString("ftChargeItemCase", ChargeItemCase) + End If - Next + Next - Dim payItems = json.AppendArray("cbPayItems") - payItems.AddObjectAt(-1) - Dim pay As Chilkat.JsonObject = payItems.ObjectAt(payItems.Size - 1) - pay.UpdateInt("Quantity", 1) - pay.UpdateNumber("Amount", amount.ToString().Replace(",", ".")) - pay.UpdateString("Description", kindOfPayment) + Dim payItems = json.AppendArray("cbPayItems") + payItems.AddObjectAt(-1) + Dim pay As Chilkat.JsonObject = payItems.ObjectAt(payItems.Size - 1) + pay.UpdateInt("Quantity", 1) + pay.UpdateNumber("Amount", amount.ToString().Replace(",", ".")) + pay.UpdateString("Description", kindOfPayment) - Select Case kindOfPayment - Case "Cash" - pay.UpdateString("ftPayItemCase", FtPayItemCases.Cash) - Case "Card" - pay.UpdateString("ftPayItemCase", FtPayItemCases.DebitCard) - End Select + Select Case kindOfPayment + Case "Cash" + pay.UpdateString("ftPayItemCase", FtPayItemCases.Cash) + Case "Card" + pay.UpdateString("ftPayItemCase", FtPayItemCases.DebitCard) + End Select - Return json + Return json End Function @@ -460,7 +464,7 @@ Public Class cFiskaltrustClient_chilkat Return Terminal_ID & "_" & Application.ProductVersion End Function - Public Function saveRKSV_FT(ByRef result_zahlung As String, ByRef QR_CodeString As String) As Boolean + Public Function saveRKSV_FT(ByRef result_zahlung As String, ByRef QR_CodeString As String, ByRef beleg_temp As EABeleg, ByRef isStorno As Boolean) As Boolean If result_zahlung <> "" Then Dim json As New Chilkat.JsonObject @@ -498,6 +502,18 @@ Public Class cFiskaltrustClient_chilkat .ftState = json.StringOf("ftState") saved = .SAVE() + If saved AndAlso beleg_temp IsNot Nothing Then + + If isStorno Then + beleg_temp.FT_ReceiptReference_Storno = .cbReceiptReference + beleg_temp.SAVE() + Else + beleg_temp.FT_ReceiptReference = .cbReceiptReference + End If + + + End If + End With @@ -525,10 +541,29 @@ Public Class cFiskaltrustClient_chilkat .ftSignatureFormat = SignObj.StringOf("ftSignatureFormat") .ftSignatureType = SignObj.StringOf("ftSignatureType") saved = .SAVE() - If IsNumeric(.ftSignatureType) AndAlso CInt(.ftSignatureType) = IIf(VERAG_PROG_ALLGEMEIN.cAllgemein.TESTSYSTEM = True, 0, 3) Then - 'QR_CodeString = .ftData - End If + 'If IsNumeric(.ftSignatureType) AndAlso CInt(.ftSignatureType) = IIf(VERAG_PROG_ALLGEMEIN.cAllgemein.TESTSYSTEM = True, 0, 3) Then + ' QR_CodeString = .ftData + 'End If + 'https://receipts.fiskaltrust.eu/{ftQueueID}/{ftQueueItemID} + Dim URL_FT As String = "" + If Not String.IsNullOrWhiteSpace(ftSig.ftQueueID) AndAlso Not String.IsNullOrWhiteSpace(ftSig.ftQueueItemID) Then + URL_FT = $"https://receipts.fiskaltrust.eu/{ftSig.ftQueueID}/{ftSig.ftQueueItemID}" + + Using qrGenerator As New QRCodeGenerator() + Using qrData As QRCodeData = qrGenerator.CreateQrCode(URL_FT, QRCodeGenerator.ECCLevel.Q) + + Dim qrCode As New PngByteQRCode(qrData) + Dim qrBytes As Byte() = qrCode.GetGraphic(20) + Dim qrBase64 As String = Convert.ToBase64String(qrBytes) + + QR_CodeString = qrBase64 + + End Using + End Using + + + End If End With Next diff --git a/SDL/Classes/cRKSV.vb b/SDL/Classes/cRKSV.vb index c9dd04d9..fb781b8e 100644 --- a/SDL/Classes/cRKSV.vb +++ b/SDL/Classes/cRKSV.vb @@ -1,10 +1,7 @@ -Imports System.Net.Http -Imports System.Text -Imports GrapeCity.ActiveReports -Imports GrapeCity.DataVisualization.Options -Imports Newtonsoft.json +Imports GrapeCity.ActiveReports Imports SDL.RKSVServer Imports VERAG_PROG_ALLGEMEIN.DSFinVKService +Imports VERAG_PROG_ALLGEMEIN.RKSV_DE_DSFinVKService Public Class cRKSV Shared SQL As New SQL @@ -92,7 +89,7 @@ Public Class cRKSV End Function - Shared Function insertRKSVFiskaltrustAsync(ByVal kasse As cRKSV_Kasse, CompanyGUID As String, ByVal umsatzZaehler As Double, ByVal belegDat As DateTime, ByVal steuerSchluessel As Integer, ByVal RKSV_Beleg_Id As Integer, ByVal summeBRUTTO As Double, TEST As Boolean, POS As List(Of EABelegPositionen), ByRef QR_CodeString As String, ByRef LastJWS As String) As Boolean + Shared Function insertRKSVFiskaltrustAsync(ByVal kasse As cRKSV_Kasse, beleg_temp As EABeleg, ByVal RKSV_Beleg_Id As Integer, ByVal summeBRUTTO As Double, TEST As Boolean, ByRef QR_CodeString As String, ByRef LastJWS As String) As Boolean Try @@ -103,7 +100,7 @@ Public Class cRKSV credentials.Username = "Admin" credentials.Password = "verag#2" credentials.CashboxID = kasse.rksv_FT_CashboxID - credentials.CompanyGUID = CompanyGUID + credentials.CompanyGUID = kasse.rksv_CompanyGUID Dim AccessToken As String = kasse.rksv_FT_AccessToken Dim jws As String = String.Empty @@ -112,16 +109,18 @@ Public Class cRKSV 'Dim answer As String = String.Empty Dim Belegnummer = RKSV_Beleg_Id - Dim BelegDatumUhrzeit = belegDat ' BELEG.BelegDat + Dim BelegDatumUhrzeit = beleg_temp.BelegDat - Dim steuersatz As Double = SQL.getValueTxtBySql("SELECT isnull(tblSteuersätze.Steuersatz,0) FROM tblSteuersätze WHERE tblSteuersätze.Nr='" & steuerSchluessel & "' ", "FMZOLL") + Dim steuersatz As Double = SQL.getValueTxtBySql("SELECT isnull(tblSteuersätze.Steuersatz,0) FROM tblSteuersätze WHERE tblSteuersätze.Nr='" & beleg_temp.Steuerschlüssel & "' ", "FMZOLL") Dim BetragSatzNormal = IIf(steuersatz = 0.2, summeBRUTTO, 0.0) 'summe Dim BetragSatzErm1 = IIf(steuersatz = 0.1, summeBRUTTO, 0.0) Dim BetragSatzErm2 = IIf(steuersatz = 0.13, summeBRUTTO, 0.0) Dim BetragSatzNull = IIf(steuersatz = 0.0, summeBRUTTO, 0.0) Dim BetragSatzBesonders = IIf(steuersatz = 0.19, summeBRUTTO, 0.0) - Dim StandUmsatzzaehler = umsatzZaehler 'KASSE.rksv_Umsatzzaehler + Dim StandUmsatzzaehler = kasse.rksv_Umsatzzaehler + + Dim kindOfPayment As String = getKindOfPayment(beleg_temp) If False Then 'Dim client As New cFiskaltrustClient(kasse.rksv_FT_RestServiceURL, kasse.rksv_FT_CashboxID, kasse.rksv_FT_AccessToken, kasse.rksv_FT_Country) @@ -134,9 +133,9 @@ Public Class cRKSV 'End If Else Dim client As New cFiskaltrustClient_chilkat(kasse.rksv_FT_RestServiceURL, kasse.rksv_FT_CashboxID, kasse.rksv_FT_AccessToken, kasse.rksv_FT_Country) - Dim result = client.SignReceipt(summeBRUTTO, steuersatz, POS, "Cash", kasse.rksv_id) + Dim result = client.SignReceipt(summeBRUTTO, steuersatz, beleg_temp.POS, kindOfPayment, kasse.rksv_id) If result <> "" Then - Return client.saveRKSV_FT(result, QR_CodeString) + Return client.saveRKSV_FT(result, QR_CodeString, beleg_temp, False) Else Return False End If @@ -144,11 +143,6 @@ Public Class cRKSV End If - - - - - Catch ex As Exception MsgBox("Es ist ein Fehler bei der Signatur aufgetreten (insertRKSV): " & vbNewLine & ex.Message & ex.StackTrace) Return False @@ -915,18 +909,13 @@ Public Class cRKSV Dim client As RKSVWcfClient = New RKSVWcfClient() client.Endpoint.Address = New System.ServiceModel.EndpointAddress(getRKSVLink(kasse)) client.Open() - ' svcRKSV.DBUserCredentials m_credentials = new svcRKSV.DBUserCredentials(); + Dim credentials As New SDL.RKSVServer.DBUserCredentials credentials.Database = "RKSVWcfDB" credentials.Server = "AVISO\SQLEXPRESS" - - credentials.Username = "Admin" credentials.Password = "verag#2" - 'credentials.CashboxID = kasse '"VERAG-SUB-KASSE-ZOLL" - 'credentials.CompanyGUID = CompanyGUID ' "9119d9ae-f549-4a0f-a50f-0500ec7ca059" - credentials.CashboxID = kasse.rksv_bez '"VERAG-SUB-KASSE-ZOLL" credentials.CompanyGUID = kasse.rksv_CompanyGUID ' "9119d9ae-f549-4a0f-a50f-0500ec7ca059" @@ -952,23 +941,6 @@ Public Class cRKSV Dim BetragSatzBesonders = IIf(steuersatz = 0.19, summeBRUTTO, 0.0) Dim StandUmsatzzaehler = kasse.rksv_Umsatzzaehler 'KASSE.rksv_Umsatzzaehler - - ' Dim BetragSatzNormal = summe * -1 - ' Dim BetragSatzErm1 = IIf(steuersatz = 0.1, summe, 0.0) * -1 - ' Dim BetragSatzErm2 = IIf(steuersatz = 0.13, summe, 0.0) * -1 - ' Dim BetragSatzNull = IIf(steuersatz = 0.0, summe, 0.0) * -1 - ' Dim BetragSatzBesonders = IIf(steuersatz = 0.19, summe, 0.0) * -1 - ' Dim StandUmsatzzaehler = kasse.rksv_Umsatzzaehler - - ' Dim BetragSatzBesonders = 0 - ' Dim BetragSatzBesonders = 0 - ' Dim BetragSatzBesonders = 0 - 'client.ExportJWS - - ' MsgBox(credentials.CashboxID & " credentials.CashboxID") - ' MsgBox(credentials.CompanyGUID & " credentials.CompanyGUID") - - If (client.SignStornoReceipt(credentials, Belegnummer, BelegDatumUhrzeit, BetragSatzNormal, BetragSatzErm1, BetragSatzErm2, BetragSatzBesonders, BetragSatzNull, jws, qr, ocra, answer)) Then QR_CodeString = qr @@ -996,6 +968,82 @@ Public Class cRKSV End Try Return False End Function + Shared Function stornoRKSV_FT(ByVal kasse As cRKSV_Kasse, ByVal beleg_temp As EABeleg, ByRef QR_CodeString As String, ByRef LastJWS As String, ByRef answer As String) As Boolean + Try + + If beleg_temp.rksv_BelegId <= 0 Then + MsgBox("Keine RKSV-Beleg-ID") + Return False + End If + + Dim credentials As New SDL.RKSVServer.DBUserCredentials + + credentials.Database = "RKSVWcfDB" + credentials.Server = "AVISO\SQLEXPRESS" + credentials.Username = "Admin" + credentials.Password = "verag#2" + credentials.CashboxID = kasse.rksv_bez '"VERAG-SUB-KASSE-ZOLL" + credentials.CompanyGUID = kasse.rksv_CompanyGUID ' "9119d9ae-f549-4a0f-a50f-0500ec7ca059" + + + + + Dim jws As String = String.Empty + Dim qr As String = String.Empty + Dim ocra As String = String.Empty + 'Dim answer As String = String.Empty + + Dim Belegnummer = beleg_temp.rksv_BelegId + Dim BelegDatumUhrzeit = beleg_temp.BelegDat + + Dim steuersatz As Double = SQL.getValueTxtBySql("SELECT isnull(tblSteuersätze.Steuersatz,0) FROM tblSteuersätze WHERE tblSteuersätze.Nr='" & beleg_temp.Steuerschlüssel & "' ", "FMZOLL") + + + + Dim BetragSatzNormal = IIf(steuersatz = 0.2, beleg_temp.rksv_umsatz, 0.0) 'summe + Dim BetragSatzErm1 = IIf(steuersatz = 0.1, beleg_temp.rksv_umsatz, 0.0) + Dim BetragSatzErm2 = IIf(steuersatz = 0.13, beleg_temp.rksv_umsatz, 0.0) + Dim BetragSatzNull = IIf(steuersatz = 0.0, beleg_temp.rksv_umsatz, 0.0) + Dim BetragSatzBesonders = IIf(steuersatz = 0.19, beleg_temp.rksv_umsatz, 0.0) + Dim StandUmsatzzaehler = kasse.rksv_Umsatzzaehler 'KASSE.rksv_Umsatzzaehler + + Dim kindOfPayment As String = getKindOfPayment(beleg_temp) + + If False Then + + Else + Dim client As New cFiskaltrustClient_chilkat(kasse.rksv_FT_RestServiceURL, kasse.rksv_FT_CashboxID, kasse.rksv_FT_AccessToken, kasse.rksv_FT_Country) + Dim result = client.ChancelReceipt(beleg_temp.FT_ReceiptReference, beleg_temp.rksv_umsatz, steuersatz, beleg_temp.POS, kindOfPayment, kasse.rksv_id) + If result <> "" Then + Return client.saveRKSV_FT(result, QR_CodeString, beleg_temp, True) + Else + Return False + End If + + End If + + Return True + + Catch ex As Exception + MsgBox("Es ist ein Fehler bei der Signatur aufgetreten (insertRKSV): " & vbNewLine & ex.Message & ex.StackTrace) + End Try + Return False + End Function + + Private Shared Function getKindOfPayment(beleg As EABeleg) As String + + If beleg Is Nothing Then Return "" + + Dim kindOfPayment As String = "Cash" + + If beleg.ECZahlungsNr IsNot Nothing AndAlso IsNumeric(beleg.ECZahlungsNr) AndAlso beleg.ECZahlungsNr > 0 Then + kindOfPayment = "Card" + End If + + Return kindOfPayment + + End Function + 'Beleg storno und Kassenbuch Gegenbuchung Shared Function STORNO(BELEG As EABeleg, ByVal grund As String, Firma As String, Optional stornoGegenbuchen As Boolean = False) As EABeleg diff --git a/SDL/SDL.vbproj b/SDL/SDL.vbproj index 33db9b92..b1be67fd 100644 --- a/SDL/SDL.vbproj +++ b/SDL/SDL.vbproj @@ -470,6 +470,9 @@ ..\..\..\dll\QRCode.dll + + ..\..\..\Aviso\AVISO\packages\QRCoder.1.8.0\lib\net40\QRCoder.dll + ..\..\..\dll\Registrierkasse.dll diff --git a/SDL/USTV/frmMDM_USTVAntrag.Designer.vb b/SDL/USTV/frmMDM_USTVAntrag.Designer.vb index e2621aa8..f8cf5ca1 100644 --- a/SDL/USTV/frmMDM_USTVAntrag.Designer.vb +++ b/SDL/USTV/frmMDM_USTVAntrag.Designer.vb @@ -148,7 +148,6 @@ Partial Class frmMDM_USTVAntrag Me.ToolStripMenuItem2 = New System.Windows.Forms.ToolStripMenuItem() Me.ToolStripMenuItem3 = New System.Windows.Forms.ToolStripMenuItem() Me.FakturiertToolStripMenuItem = New System.Windows.Forms.ToolStripMenuItem() - Me.txtWarning = New VERAG_PROG_ALLGEMEIN.MyTextBox() Me.UstCntlUSTV_AntragPosition1 = New SDL.ustCntlUSTV_AntragPosition() Me.UstCntlUSTV_AntragErstattungen1 = New SDL.ustCntlUSTV_ErstattungPosition() Me.pnlBottom.SuspendLayout() @@ -430,7 +429,6 @@ Partial Class frmMDM_USTVAntrag 'pnlHeader ' Me.pnlHeader.BackColor = System.Drawing.Color.FromArgb(CType(CType(0, Byte), Integer), CType(CType(54, Byte), Integer), CType(CType(128, Byte), Integer)) - Me.pnlHeader.Controls.Add(Me.txtWarning) Me.pnlHeader.Controls.Add(Me.cbxRGretour) Me.pnlHeader.Controls.Add(Me.lblGesamtUSteuer) Me.pnlHeader.Controls.Add(Me.lblDiffernezbetrag) @@ -529,7 +527,7 @@ Partial Class frmMDM_USTVAntrag Me.KdSearchBox1.KdNr = "-1" Me.KdSearchBox1.kdNrField = Nothing Me.KdSearchBox1.KdNrNullInt = Nothing - Me.KdSearchBox1.Location = New System.Drawing.Point(298, 10) + Me.KdSearchBox1.Location = New System.Drawing.Point(284, 12) Me.KdSearchBox1.Name = "KdSearchBox1" Me.KdSearchBox1.nurAktive = True Me.KdSearchBox1.searchActive = True @@ -1935,34 +1933,6 @@ Partial Class frmMDM_USTVAntrag Me.FakturiertToolStripMenuItem.Text = "Fakturiert zurücksetzen" Me.FakturiertToolStripMenuItem.Visible = False ' - 'txtWarning - ' - Me.txtWarning._DateTimeOnly = False - Me.txtWarning._numbersOnly = False - Me.txtWarning._numbersOnlyKommastellen = "" - Me.txtWarning._numbersOnlyTrennzeichen = False - Me.txtWarning._Prozent = False - Me.txtWarning._ShortDateNew = False - Me.txtWarning._ShortDateOnly = False - Me.txtWarning._TimeOnly = False - Me.txtWarning._TimeOnly_Seconds = False - Me.txtWarning._value = "" - Me.txtWarning._Waehrung = False - Me.txtWarning._WaehrungZeichen = False - Me.txtWarning.BackColor = System.Drawing.Color.FromArgb(CType(CType(0, Byte), Integer), CType(CType(54, Byte), Integer), CType(CType(128, Byte), Integer)) - Me.txtWarning.BorderStyle = System.Windows.Forms.BorderStyle.None - Me.txtWarning.Font = New System.Drawing.Font("Microsoft Sans Serif", 12.0!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) - Me.txtWarning.ForeColor = System.Drawing.Color.Black - Me.txtWarning.Location = New System.Drawing.Point(475, 36) - Me.txtWarning.MaxLength = 10 - Me.txtWarning.MaxLineLength = -1 - Me.txtWarning.MaxLines_Warning = "" - Me.txtWarning.MaxLines_Warning_Label = Nothing - Me.txtWarning.Multiline = True - Me.txtWarning.Name = "txtWarning" - Me.txtWarning.Size = New System.Drawing.Size(88, 40) - Me.txtWarning.TabIndex = 61 - ' 'UstCntlUSTV_AntragPosition1 ' Me.UstCntlUSTV_AntragPosition1.Dock = System.Windows.Forms.DockStyle.Fill @@ -2153,5 +2123,4 @@ Partial Class frmMDM_USTVAntrag Friend WithEvents btnSortNachLeist As Button Friend WithEvents txtVZOffen As VERAG_PROG_ALLGEMEIN.MyTextBox Friend WithEvents Label19 As Label - Friend WithEvents txtWarning As VERAG_PROG_ALLGEMEIN.MyTextBox End Class diff --git a/SDL/USTV/frmMDM_USTVAntrag.vb b/SDL/USTV/frmMDM_USTVAntrag.vb index 45dd6020..247f1225 100644 --- a/SDL/USTV/frmMDM_USTVAntrag.vb +++ b/SDL/USTV/frmMDM_USTVAntrag.vb @@ -57,18 +57,16 @@ Public Class frmMDM_USTVAntrag lblGesamtErstattungFW.Text = "-" lblDiffernezbetragFW.Text = "-" - txtWarning.Text = "" - - lblGesamtUSteuer.Text = "-" + lblGesamtUSteuer.Text="-" lblGesamtErstattung.Text = "-" lblDiffernezbetrag.Text = "-" btnAntrageeinarbeiten.Enabled = Not UStVAn_ID <= 0 - FlowLayoutPanel.Enabled = Not UStVAn_ID <= 0 - btnEintragloeschen.Enabled = Not UStVAn_ID <= 0 - btnNeuerEintrag.Enabled = Not UStVAn_ID <= 0 - UstCntlUSTV_AntragPosition1.Enabled = Not UStVAn_ID <= 0 - cbxLand.Visible = UStVAn_ID <= 0 + FlowLayoutPanel.Enabled= Not UStVAn_ID <= 0 + btnEintragloeschen.Enabled= Not UStVAn_ID <= 0 + btnNeuerEintrag.Enabled= Not UStVAn_ID <= 0 + UstCntlUSTV_AntragPosition1.Enabled= Not UStVAn_ID <= 0 + cbxLand.Visible= UStVAn_ID <= 0 With dgvUSTVPositionen @@ -76,11 +74,6 @@ Public Class frmMDM_USTVAntrag If UStVAn_ID <= 0 Then Exit Sub - '.SET_SQL("SELECT [UStVAn_ID] ,[UStVPo_ID] ,[UStVPo_ReDat],[UStVPo_ReNr],[UStVPo_Leistungsbezeichnung],[UStVPo_Leistender],leist.[UstV_Leistender_Strasse] + ' ' + leist.[UstV_Leistender_StrasseNr] as [UstV_Leistender_Strasse],leist.[UstV_Leistender_PLZ],leist.[UstV_Leistender_Stadt],leist.[UstV_Leistender_Land],leist.[UstV_Leistender_UstNr],[UStVPo_USteuerbetrag],[UStVPo_Schnittstelle],[UStVPo_SchnittstellenNr],[UStVPo_Umrechnungskurs],[UStVPo_USteuerbetragEUR],[UStVPo_Sachbearbeiter], [UStVPo_daId] - ' FROM [tblUStVPositionen] - ' left join [tblUStVLeistender] as leist on leist.UStV_Leistender = [tblUStVPositionen].[UStVPo_Leistender] - ' where UStVAn_ID='" & UStVAn_ID & "' ORDER BY UStVPo_ID", "FMZOLL") - .SET_SQL("SELECT [UStVAn_ID] ,[UStVPo_ID] " & IIf(cbxInterneNr.Checked, ",[UStVPo_interneNr] as intNr", "") & " ,[UStVPo_ReDat],[UStVPo_ReNr],[UStVPo_Leistungsbezeichnung],[UStVPo_Nettobetrag],[UStVPo_NettobetragEUR],[UStVPo_Leistender],leist.[UstV_Leistender_Strasse] + ' ' + leist.[UstV_Leistender_StrasseNr] as [UstV_Leistender_Strasse],leist.[UstV_Leistender_Strasse] as StrasseOnly,leist.[UstV_Leistender_StrasseNr] as StrassenNrOnly,leist.[UstV_Leistender_PLZ],leist.[UstV_Leistender_Stadt],leist.[UstV_Leistender_Land],leist.[UstV_Leistender_UstNr],[UStVPo_USteuerbetrag],[UStVPo_Schnittstelle],[UStVPo_SchnittstellenNr],[UStVPo_Umrechnungskurs],[UStVPo_USteuerbetragEUR],[UStVPo_Sachbearbeiter], [UStVPo_daId], [UStVPo_daId_loeschbar] ,[UStVPo_VZ],[UStVPo_VZ_RKID] ,cast(case when isnull([UStVPo_VZ_RKID],0) = 0 then 0 else 1 end as bit) as VZabrechnet FROM [tblUStVPositionen] LEFT JOIN [tblUStVLeistender] as leist @@ -207,17 +200,18 @@ Public Class frmMDM_USTVAntrag DirectCast(r.Cells("clmnPDF"), DataGridViewImageCell).Value = My.Resources.pdf End If + If Not (r.Cells("UStVPo_SchnittstellenNr").Value = 4 OrElse r.Cells("UStVPo_SchnittstellenNr").Value = 9) AndAlso Not r.Cells("UStVPo_ReNr").Value.ToString.ToLower.StartsWith("bis") Then 'MSE und "SAMMELBERIFF" ausnehmen + Dim rechnungsNr = CStr(r.Cells("UStVPo_ReNr").Value) - Dim rechnungsNr = CStr(r.Cells("UStVPo_ReNr").Value) - - If Not String.IsNullOrWhiteSpace(rechnungsNr) Then - If Not invoiceNumbers.Add(rechnungsNr) Then - txtWarning.Text = "dopp. Rechnungsnr!" - Exit For + If Not String.IsNullOrWhiteSpace(rechnungsNr) Then + If Not invoiceNumbers.Add(rechnungsNr) Then + r.Cells("UStVPo_ReNr").Style.BackColor = Color.IndianRed + End If End If End If + Next If .Columns.Count > 1 Then @@ -1832,7 +1826,7 @@ Public Class frmMDM_USTVAntrag If UStVAn_ID > 0 Then - Dim invoiceNumbers As New HashSet(Of String) + dgvUSTVPositionen.GetOrder() @@ -1844,6 +1838,18 @@ Public Class frmMDM_USTVAntrag VERAG_PROG_ALLGEMEIN.cMDMFunctionsAllgemein.Update_UStVASummenNeuBerechnen_USTVA(USTV_ANTRAG.UStVAn_ID) + Dim invoiceNumbers As New HashSet(Of String) + For Each r In dgvUSTVPositionen.Rows + Dim rechnungsNr = CStr(r.Cells("UStVPo_ReNr").Value) + + If Not String.IsNullOrWhiteSpace(rechnungsNr) Then + If Not invoiceNumbers.Add(rechnungsNr) Then + MessageBox.Show($"Doppelt erfasste RechnungsNr vorhanden: {rechnungsNr}") + Exit For + End If + End If + Next + If USTV_ANTRAG.UStVAn_Währungscode IsNot Nothing AndAlso USTV_ANTRAG.UStVAn_Währungscode <> "EUR" AndAlso USTV_ANTRAG.UStVAn_Währungscode <> "" Then Dim averageUmrechnungskurs As Double = 1 Dim invoicedateOK As Boolean = True @@ -1859,14 +1865,7 @@ Public Class frmMDM_USTVAntrag PosNr = row.Cells("UStVPo_ID").Value End If - Dim rechnungsNr = CStr(row.Cells("UStVPo_ReNr").Value) - If Not String.IsNullOrWhiteSpace(rechnungsNr) Then - If Not invoiceNumbers.Add(rechnungsNr) Then - MessageBox.Show($"Doppelt erfasste RechnungsNr: {rechnungsNr}") - Exit For - End If - End If Next averageUmrechnungskurs = averageUmrechnungskurs / dgvUSTVPositionen.Rows.Count diff --git a/SDL/USTV/usrCntlUSTV.vb b/SDL/USTV/usrCntlUSTV.vb index 65ee8923..7476b5bf 100644 --- a/SDL/USTV/usrCntlUSTV.vb +++ b/SDL/USTV/usrCntlUSTV.vb @@ -802,7 +802,7 @@ Public Class usrCntlUSTV Dim sqlStr = "SELECT [UStVAn_ID] as AntragsID,cast([UStVPo_ReDat] as date) as Rechnungsdatum,[UStVPo_ReNr] as RechnungsNr - FROM [VERAG].[dbo].[tblUStVPositionen] where Year([UStVPo_ReDat]) >= " & RechnungsjahrVon & " and Year([UStVPo_ReDat]) >= " & RechnungsjahrBis & " + FROM [VERAG].[dbo].[tblUStVPositionen] where Year([UStVPo_ReDat]) >= " & RechnungsjahrVon & " and Year([UStVPo_ReDat]) <= " & RechnungsjahrBis & " group by [UStVAn_ID] ,[UStVPo_ReNr], [UStVPo_ReDat] HAVING COUNT(*) > 1 order by [UStVAn_ID] desc" diff --git a/SDL/kassenbuch/frmBelegNeu.vb b/SDL/kassenbuch/frmBelegNeu.vb index 5894d4b7..7c9f8cf0 100644 --- a/SDL/kassenbuch/frmBelegNeu.vb +++ b/SDL/kassenbuch/frmBelegNeu.vb @@ -1704,7 +1704,7 @@ Public Class frmBelegNeu Dim verarbeitet As Boolean = False If KASSE.rksv_FT_RestServiceURL <> "" Then - Dim result = cRKSV.insertRKSVFiskaltrustAsync(KASSE, KASSE.rksv_CompanyGUID, KASSE.rksv_Umsatzzaehler, BELEG.BelegDat, BELEG.Steuerschlüssel, RKSV_Beleg_Id, If(EA = "E", summeBRUTTO, summeBRUTTO * -1), TESTBUCHUNG, BELEG.POS, QR_CodeString, LastJWS) + Dim result = cRKSV.insertRKSVFiskaltrustAsync(KASSE, BELEG, RKSV_Beleg_Id, If(EA = "E", summeBRUTTO, summeBRUTTO * -1), TESTBUCHUNG, QR_CodeString, LastJWS) 'result.Wait() verarbeitet = result Else @@ -2028,7 +2028,7 @@ Public Class frmBelegNeu If vbYes = MsgBox(result & vbNewLine & vbNewLine & "Testdaten in DB speichern?", vbYesNoCancel) Then Dim QR_CodeString As String = "" - client_chilkat.saveRKSV_FT(result, QR_CodeString) + client_chilkat.saveRKSV_FT(result, QR_CodeString, Nothing, False) End If Else Return False diff --git a/SDL/kassenbuch/frmKassenbuch.vb b/SDL/kassenbuch/frmKassenbuch.vb index 2fdeacea..63020d7b 100644 --- a/SDL/kassenbuch/frmKassenbuch.vb +++ b/SDL/kassenbuch/frmKassenbuch.vb @@ -207,6 +207,8 @@ Public Class frmKassenbuch ' " ORDER BY b.rksv_BelegId DESC;", "FMZOLL") .LOAD() + If .Rows.Count = 0 Then Exit Sub + .Columns("Betrag").DefaultCellStyle.Format = "C" .Columns("Betrag").DefaultCellStyle.Alignment = DataGridViewContentAlignment.TopRight .Columns("Ordnungsbegriff").AutoSizeMode = DataGridViewAutoSizeColumnMode.Fill @@ -273,6 +275,8 @@ Public Class frmKassenbuch ' " " & benutzerTMP & " AND BelegDat BETWEEN '" & datVon.Value.ToShortDateString & "' AND '" & datBis.Value.ToShortDateString & "' ORDER BY JournalNr DESC", "FMZOLL") .LOAD() + If .Rows.Count = 0 Then Exit Sub + .Columns("JournalNr").Width = 55 .Columns("JournalNr").DefaultCellStyle.Alignment = DataGridViewContentAlignment.TopCenter .Columns("Brutto").DefaultCellStyle.Format = "C" @@ -1007,10 +1011,24 @@ Public Class frmKassenbuch Dim LastJWS As String = "" Dim answer = "" If KASSETmp.rksv_aktiv Then - If Not cRKSV.stornoRKSV(KASSETmp, BELEGTmp.BelegDat, BELEGTmp.Steuerschlüssel, BELEGTmp.rksv_BelegId, BELEGTmp.rksv_umsatz, QRQString, LastJWS, answer) Then - MessageBox.Show("Fehler bei der RKSV-Stornierung:" & vbNewLine & vbNewLine & answer, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error) - Exit Sub + + If KASSETmp.rksv_FT_CashboxID IsNot Nothing AndAlso KASSETmp.rksv_FT_CashboxID <> "" AndAlso IsNumeric(KASSETmp.rksv_FT_CashboxID) AndAlso BELEGTmp.FT_ReceiptReference IsNot Nothing Then + Dim client_chilkat As New cFiskaltrustClient_chilkat(KASSETmp.rksv_FT_RestServiceURL, KASSETmp.rksv_FT_CashboxID, KASSETmp.rksv_FT_AccessToken, KASSETmp.rksv_FT_Country) + If Not cRKSV.stornoRKSV_FT(KASSETmp, BELEGTmp, QRQString, LastJWS, answer) Then + MessageBox.Show("Fehler bei der RKSV-FT-Stornierung:" & vbNewLine & vbNewLine & answer, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error) + Exit Sub + End If + + Else + If Not cRKSV.stornoRKSV(KASSETmp, BELEGTmp.BelegDat, BELEGTmp.Steuerschlüssel, BELEGTmp.rksv_BelegId, BELEGTmp.rksv_umsatz, QRQString, LastJWS, answer) Then + MessageBox.Show("Fehler bei der RKSV-Stornierung:" & vbNewLine & vbNewLine & answer, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error) + Exit Sub + End If + End If + + + End If If KASSETmp.rksvDE_aktiv Then Dim PERSONALTmp1 As cPersonal = FMZOLL_SQL.getPersonalById(BELEGTmp.Benutzer) @@ -1075,14 +1093,25 @@ Public Class frmKassenbuch Dim LastJWS As String = "" Dim answer = "" If KASSETmp.rksv_aktiv Then - If Not cRKSV.stornoRKSV(KASSETmp, BELEGTmp.BelegDat, BELEGTmp.Steuerschlüssel, If(BELEGTmp.rksv_BelegIdStorno, BELEGTmp.rksv_BelegId), BELEGTmp.rksv_umsatz, QRQString, LastJWS, answer) Then - 'FEHLER!! - If KASSETmp.rksv_StornoIncreaseBelegCnt Then BELEGTmp.rksv_BelegIdStorno = Nothing - BELEGTmp = cRKSV.STORNO_RUECKGAENGIG(BELEGTmp, grund, KASSETmp.rksv_firma) 'Beleg storno und Kassenbuch Gegenbuchung - MessageBox.Show("Fehler bei der RKSV-Stornierung:" & vbNewLine & vbNewLine & answer, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error) - Exit Sub + + If KASSETmp.rksv_FT_CashboxID IsNot Nothing AndAlso KASSETmp.rksv_FT_CashboxID <> "" AndAlso BELEGTmp.FT_ReceiptReference IsNot Nothing Then + Dim client_chilkat As New cFiskaltrustClient_chilkat(KASSETmp.rksv_FT_RestServiceURL, KASSETmp.rksv_FT_CashboxID, KASSETmp.rksv_FT_AccessToken, KASSETmp.rksv_FT_Country) + If Not cRKSV.stornoRKSV_FT(KASSETmp, BELEGTmp, QRQString, LastJWS, answer) Then + MessageBox.Show("Fehler bei der RKSV-FT-Stornierung:" & vbNewLine & vbNewLine & answer, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error) + Exit Sub + End If + + Else + If Not cRKSV.stornoRKSV(KASSETmp, BELEGTmp.BelegDat, BELEGTmp.Steuerschlüssel, If(BELEGTmp.rksv_BelegIdStorno, BELEGTmp.rksv_BelegId), BELEGTmp.rksv_umsatz, QRQString, LastJWS, answer) Then + 'FEHLER!! + If KASSETmp.rksv_StornoIncreaseBelegCnt Then BELEGTmp.rksv_BelegIdStorno = Nothing + BELEGTmp = cRKSV.STORNO_RUECKGAENGIG(BELEGTmp, grund, KASSETmp.rksv_firma) 'Beleg storno und Kassenbuch Gegenbuchung + MessageBox.Show("Fehler bei der RKSV-Stornierung:" & vbNewLine & vbNewLine & answer, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error) + Exit Sub + End If End If End If + If KASSETmp.rksvDE_aktiv Then If Not cRKSV.stornoRKSV_DE(PERSONALTmp, BELEGTmp, KASSETmp, If(BELEGTmp.rksv_BelegIdStorno, BELEGTmp.rksv_BelegId), BELEGTmp.rksv_BelegId, BELEGTmp.rksv_umsatz, QRQString, LastJWS, False, answer) Then 'FEHLER!! diff --git a/SDL/packages.config b/SDL/packages.config index 463dcfc4..253dd113 100644 --- a/SDL/packages.config +++ b/SDL/packages.config @@ -71,6 +71,7 @@ +