From d1a1f422957cd3011b32746a7f5b1fbdda90f0f1 Mon Sep 17 00:00:00 2001 From: "d.breimaier" Date: Wed, 27 May 2026 18:09:34 +0200 Subject: [PATCH 01/17] Creditsafe, Barverkauf Fiskaltrust, etc. --- SDL/Classes/cFiskaltrustClient.vb | 532 +++++++++++++++++- SDL/Classes/cRKSV.vb | 7 +- SDL/Creditsafe/usrcntlCreditsafe.vb | 4 +- SDL/My Project/AssemblyInfo.vb | 4 +- .../ATLAS/NCTS004/usrCntlATLAS_NCTS004.vb | 4 +- SDL/buchhaltung/frmBU_Mahnlauf.vb | 12 +- SDL/kassenbuch/frmBelegNeu.vb | 29 +- SDL/kassenbuch/frmKassenbuch.vb | 110 ++-- SDL/kunden/usrcntlKundeBearbeitenFull.vb | 11 +- SDL/mdm/usrcntlFremdrechnungen.Designer.vb | 39 +- SDL/mdm/usrcntlFremdrechnungen.vb | 1 + .../Creditsafe/cCreditSafeAPI.vb | 1 - 12 files changed, 681 insertions(+), 73 deletions(-) diff --git a/SDL/Classes/cFiskaltrustClient.vb b/SDL/Classes/cFiskaltrustClient.vb index def3cdde..57fb5bd5 100644 --- a/SDL/Classes/cFiskaltrustClient.vb +++ b/SDL/Classes/cFiskaltrustClient.vb @@ -1,8 +1,7 @@ -Imports System.Net.Http +Imports System.Data.SqlClient +Imports System.Net.Http +Imports System.Reflection Imports System.Text -Imports System.Threading -Imports DocumentFormat.OpenXml.Drawing -Imports DocumentFormat.OpenXml.Wordprocessing Imports Newtonsoft.Json Public Class cFiskaltrustClient @@ -26,7 +25,7 @@ Public Class cFiskaltrustClient ' ================================ Public Async Function SignReceiptAsync(amount As Double, vat As Double, POS As List(Of EABelegPositionen)) As Task(Of String) - Dim payload = BuildPayload(amount, vat, POS) + Dim payload = BuildPayloadReceipt(amount, vat, POS) Dim endpoint = GetEndpoint("payment") Dim requestContent As StringContent @@ -46,6 +45,60 @@ Public Class cFiskaltrustClient Return Await SendAsync(endpoint, payload, requestContent) End Function + + Public Async Function SignNullReceiptAsync() As Task(Of String) + + Dim payload = BuildPayloadNullReceipt() + Dim endpoint = GetEndpoint("payment") + + Dim requestContent As StringContent + + If _country = "AT" Then + ' Plaintext + Dim text As String = If(payload?.ToString(), "") + Dim json As String = JsonConvert.SerializeObject(text) + requestContent = New StringContent(json, Encoding.UTF8, "text/plain") + Else + ' JSON Objekt + + Dim json As String = JsonConvert.SerializeObject(payload) + requestContent = New StringContent(json, Encoding.UTF8, "application/json") + End If + + Return Await SendAsync(endpoint, payload, requestContent) + + End Function + + + Public Async Function Journal(type As String) As Task(Of String) + + + Dim payload = "" + Dim endpoint = GetEndpoint("journal") + + If type > 0 Then + endpoint &= "?type=" & type + End If + + Dim requestContent As StringContent + + If _country = "AT" Then + ' Plaintext + Dim text As String = If(payload?.ToString(), "") + Dim json As String = JsonConvert.SerializeObject(text) + requestContent = New StringContent(json, Encoding.UTF8, "text/plain") + Else + ' JSON Objekt + + Dim json As String = JsonConvert.SerializeObject(payload) + requestContent = New StringContent(json, Encoding.UTF8, "application/json") + End If + + Return Await SendAsync(endpoint, payload, requestContent) + + End Function + + Public Async Function SignReceiptAsync_test() As Task(Of String) Dim LIST = New List(Of EABelegPositionen) @@ -63,7 +116,7 @@ Public Class cFiskaltrustClient p.Anzahl = 1 LIST.Add(p) - Dim payload = BuildPayload(100, 0, LIST) + Dim payload = BuildPayloadReceipt(100, 0, LIST) Dim endpoint = GetEndpoint("payment") Dim requestContent As StringContent @@ -116,7 +169,22 @@ Public Class cFiskaltrustClient End Function ' Optional: Storno Beispiel - Public Async Function CancelReceiptAsync(reference As String) As Task(Of String) + 'reference unique id! + Public Async Function CancelReceiptAsync(reference As String, POS As List(Of EABelegPositionen), amount As Double) As Task(Of String) + + + ' ChargeItems Liste vorbereiten + Dim chargeItems = New List(Of Object) + + For Each p In POS + chargeItems.Add(New With { + .Quantity = p.Anzahl, + .Amount = p.Preis, + .VATRate = 0, + .Description = p.LeistungsBez, + .ftChargeItemCase = 4919338167972134929 + }) + Next Dim payload = New With { .ftCashBoxID = _cashboxId, @@ -124,8 +192,18 @@ Public Class cFiskaltrustClient .cbTerminalID = "T1", .cbReceiptReference = reference, .cbReceiptMoment = DateTime.UtcNow.ToString("o"), - .ftReceiptCase = 4919338172267102210 ' Storno - } + .ftReceiptCase = 4919338172267102210, + .cbChargeItems = chargeItems, + .cbPayItems = New Object() { + New With { + .Quantity = 1.0, + .Amount = amount, + .Description = "Cash", + .ftPayItemCase = 4919338167972134913 + } + } + } + Dim requestContent As StringContent @@ -164,7 +242,10 @@ Public Class cFiskaltrustClient request.Headers.Add("cashboxid", _cashboxId) request.Headers.Add("accesstoken", _accessToken) - request.Content = requestContent + If payload <> "" Then + request.Content = requestContent + End If + Dim response = Await _httpClient.SendAsync(request) Dim result = Await response.Content.ReadAsStringAsync() @@ -210,7 +291,7 @@ Public Class cFiskaltrustClient End Function - Private Function BuildPayload(amount As Double, vat As Double, POS As List(Of EABelegPositionen)) As Object + Private Function BuildPayloadReceipt(amount As Double, vat As Double, POS As List(Of EABelegPositionen)) As Object ' ChargeItems Liste vorbereiten Dim chargeItems = New List(Of Object) @@ -248,6 +329,24 @@ Public Class cFiskaltrustClient End Function + Private Function BuildPayloadNullReceipt() As Object + + Dim payload = New With { + .ftCashBoxID = _cashboxId, + .ftPosSystemId = "POS-1", + .cbTerminalID = "T1", + .cbReceiptReference = "ZeroReceiptAfterFailure", + .cbReceiptMoment = DateTime.UtcNow.ToString("o"), + .cbChargeItems = New Object() {}, + .cbPayItems = New Object() {}, + .ftReceiptCase = 4919338172267102210 + } + + + Return payload + + End Function + Private Function GetEndpoint(type As String) As String @@ -274,6 +373,17 @@ Public Class cFiskaltrustClient Throw New Exception("Unsupported country") End Select + ElseIf type = "journal" Then + + Select Case _country + Case "DE" + Return "/json/v0/Journal" + Case "AT" + Return "/json/Journal" + Case Else + Throw New Exception("Unsupported country") + End Select + End If @@ -282,8 +392,408 @@ Public Class cFiskaltrustClient End Function + Public Function saveRKSV_FT(ByRef result_zahlung As String, ByRef QR_CodeString As String) As Boolean + + If result_zahlung <> "" Then + Dim json As New Chilkat.JsonObject + Dim success As Boolean = json.Load(result_zahlung) + If (success <> True) Then + Debug.WriteLine(json.LastErrorText) + Return False + End If + + Dim ftSig As New cFiskaltrustSignatures() + + Dim ftReceiptMoment As New Chilkat.CkDateTime + Dim dt As New Chilkat.DtObj + Dim getAsLocal As Boolean = False + + Dim ftID As Integer = -1 + + success = json.DateOf("ftReceiptMoment", ftReceiptMoment) + Debug.WriteLine(ftReceiptMoment.GetAsTimestamp(getAsLocal)) + + With ftSig + + .ftCashBoxID = json.StringOf("ftCashBoxID") + .ftQueueID = json.StringOf("ftQueueID") + .ftQueueItemID = json.StringOf("ftQueueItemID") + .ftQueueRow = json.IntOf("ftQueueRow") + .cbTerminalID = json.StringOf("cbTerminalID") + .cbReceiptReference = json.StringOf("cbReceiptReference") + .ftCashBoxIdentification = json.StringOf("ftCashBoxIdentification") + .ftReceiptIdentification = json.StringOf("ftReceiptIdentification") + .ftReceiptMoment = ftReceiptMoment.GetAsTimestamp(getAsLocal) + .ftState = json.StringOf("ftState") + ftID = .SAVE() + + End With + + + Dim num As Integer = json.SizeOfArray("ftSignatures") + If num = 0 Then + Return False + End If + + Dim Signatures As Chilkat.JsonArray = json.ArrayOf("ftSignatures") + If (json.LastMethodSuccess = False) Then + Return False + End If + + Dim numSignatures As Integer = Signatures.Size + + For i = 0 To numSignatures + + While i < numSignatures + + Dim SignObj As Chilkat.JsonObject = Signatures.ObjectAt(i) + Dim ftSigPos As New cFiskaltrustSignaturPositions() + + With ftSigPos + .ftSignatures = ftSig.ft_id + .ftData = SignObj.StringOf("Data") + .ftSignatureFormat = SignObj.StringOf("ftSignatureFormat") + .ftSignatureType = SignObj.StringOf("ftSignatureType") + .SAVE() + If IsNumeric(.ftSignatureType) AndAlso CInt(.ftSignatureType) = 3 Then + QR_CodeString = .ftData + End If + + End With + + i = i + 1 + End While + Next + + + + + + End If + + + End Function + + + Public Function exportJournal(ByRef result_Journal As String) As Boolean + + If result_Journal <> "" Then + Dim jsonArr As New Chilkat.JsonArray + Dim success As Boolean = jsonArr.Load(result_Journal) + If (success <> True) Then + Debug.WriteLine(jsonArr.LastErrorText) + Return False + End If + + + Dim dt As New DataTable + + dt.Columns.Add("ftReceiptJournalId", GetType(String)) + dt.Columns.Add("ftReceiptMoment", GetType(String)) + dt.Columns.Add("ftReceiptNumber", GetType(String)) + dt.Columns.Add("ftReceiptTotal", GetType(String)) + dt.Columns.Add("ftQueueId", GetType(String)) + dt.Columns.Add("ftReceiptHash", GetType(String)) + dt.Columns.Add("ftQueueItemId", GetType(String)) + dt.Columns.Add("TimeStamp", GetType(String)) + + Dim i = 0 + Dim num As Integer = jsonArr.Size + If num = 0 Then + Return False + End If + + Dim tmstmp As New Chilkat.CkDateTime + Dim getAsLocal As Boolean = False + + + While i < num + + Dim SignObj As Chilkat.JsonObject = jsonArr.ObjectAt(i) + Dim R As DataRow = dt.NewRow + + With SignObj + + R("ftReceiptJournalId") = .StringOf("ftReceiptJournalId") + R("ftReceiptMoment") = .StringOf("ftReceiptMoment") + R("ftReceiptNumber") = .IntOf("ftReceiptNumber") + R("ftReceiptTotal") = .StringOf("ftReceiptTotal") + R("ftQueueId") = .StringOf("ftQueueId") + R("ftQueueItemId") = .StringOf("ftQueueItemId") + R("ftReceiptHash") = .StringOf("ftReceiptHash") + R("TimeStamp") = tmstmp.GetAsTimestamp(getAsLocal) + + End With + + dt.Rows.Add(R) + + i = i + 1 + End While + + If dt.Rows.Count > 0 Then + + Dim Path = VERAG_PROG_ALLGEMEIN.cProgramFunctions.genExcelFromDT_NEW(dt) + + End If + + + End If + + + + End Function + + Private Sub Log(message As String) Console.WriteLine(message) End Sub +End Class + +Public Class cFiskaltrustSignatures + + Property ft_id As Integer + Property ftQueueID As Object = Nothing + Property ftQueueItemID As Object = Nothing + Property ftQueueRow As Object = Nothing + Property ftCashBoxIdentification As Object = Nothing + Property ftReceiptIdentification As Object = Nothing + Property ftReceiptMoment As Object = Nothing + Property ftState As Object = Nothing + Property ftCashBoxID As Object = Nothing + Property cbTerminalID As Object = Nothing + Property cbReceiptReference As Object = Nothing + + + Public hasEntry = False + + Dim SQL As New VERAG_PROG_ALLGEMEIN.SQL + + Sub New() + + End Sub + + Sub New(ft_id) + Me.ft_id = ft_id + LOAD() + End Sub + Function getParameterList() As List(Of VERAG_PROG_ALLGEMEIN.SQLVariable) + Dim list As New List(Of VERAG_PROG_ALLGEMEIN.SQLVariable) + list.Add(New VERAG_PROG_ALLGEMEIN.SQLVariable("ft_id", ft_id,, True)) + list.Add(New VERAG_PROG_ALLGEMEIN.SQLVariable("ftQueueID", ftQueueID)) + list.Add(New VERAG_PROG_ALLGEMEIN.SQLVariable("ftQueueItemID", ftQueueItemID)) + list.Add(New VERAG_PROG_ALLGEMEIN.SQLVariable("ftQueueRow", ftQueueRow)) + list.Add(New VERAG_PROG_ALLGEMEIN.SQLVariable("ftCashBoxIdentification", ftCashBoxIdentification)) + list.Add(New VERAG_PROG_ALLGEMEIN.SQLVariable("ftReceiptIdentification", ftReceiptIdentification)) + list.Add(New VERAG_PROG_ALLGEMEIN.SQLVariable("ftReceiptMoment", ftReceiptMoment)) + list.Add(New VERAG_PROG_ALLGEMEIN.SQLVariable("ftState", ftState)) + list.Add(New VERAG_PROG_ALLGEMEIN.SQLVariable("ftCashBoxID", ftCashBoxID)) + list.Add(New VERAG_PROG_ALLGEMEIN.SQLVariable("cbTerminalID", cbTerminalID)) + list.Add(New VERAG_PROG_ALLGEMEIN.SQLVariable("cbReceiptReference", cbReceiptReference)) + + Return list + End Function + + + + Public Function SAVE() As Boolean + Dim list As List(Of VERAG_PROG_ALLGEMEIN.SQLVariable) = getParameterList() + Dim sqlstr = " BEGIN " & getInsertCmd() & " END " '& + '" commit tran " + + Dim id = SQL.doSQLVarListID(ft_id, sqlstr, "FMZOLL", , list) + Me.ft_id = id + Return id > 0 + + End Function + + Public Sub LOAD() + Try + hasEntry = False + Using conn As SqlConnection = SQL.GetNewOpenConnectionFMZOLL() + Using cmd As New SqlCommand("SELECT * FROM tblRKSV_FT WHERE ft_id=@ft_id ", conn) + cmd.Parameters.AddWithValue("@ft_id", ft_id) + Dim dr = cmd.ExecuteReader() + If dr.Read Then + For Each li In getParameterList() + Dim propInfo As PropertyInfo = Me.GetType.GetProperty(li.Scalarvariable) + + If dr.Item(li.Text) Is DBNull.Value Then + propInfo.SetValue(Me, Nothing) + Else + propInfo.SetValue(Me, dr.Item(li.Text)) + End If + + Next + hasEntry = True + End If + dr.Close() + End Using + End Using + Catch ex As Exception + VERAG_PROG_ALLGEMEIN.cErrorHandler.ERR(ex.Message, ex.StackTrace, System.Reflection.MethodInfo.GetCurrentMethod.Name) + End Try + End Sub + + + + 'Public Function getUpdateCmd() As String + ' Try + ' Dim list As List(Of VERAG_PROG_ALLGEMEIN.SQLVariable) = getParameterList() + + ' Dim str As String = "" + ' For Each i In list + ' If Not i.isPrimaryParam Then + ' str &= "[" & i.Text & "] = @" & i.Scalarvariable & "," '.Replace("-", "").Replace(" ", "") & "," + ' End If + ' Next + ' str = str.Substring(0, str.Length - 1) 'wg. ',' + ' Return (" UPDATE [tblTABLE] SET " & str & " WHERE _BASE_id=@_BASE_id ") + + ' Catch ex As Exception + ' VERAG_PROG_ALLGEMEIN.cErrorHandler.ERR(ex.Message, ex.StackTrace, System.Reflection.MethodInfo.GetCurrentMethod.Name) + ' End Try + ' Return "" + 'End Function + + + Public Function getInsertCmd() As String + Try + Dim list As List(Of VERAG_PROG_ALLGEMEIN.SQLVariable) = getParameterList() + Dim str As String = "" + Dim values As String = "" + For Each i In list + If Not i.isPrimaryParam Then + str &= "[" & i.Text & "]," + values &= "@" & i.Scalarvariable & "," '.Replace("-", "").Replace(" ", "") & "," + End If + Next + str = str.Substring(0, str.Length - 1) 'wg. ',' + values = values.Substring(0, values.Length - 1) 'wg. ',' + Return (" INSERT INTO tblRKSV_FT (" & str & ") VALUES(" & values & ") ") + Catch ex As Exception + VERAG_PROG_ALLGEMEIN.cErrorHandler.ERR(ex.Message, ex.StackTrace, System.Reflection.MethodInfo.GetCurrentMethod.Name) + End Try + Return "" + End Function + + + + +End Class + +Public Class cFiskaltrustSignaturPositions + + Property ftSignatures As Integer + Property ftSignatureFormat As Object = Nothing + Property ftSignatureType As Object = Nothing + Property ftData As Object = Nothing + + + Public hasEntry = False + + Dim SQL As New VERAG_PROG_ALLGEMEIN.SQL + + + Sub New() + + End Sub + + Sub New(ftSignatures, ftSignatureType) + Me.ftSignatures = ftSignatures + Me.ftSignatureType = ftSignatureType + LOAD() + End Sub + Function getParameterList() As List(Of VERAG_PROG_ALLGEMEIN.SQLVariable) + Dim list As New List(Of VERAG_PROG_ALLGEMEIN.SQLVariable) + list.Add(New VERAG_PROG_ALLGEMEIN.SQLVariable("ftSignatures", ftSignatures)) + list.Add(New VERAG_PROG_ALLGEMEIN.SQLVariable("ftSignatureFormat", ftSignatureFormat)) + list.Add(New VERAG_PROG_ALLGEMEIN.SQLVariable("ftSignatureType", ftSignatureType)) + list.Add(New VERAG_PROG_ALLGEMEIN.SQLVariable("ftData", ftData)) + + Return list + End Function + + + + Public Function SAVE() As Boolean + Dim list As List(Of VERAG_PROG_ALLGEMEIN.SQLVariable) = getParameterList() + + Dim sqlstr = " BEGIN " & getInsertCmd() & " END " '& + '" commit tran " + + Return SQL.doSQLVarList(sqlstr, "FMZOLL", , list) + End Function + + Public Sub LOAD() + Try + hasEntry = False + Using conn As SqlConnection = SQL.GetNewOpenConnectionFMZOLL() + Using cmd As New SqlCommand("SELECT * FROM tblRKSV_FTSignatures WHERE ftSignatures=@ftSignatures AND ftSignatureType = @ftSignatureType ", conn) + cmd.Parameters.AddWithValue("@ftSignatures", ftSignatures) + cmd.Parameters.AddWithValue("@ftSignatureType", ftSignatureType) + Dim dr = cmd.ExecuteReader() + If dr.Read Then + For Each li In getParameterList() + Dim propInfo As PropertyInfo = Me.GetType.GetProperty(li.Scalarvariable) + + If dr.Item(li.Text) Is DBNull.Value Then + propInfo.SetValue(Me, Nothing) + Else + propInfo.SetValue(Me, dr.Item(li.Text)) + End If + + Next + hasEntry = True + End If + dr.Close() + End Using + End Using + Catch ex As Exception + VERAG_PROG_ALLGEMEIN.cErrorHandler.ERR(ex.Message, ex.StackTrace, System.Reflection.MethodInfo.GetCurrentMethod.Name) + End Try + End Sub + + + + 'Public Function getUpdateCmd() As String + ' Try + ' Dim list As List(Of VERAG_PROG_ALLGEMEIN.SQLVariable) = getParameterList() + + ' Dim str As String = "" + ' For Each i In list + ' If Not i.isPrimaryParam Then + ' str &= "[" & i.Text & "] = @" & i.Scalarvariable & "," '.Replace("-", "").Replace(" ", "") & "," + ' End If + ' Next + ' str = str.Substring(0, str.Length - 1) 'wg. ',' + ' Return (" UPDATE [tblTABLE] SET " & str & " WHERE _BASE_id=@_BASE_id ") + + ' Catch ex As Exception + ' VERAG_PROG_ALLGEMEIN.cErrorHandler.ERR(ex.Message, ex.StackTrace, System.Reflection.MethodInfo.GetCurrentMethod.Name) + ' End Try + ' Return "" + 'End Function + + + Public Function getInsertCmd() As String + Try + Dim list As List(Of VERAG_PROG_ALLGEMEIN.SQLVariable) = getParameterList() + Dim str As String = "" + Dim values As String = "" + For Each i In list + If Not i.isPrimaryParam Then + str &= "[" & i.Text & "]," + values &= "@" & i.Scalarvariable & "," '.Replace("-", "").Replace(" ", "") & "," + End If + Next + str = str.Substring(0, str.Length - 1) 'wg. ',' + values = values.Substring(0, values.Length - 1) 'wg. ',' + Return (" INSERT INTO tblRKSV_FTSignatures (" & str & ") VALUES(" & values & ") ") + Catch ex As Exception + VERAG_PROG_ALLGEMEIN.cErrorHandler.ERR(ex.Message, ex.StackTrace, System.Reflection.MethodInfo.GetCurrentMethod.Name) + End Try + Return "" + End Function + End Class \ No newline at end of file diff --git a/SDL/Classes/cRKSV.vb b/SDL/Classes/cRKSV.vb index c2901f97..3434ec76 100644 --- a/SDL/Classes/cRKSV.vb +++ b/SDL/Classes/cRKSV.vb @@ -92,7 +92,7 @@ Public Class cRKSV End Function - Shared Function insertRKSVFiskaltrust(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)) As Boolean + Shared Async 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), QR_CodeString As String, LastJWS As String) As Task(Of Boolean) Try @@ -126,10 +126,9 @@ Public Class cRKSV Dim StandUmsatzzaehler = umsatzZaehler 'KASSE.rksv_Umsatzzaehler Dim countryID As String - Dim client As New cFiskaltrustClient(kasse.rksv_FT_RestServiceURL, kasse.rksv_FT_CashboxID, kasse.rksv_FT_AccessToken, kasse.rksv_FT_Country) - - Dim result = client.SignReceiptAsync(summeBRUTTO, steuersatz, POS) + Dim result = Await client.SignReceiptAsync(summeBRUTTO, steuersatz, POS) + client.saveRKSV_FT(result, QR_CodeString) Catch ex As Exception diff --git a/SDL/Creditsafe/usrcntlCreditsafe.vb b/SDL/Creditsafe/usrcntlCreditsafe.vb index 163c6318..032cb70b 100644 --- a/SDL/Creditsafe/usrcntlCreditsafe.vb +++ b/SDL/Creditsafe/usrcntlCreditsafe.vb @@ -189,10 +189,12 @@ Public Class usrcntlCreditsafe Dim o As Form = Me.FindForm ' If Me.Parent.GetType() Is GetType(Form) Then o = Me.FindForm + Dim Land As String = cboLand._value + For Each row As DataGridViewRow In dgvCreditsafe.SelectedRows comp = New Company(IIf(IsDBNull(row.Cells("name").Value), "", row.Cells("name").Value), IIf(IsDBNull(row.Cells("vatNo").Value), "", row.Cells("vatNo").Value), - (cboLand._value), + (Land), IIf(IsDBNull(row.Cells("safeNo").Value), "", row.Cells("safeNo").Value), IIf(IsDBNull(row.Cells("regNo").Value), "", row.Cells("regNo").Value), IIf(IsDBNull(row.Cells("street").Value), "", row.Cells("street").Value), diff --git a/SDL/My Project/AssemblyInfo.vb b/SDL/My Project/AssemblyInfo.vb index 1ba15cbc..aac6d6d4 100644 --- a/SDL/My Project/AssemblyInfo.vb +++ b/SDL/My Project/AssemblyInfo.vb @@ -31,5 +31,5 @@ Imports System.Runtime.InteropServices ' übernehmen, indem Sie "*" eingeben: ' - - + + diff --git a/SDL/ZOLLSYSTEM/DAKOSY/ATLAS/NCTS004/usrCntlATLAS_NCTS004.vb b/SDL/ZOLLSYSTEM/DAKOSY/ATLAS/NCTS004/usrCntlATLAS_NCTS004.vb index 70d42757..070f7634 100644 --- a/SDL/ZOLLSYSTEM/DAKOSY/ATLAS/NCTS004/usrCntlATLAS_NCTS004.vb +++ b/SDL/ZOLLSYSTEM/DAKOSY/ATLAS/NCTS004/usrCntlATLAS_NCTS004.vb @@ -596,7 +596,7 @@ Public Class usrCntlATLAS_NCTS004 If Not ncts_OUT.SAVE_ALL() Then Exit Sub Dim saveFile = "" - If cDakosyNCTSOut004.generateVersandanmeldungNCTSDE_004(ncts_OUT, saveFile, cboDakosyAction._value, Application.StartupPath) Then + If cDakosyNCTSOut004.generateVersandanmeldungNCTSDE_004(ncts_OUT, saveFile, cboDakosyAction._value, Application.StartupPath, cDy_ART) Then If saveFile <> "" Then If cDakosyFunftions.send_Data_To_Dakosy_FTP(saveFile, BezugsNr, DY_ANM.dy_Id, Me.FIRMA_DY) Then DAKOSY_Worker.cDakosy_Statusmeldungen.InsertStatusMeldung(DY_ANM, DAKOSY_Worker.cDY_Statusliste.S_03) @@ -697,7 +697,7 @@ Public Class usrCntlATLAS_NCTS004 If vbYes = MsgBox("Erfolgreich erstellt! Soll(en) die Ausfuhr-Gestellung(en) abgeschickt werden?", vbYesNoCancel) Then Dim saveFile = "" - If cDakosyNCTSOut004.generateVersandanmeldungNCTSDE_004(NCTS_OUT, saveFile, cboDakosyAction._value, Application.StartupPath) Then + If cDakosyNCTSOut004.generateVersandanmeldungNCTSDE_004(NCTS_OUT, saveFile, cboDakosyAction._value, Application.StartupPath, cDy_ART) Then If saveFile <> "" Then If cDakosyFunftions.send_Data_To_Dakosy_FTP(saveFile, BezugsNr, DY_ANM.dy_Id, Me.FIRMA_DY) Then DAKOSY_Worker.cDakosy_Statusmeldungen.InsertStatusMeldung(DY_ANM, DAKOSY_Worker.cDY_Statusliste.S_03) diff --git a/SDL/buchhaltung/frmBU_Mahnlauf.vb b/SDL/buchhaltung/frmBU_Mahnlauf.vb index b0567c1e..558247f5 100644 --- a/SDL/buchhaltung/frmBU_Mahnlauf.vb +++ b/SDL/buchhaltung/frmBU_Mahnlauf.vb @@ -627,9 +627,6 @@ Public Class frmBU_Mahnlauf End If - - - Dim MahnTEXT_VOR = "" Dim MahnTEXT_NACH = "" Dim MAHNTEXT As String = "Zahlungserinnerung" @@ -699,7 +696,14 @@ Public Class frmBU_Mahnlauf Dim Verzugszinsen As Double = 0 Dim Verzugtage = DateDiff(DateInterval.Day, CDate(rpt.Fields.Item("Faelligkeit").Value), Now) If Verzugtage > 0 And Ausstand > 0 Then - If Firma_ID = 19 And MAHNSTUFE > 1 Then 'erst ab Mahnstufe 2 sollen bei MDM Verzugszinsen berechnet werden. + + If Firma_ID = 19 Then + If MAHNSTUFE > 1 Then 'erst ab Mahnstufe 2 sollen bei MDM Verzugszinsen berechnet werden. + Verzugszinsen = ZinssatzVerzugszinsen / 365 * Ausstand * Verzugtage + VerzugszinsenGes += Verzugszinsen + End If + + Else Verzugszinsen = ZinssatzVerzugszinsen / 365 * Ausstand * Verzugtage VerzugszinsenGes += Verzugszinsen End If diff --git a/SDL/kassenbuch/frmBelegNeu.vb b/SDL/kassenbuch/frmBelegNeu.vb index d4013fb7..34bee61e 100644 --- a/SDL/kassenbuch/frmBelegNeu.vb +++ b/SDL/kassenbuch/frmBelegNeu.vb @@ -1,5 +1,6 @@ Imports System.Drawing.Printing Imports System.Globalization +Imports Microsoft.Office.Core Imports Microsoft.Win32 Imports SDL.RKSVServer Imports VERAG_PROG_ALLGEMEIN @@ -1578,7 +1579,7 @@ Public Class frmBelegNeu If cbxBelegOffnen.Checked AndAlso BELEG.EC_daid > 0 Then openZahlungsbeleg(BELEG.EC_daid) End If - Me.Close() + Me.Close() End If Case "2" : If cRKSV.printKundenBelegLG(BELEG, KASSE, PERSONAL, cboPrinter.SelectedItem.ToString, "LG") Then If cbxBelegOffnen.Checked AndAlso BELEG.EC_daid > 0 Then @@ -1703,7 +1704,8 @@ Public Class frmBelegNeu Dim verarbeitet As Boolean = False If KASSE.rksv_FT_RestServiceURL <> "" Then - verarbeitet = cRKSV.insertRKSVFiskaltrust(KASSE, KASSE.rksv_CompanyGUID, KASSE.rksv_Umsatzzaehler, BELEG.BelegDat, BELEG.Steuerschlüssel, RKSV_Beleg_Id, If(EA = "E", summeBRUTTO, summeBRUTTO * -1), TESTBUCHUNG, BELEG.POS) + 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) + verarbeitet = result.Result Else verarbeitet = cRKSV.insertRKSV(KASSE, KASSE.rksv_CompanyGUID, KASSE.rksv_Umsatzzaehler, BELEG.BelegDat, BELEG.Steuerschlüssel, RKSV_Beleg_Id, If(EA = "E", summeBRUTTO, summeBRUTTO * -1), QR_CodeString, LastJWS, TESTBUCHUNG, answer) 'Digitale Signierung und Erfassung in die RKSV-Datenbank mittels ITG-Service End If @@ -1720,7 +1722,7 @@ Public Class frmBelegNeu End If KASSE.SET_LAST_QR_JWS(LastJWS, QR_CodeString) - End If + End If 'If Not cRKSV_DE.insertRKSV_DE(PERSONAL, BELEG, KASSE, RKSV_Beleg_Id, 0, QR_CodeString, LastJWS, TESTBUCHUNG, answer) Then 'Digitale Signierung und Erfassung in die RKSV-Datenbank mittels ITG-Service @@ -1887,17 +1889,22 @@ Public Class frmBelegNeu Private Async Function Button4_ClickAsync(sender As Object, e As EventArgs) As Task Handles Button4.Click Try + Dim QR_CodeString As String = "" + Dim LastJWS As String = "" + KASSE.LOAD(cboKassen._value) If KASSE.rksv_FT_RestServiceURL <> "" Then Dim client As New cFiskaltrustClient(KASSE.rksv_FT_RestServiceURL, KASSE.rksv_FT_CashboxID, KASSE.rksv_FT_AccessToken, KASSE.rksv_FT_Country) - Dim result As String = Await client.Echo() - Dim result2 As String = Await client.SignReceiptAsync_test() - MsgBox(result) - MsgBox(result2) + Dim result_verbindungstest As String = Await client.Echo() + Dim result_zahlung As String = Await client.SignReceiptAsync_test() + + client.saveRKSV_FT(result_zahlung, QR_CodeString) + + MsgBox(result_verbindungstest) Else - MsgBox("keine Rest-Service URL hinterlegt!") + MsgBox("keine Rest-Service URL hinterlegt!") End If @@ -1908,6 +1915,12 @@ Public Class frmBelegNeu End Function + Private Sub cboKassen_SelectedIndexChanged(sender As Object, e As EventArgs) Handles cboKassen.SelectedIndexChanged + + KASSE.LOAD(cboKassen._value) + Button4.Visible = KASSE.rksv_FT_RestServiceURL <> "" + + End Sub End Class Class TestRKSVW diff --git a/SDL/kassenbuch/frmKassenbuch.vb b/SDL/kassenbuch/frmKassenbuch.vb index 10835f01..b771172a 100644 --- a/SDL/kassenbuch/frmKassenbuch.vb +++ b/SDL/kassenbuch/frmKassenbuch.vb @@ -64,7 +64,14 @@ Public Class frmKassenbuch KennwortTime = Now initDgv() 'nur set init() - cboKassen.fillWithSQL("SELECT [rksv_id], [rksv_bez] FROM [tblRKSV_Kassen] WHERE ([rksv_aktiv]=1 OR [rksvde_aktiv]=1 or rksv_id=4) ", False, "FMZOLL") ' [rksv_firma]='" & VERAG_PROG_ALLGEMEIN.cAllgemein.FIRMA & "' AND + + If VERAG_PROG_ALLGEMEIN.cAllgemein.TESTSYSTEM Then + cboKassen.fillWithSQL("SELECT [rksv_id], [rksv_bez] FROM [tblRKSV_Kassen] ", False, "FMZOLL") + Else + cboKassen.fillWithSQL("SELECT [rksv_id], [rksv_bez] FROM [tblRKSV_Kassen] WHERE ([rksv_aktiv]=1 OR [rksvde_aktiv]=1 or rksv_id=4) ", False, "FMZOLL") + End If + + ' [rksv_firma]='" & VERAG_PROG_ALLGEMEIN.cAllgemein.FIRMA & "' AND If Not VERAG_PROG_ALLGEMEIN.cBerechtignunen.CHECK_BERECHTIGUNG_bool("KASSE", Me) Then btnBelegKunde.Enabled = False @@ -742,42 +749,70 @@ Public Class frmKassenbuch - Private Sub Button4_Click(sender As Object, e As EventArgs) Handles Button4.Click - MsgBox("Leider noch nicht verfügbar") - Exit Sub - Dim client As RKSVWcfClient = New RKSVWcfClient() - client.Endpoint.Address = New System.ServiceModel.EndpointAddress("http://192.168.0.106:8733/Design_Time_Addresses/RKSVCompleteServer/Service1/?singleWsdl") - client.Open() - ' svcRKSV.DBUserCredentials m_credentials = new svcRKSV.DBUserCredentials(); - Dim credentials As New SDL.RKSVServer.DBUserCredentials + Private Async Function Button4_ClickAsync(sender As Object, e As EventArgs) As Task Handles Button4.Click - credentials.Database = "RKSVWcfDB" - credentials.Server = "AVISO\SQLEXPRESS" - Select Case cboKassen._value - Case "VERAG-SUB-KASSE-ZOLL" - credentials.Username = "Admin" - credentials.Password = "verag#2" - credentials.CashboxID = "VERAG-SUB-KASSE-ZOLL" - credentials.CompanyGUID = "9119d9ae-f549-4a0f-a50f-0500ec7ca059" + Dim KASSE As New cRKSV_Kasse(cboKassen._value) 'Laden der Kasse anhand der Auswahlbox - Dim certificate = "" - Dim certificateChain = "" - Dim exportResult = "" - cRKSV.getDEP(certificate, exportResult) + If KASSE.rksv_FT_RestServiceURL <> "" Then + Dim client_FT As New cFiskaltrustClient(KASSE.rksv_FT_RestServiceURL, KASSE.rksv_FT_CashboxID, KASSE.rksv_FT_AccessToken, KASSE.rksv_FT_Country) + + 'hier noch eine Auwahlmöglichkeit bauen! + + Dim Journalid = 2 'ReceiptJournal + '4919338167972134914 -> DSFinV-K export + '4919338167972134915 -> TAR file export + '2 -> ReceiptJournal + + Dim result = Await client_FT.Journal(Journalid) + If result <> "" Then + client_FT.exportJournal(result) + End If + Else - 'If (client.ExportJWS()) Then - ' Else - 'MessageBox.Show(answer, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error) - ' End If - Case "" - MsgBox("Keine Kasse gewählt!") - Exit Sub - End Select + MsgBox("Leider noch nicht verfügbar") - End Sub + 'Dim client As RKSVWcfClient = New RKSVWcfClient() + 'client.Endpoint.Address = New System.ServiceModel.EndpointAddress("http://192.168.0.106:8733/Design_Time_Addresses/RKSVCompleteServer/Service1/?singleWsdl") + 'client.Open() + '' svcRKSV.DBUserCredentials m_credentials = new svcRKSV.DBUserCredentials(); + 'Dim credentials As New SDL.RKSVServer.DBUserCredentials + + 'credentials.Database = "RKSVWcfDB" + 'credentials.Server = "AVISO\SQLEXPRESS" + + 'Select Case cboKassen._value + ' Case "VERAG-SUB-KASSE-ZOLL" + ' credentials.Username = "Admin" + ' credentials.Password = "verag#2" + ' credentials.CashboxID = "VERAG-SUB-KASSE-ZOLL" + ' credentials.CompanyGUID = "9119d9ae-f549-4a0f-a50f-0500ec7ca059" + + ' Dim certificate = "" + ' Dim certificateChain = "" + ' Dim exportResult = "" + ' cRKSV.getDEP(certificate, exportResult) + + + + ' 'If (client.ExportJWS()) Then + ' ' Else + ' 'MessageBox.Show(answer, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error) + ' ' End If + ' Case "" + ' MsgBox("Keine Kasse gewählt!") + + 'End Select + + + End If + + + + + End Function Private Sub Button5_Click(sender As Object, e As EventArgs) Handles Button5.Click @@ -1103,15 +1138,26 @@ Public Class frmKassenbuch End If End Sub - Private Sub Button8_Click(sender As Object, e As EventArgs) Handles Button8.Click + Private Async Sub Button8_Click(sender As Object, e As EventArgs) Handles Button8.Click Label18.ForeColor = Color.Black If Not IsNumeric(cboKassen._value) Then Label18.ForeColor = Color.Red Exit Sub End If + Dim KASSE As New cRKSV_Kasse(cboKassen._value) 'Laden der Kasse anhand der Auswahlbox - cRKSV.printNULLBeleg(KASSE, PERSONAL, True, KASSE.rksv_firma) + + If KASSE.rksv_FT_RestServiceURL <> "" Then + Dim client As New cFiskaltrustClient(KASSE.rksv_FT_RestServiceURL, KASSE.rksv_FT_CashboxID, KASSE.rksv_FT_AccessToken, KASSE.rksv_FT_Country) + Dim result = Await client.SignNullReceiptAsync() + Dim QR_CodeString As String = "" + client.saveRKSV_FT(result, QR_CodeString) + Else + cRKSV.printNULLBeleg(KASSE, PERSONAL, True, KASSE.rksv_firma) + + End If + ' End If End Sub diff --git a/SDL/kunden/usrcntlKundeBearbeitenFull.vb b/SDL/kunden/usrcntlKundeBearbeitenFull.vb index 43fecac1..deae2e0e 100644 --- a/SDL/kunden/usrcntlKundeBearbeitenFull.vb +++ b/SDL/kunden/usrcntlKundeBearbeitenFull.vb @@ -1315,7 +1315,7 @@ Public Class usrcntlKundeBearbeitenFull Case "4001000-4099999" : cbxFiBu.Checked = True : cboFirma.changeItem("26") : cboFiliale.changeItem("7002") Case "728000-799999" : cbxFiBu.Checked = True : cboFirma.changeItem("1") : cboFiliale.changeItem("4803") Case "30000-49999" : cbxFiBu.Checked = True : cboFirma.changeItem("11") : cboFiliale.changeItem("4803") - Case "500000-599999" : cbxFiBu.Checked = True : cboFirma.changeItem("1") : cboFiliale.changeItem("4803") + Case "500000-599999" : cbxFiBu.Checked = True : cboFirma.changeItem("11") : cboFiliale.changeItem("4803") Case "900000-999999" : cbxFiBu.Checked = False : cboFirma.changeItem("1") : cboFiliale.changeItem("4803") Case "800000-899999" : cbxFiBu.Checked = False : cboFirma.changeItem("1") : cboFiliale.changeItem("4803") Case "9900000-9999999" : cbxFiBu.Checked = False : cboFirma.changeItem("17") : cboFiliale.changeItem("5801") @@ -1666,11 +1666,18 @@ Public Class usrcntlKundeBearbeitenFull txtTel.Text = f.UsrcntlCreditsafe1.comp.phoneNo If f.UsrcntlCreditsafe1.comp.country IsNot Nothing Then - cbxLandKz.changeItem(f.UsrcntlCreditsafe1.comp.country.Substring(0, 1)) + cbxLandKz.changeItem(f.UsrcntlCreditsafe1.comp.country.Substring(0, 2)) + If cbxLandKz._value = "" Then + cbxLandKz.changeItem(f.UsrcntlCreditsafe1.comp.country.Substring(0, 1)) + End If + End If + + If f.UsrcntlCreditsafe1.comp.vatNo <> "" Then + cboUSt_UstIdNrLand.changeItem(f.UsrcntlCreditsafe1.comp.vatNo.Substring(0, 2)) If f.UsrcntlCreditsafe1.comp.country <> "" Then diff --git a/SDL/mdm/usrcntlFremdrechnungen.Designer.vb b/SDL/mdm/usrcntlFremdrechnungen.Designer.vb index ea8caa71..3ce1c404 100644 --- a/SDL/mdm/usrcntlFremdrechnungen.Designer.vb +++ b/SDL/mdm/usrcntlFremdrechnungen.Designer.vb @@ -23,8 +23,8 @@ Partial Class usrcntlFremdrechnungen Private Sub InitializeComponent() Me.components = New System.ComponentModel.Container() - Dim DataGridViewCellStyle5 As System.Windows.Forms.DataGridViewCellStyle = New System.Windows.Forms.DataGridViewCellStyle() - Dim DataGridViewCellStyle6 As System.Windows.Forms.DataGridViewCellStyle = New System.Windows.Forms.DataGridViewCellStyle() + Dim DataGridViewCellStyle1 As System.Windows.Forms.DataGridViewCellStyle = New System.Windows.Forms.DataGridViewCellStyle() + Dim DataGridViewCellStyle2 As System.Windows.Forms.DataGridViewCellStyle = New System.Windows.Forms.DataGridViewCellStyle() Me.PDFHochladenToolStripMenuItem = New System.Windows.Forms.ToolStripMenuItem() Me.FlowLayoutPanel = New System.Windows.Forms.FlowLayoutPanel() Me.btnSDL_Alle = New System.Windows.Forms.Button() @@ -72,6 +72,8 @@ Partial Class usrcntlFremdrechnungen Me.dgvLFRechnung = New VERAG_PROG_ALLGEMEIN.MyDatagridview(Me.components) Me.dgvDetails = New VERAG_PROG_ALLGEMEIN.MyDatagridview(Me.components) Me.Panel4 = New System.Windows.Forms.Panel() + Me.Label10 = New System.Windows.Forms.Label() + Me.lblmissingPDFs = New System.Windows.Forms.Label() Me.FlowLayoutPanel.SuspendLayout() Me.ContextMenuStrip1.SuspendLayout() Me.Panel1.SuspendLayout() @@ -300,6 +302,8 @@ Partial Class usrcntlFremdrechnungen Me.Panel1.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink Me.Panel1.BackColor = System.Drawing.SystemColors.ControlLightLight Me.Panel1.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle + Me.Panel1.Controls.Add(Me.lblmissingPDFs) + Me.Panel1.Controls.Add(Me.Label10) Me.Panel1.Controls.Add(Me.lblCountMissingInvoices) Me.Panel1.Controls.Add(Me.Label1) Me.Panel1.Controls.Add(Me.Label2) @@ -674,8 +678,8 @@ Partial Class usrcntlFremdrechnungen Me.dgvLFRechnung.AllowUserToDeleteRows = False Me.dgvLFRechnung.AllowUserToResizeColumns = False Me.dgvLFRechnung.AllowUserToResizeRows = False - DataGridViewCellStyle5.BackColor = System.Drawing.Color.FromArgb(CType(CType(240, Byte), Integer), CType(CType(245, Byte), Integer), CType(CType(255, Byte), Integer)) - Me.dgvLFRechnung.AlternatingRowsDefaultCellStyle = DataGridViewCellStyle5 + DataGridViewCellStyle1.BackColor = System.Drawing.Color.FromArgb(CType(CType(240, Byte), Integer), CType(CType(245, Byte), Integer), CType(CType(255, Byte), Integer)) + Me.dgvLFRechnung.AlternatingRowsDefaultCellStyle = DataGridViewCellStyle1 Me.dgvLFRechnung.BackgroundColor = System.Drawing.Color.White Me.dgvLFRechnung.ColumnHeadersHeightSizeMode = System.Windows.Forms.DataGridViewColumnHeadersHeightSizeMode.AutoSize Me.dgvLFRechnung.Location = New System.Drawing.Point(4, 3) @@ -692,8 +696,8 @@ Partial Class usrcntlFremdrechnungen Me.dgvDetails.AllowUserToDeleteRows = False Me.dgvDetails.AllowUserToResizeColumns = False Me.dgvDetails.AllowUserToResizeRows = False - DataGridViewCellStyle6.BackColor = System.Drawing.Color.FromArgb(CType(CType(240, Byte), Integer), CType(CType(245, Byte), Integer), CType(CType(255, Byte), Integer)) - Me.dgvDetails.AlternatingRowsDefaultCellStyle = DataGridViewCellStyle6 + DataGridViewCellStyle2.BackColor = System.Drawing.Color.FromArgb(CType(CType(240, Byte), Integer), CType(CType(245, Byte), Integer), CType(CType(255, Byte), Integer)) + Me.dgvDetails.AlternatingRowsDefaultCellStyle = DataGridViewCellStyle2 Me.dgvDetails.BackgroundColor = System.Drawing.Color.White Me.dgvDetails.ColumnHeadersHeightSizeMode = System.Windows.Forms.DataGridViewColumnHeadersHeightSizeMode.AutoSize Me.dgvDetails.Location = New System.Drawing.Point(-1, 3) @@ -712,6 +716,27 @@ Partial Class usrcntlFremdrechnungen Me.Panel4.Size = New System.Drawing.Size(1356, 108) Me.Panel4.TabIndex = 11 ' + 'Label10 + ' + Me.Label10.AutoSize = True + Me.Label10.Location = New System.Drawing.Point(4, 88) + Me.Label10.Name = "Label10" + Me.Label10.Size = New System.Drawing.Size(80, 13) + Me.Label10.TabIndex = 68 + Me.Label10.Text = "fehlende PDFs:" + ' + 'lblmissingPDFs + ' + Me.lblmissingPDFs.Anchor = CType((System.Windows.Forms.AnchorStyles.Top Or System.Windows.Forms.AnchorStyles.Right), System.Windows.Forms.AnchorStyles) + Me.lblmissingPDFs.BackColor = System.Drawing.Color.White + Me.lblmissingPDFs.Location = New System.Drawing.Point(173, 88) + Me.lblmissingPDFs.Name = "lblmissingPDFs" + Me.lblmissingPDFs.RightToLeft = System.Windows.Forms.RightToLeft.Yes + Me.lblmissingPDFs.Size = New System.Drawing.Size(74, 13) + Me.lblmissingPDFs.TabIndex = 69 + Me.lblmissingPDFs.Text = "0" + Me.lblmissingPDFs.TextAlign = System.Drawing.ContentAlignment.TopRight + ' 'usrcntlFremdrechnungen ' Me.AutoScaleDimensions = New System.Drawing.SizeF(6.0!, 13.0!) @@ -783,4 +808,6 @@ Partial Class usrcntlFremdrechnungen Friend WithEvents Label1 As Label Friend WithEvents RechnungsanhangHochladenToolStripMenuItem As ToolStripMenuItem Friend WithEvents RechnungsanhangloeschenToolStripMenuItem As ToolStripMenuItem + Friend WithEvents lblmissingPDFs As Label + Friend WithEvents Label10 As Label End Class diff --git a/SDL/mdm/usrcntlFremdrechnungen.vb b/SDL/mdm/usrcntlFremdrechnungen.vb index 7fd0f844..a25b69b3 100644 --- a/SDL/mdm/usrcntlFremdrechnungen.vb +++ b/SDL/mdm/usrcntlFremdrechnungen.vb @@ -597,6 +597,7 @@ Public Class usrcntlFremdrechnungen Dim btcNotSet As Integer = 0 Dim missingInvoices As Integer = 0 + 'Dim missingPDFs As Integer = 0 Dim uta As cUTA Dim ids As cIDS diff --git a/VERAG_PROG_ALLGEMEIN/Schnittstellen/Creditsafe/cCreditSafeAPI.vb b/VERAG_PROG_ALLGEMEIN/Schnittstellen/Creditsafe/cCreditSafeAPI.vb index 6ab93367..6fe0513e 100644 --- a/VERAG_PROG_ALLGEMEIN/Schnittstellen/Creditsafe/cCreditSafeAPI.vb +++ b/VERAG_PROG_ALLGEMEIN/Schnittstellen/Creditsafe/cCreditSafeAPI.vb @@ -5,7 +5,6 @@ Imports System.Net Imports System.Reflection Imports System.Text.RegularExpressions Imports System.Threading -Imports iTextSharp.text.pdf Public Class cCreditSafeAPI From 62d776f00a33bc4f2151b4decf28720e30dfcdd3 Mon Sep 17 00:00:00 2001 From: "d.breimaier" Date: Thu, 28 May 2026 14:30:36 +0200 Subject: [PATCH 02/17] kAssenbuch, etc. --- SDL/Classes/cFiskaltrustClient.vb | 310 ++++++++++++++++++------- SDL/Classes/cRKSV.vb | 6 +- SDL/kassenbuch/frmBelegNeu.Designer.vb | 7 + SDL/kassenbuch/frmBelegNeu.resx | 3 + SDL/kassenbuch/frmBelegNeu.vb | 154 +++++++++--- SDL/kassenbuch/frmKassenbuch.vb | 2 +- 6 files changed, 366 insertions(+), 116 deletions(-) diff --git a/SDL/Classes/cFiskaltrustClient.vb b/SDL/Classes/cFiskaltrustClient.vb index 57fb5bd5..b0bcb3c6 100644 --- a/SDL/Classes/cFiskaltrustClient.vb +++ b/SDL/Classes/cFiskaltrustClient.vb @@ -23,9 +23,9 @@ Public Class cFiskaltrustClient ' ================================ ' PUBLIC API ' ================================ - Public Async Function SignReceiptAsync(amount As Double, vat As Double, POS As List(Of EABelegPositionen)) As Task(Of String) + Public Async Function SignReceiptAsync(amount As Decimal, vat As Decimal, POS As List(Of EABelegPositionen), KindOfPayment As String, posSystemId As String) As Task(Of String) - Dim payload = BuildPayloadReceipt(amount, vat, POS) + Dim payload = BuildPayloadReceipt(amount, vat, POS, KindOfPayment, posSystemId) Dim endpoint = GetEndpoint("payment") Dim requestContent As StringContent @@ -46,9 +46,119 @@ Public Class cFiskaltrustClient End Function - Public Async Function SignNullReceiptAsync() As Task(Of String) + Public Async Function Echo(KassenName As String) As Task(Of String) - Dim payload = BuildPayloadNullReceipt() + Dim payload = KassenName & " - VERBINDUNG OK" + Dim endpoint = GetEndpoint("test") + + Dim requestContent As StringContent + + If _country = "AT" Then + ' Plaintext + Dim text As String = If(payload?.ToString(), "") + Dim json As String = JsonConvert.SerializeObject(text) + requestContent = New StringContent(json, Encoding.UTF8, "text/plain") + Else + ' JSON Objekt + Dim obj = New With { + .Message = payload + } + + Dim json As String = JsonConvert.SerializeObject(obj) + requestContent = New StringContent(json, Encoding.UTF8, "application/json") + End If + + + + Return Await SendAsync(endpoint, payload, requestContent) + + End Function + + ' Optional: Storno Beispiel + 'reference unique id! + Public Async Function CancelReceiptAsync(reference As String, POS As List(Of EABelegPositionen), amount As Decimal, kindOfPayment As String) As Task(Of String) + + + ' ChargeItems Liste vorbereiten + Dim chargeItems = New List(Of Object) + + For Each p In POS + chargeItems.Add(New With { + .Quantity = p.Anzahl, + .Amount = p.Preis, + .VATRate = 0, + .Description = p.LeistungsBez, + .ftChargeItemCase = 4919338167972134929 + }) + Next + + Dim payload = New With { + .ftCashBoxID = _cashboxId, + .ftPosSystemId = "POS-1", + .cbTerminalID = "T1", + .cbReceiptReference = reference, + .cbReceiptMoment = DateTime.UtcNow.ToString("o"), + .ftReceiptCase = 4919338172267102210, + .cbChargeItems = chargeItems, + .cbPayItems = New Object() { + New With { + .Quantity = 1.0, + .Amount = amount, + .Description = kindOfPayment, + .ftPayItemCase = 4919338167972134913 + } + } + } + + + Dim requestContent As StringContent + + + If _country = "AT" Then + ' Plaintext + Dim text As String = If(payload?.ToString(), "") + Dim json As String = JsonConvert.SerializeObject(text) + requestContent = New StringContent(json, Encoding.UTF8, "text/plain") + Else + ' JSON Objekt + + Dim json As String = JsonConvert.SerializeObject(payload) + requestContent = New StringContent(json, Encoding.UTF8, "application/json") + End If + + Return Await SendAsync(GetEndpoint("payment"), payload, requestContent) + + End Function + + + Public Async Function SignNullReceiptAsync(posSystemId As String) As Task(Of String) + + Dim payload = BuildPayloadNullReceipt(posSystemId, _country) + Dim endpoint = GetEndpoint("payment") + + Dim requestContent As StringContent + + If _country = "AT" Then + ' Plaintext + Dim text As String = If(payload?.ToString(), "") + Dim json As String = JsonConvert.SerializeObject(text) + requestContent = New StringContent(json, Encoding.UTF8, "text/plain") + + Else + ' JSON Objekt + + Dim json As String = JsonConvert.SerializeObject(payload) + requestContent = New StringContent(json, Encoding.UTF8, "application/json") + End If + + Return Await SendAsync(endpoint, payload, requestContent) + + End Function + + + Public Async Function SignClosinglReceiptAsync(type As String, posSystemId As String) As Task(Of String) + + Dim payload = BuildPayloadCosinglReceipt(type, posSystemId) Dim endpoint = GetEndpoint("payment") Dim requestContent As StringContent @@ -70,6 +180,7 @@ Public Class cFiskaltrustClient End Function + Public Async Function Journal(type As String) As Task(Of String) @@ -99,7 +210,7 @@ Public Class cFiskaltrustClient End Function - Public Async Function SignReceiptAsync_test() As Task(Of String) + Public Async Function SignReceiptAsync_test(posSystemId As String) As Task(Of String) Dim LIST = New List(Of EABelegPositionen) Dim p = New EABelegPositionen @@ -116,7 +227,7 @@ Public Class cFiskaltrustClient p.Anzahl = 1 LIST.Add(p) - Dim payload = BuildPayloadReceipt(100, 0, LIST) + Dim payload = BuildPayloadReceipt(100, 0, LIST, "Cash", posSystemId) Dim endpoint = GetEndpoint("payment") Dim requestContent As StringContent @@ -140,52 +251,26 @@ Public Class cFiskaltrustClient End Function - Public Async Function Echo() As Task(Of String) - - Dim payload = "VERBINDUNGSPRÜFUNG ERFOLGREICH" - Dim endpoint = GetEndpoint("test") - - Dim requestContent As StringContent - - If _country = "AT" Then - ' Plaintext - Dim text As String = If(payload?.ToString(), "") - Dim json As String = JsonConvert.SerializeObject(text) - requestContent = New StringContent(json, Encoding.UTF8, "text/plain") - Else - ' JSON Objekt - Dim obj = New With { - .Message = payload - } - - Dim json As String = JsonConvert.SerializeObject(obj) - requestContent = New StringContent(json, Encoding.UTF8, "application/json") - End If + Public Async Function CancelReceiptAsync_test(reference As String, amount As Decimal, kindOfPayment As String) As Task(Of String) + Dim LIST = New List(Of EABelegPositionen) + Dim p = New EABelegPositionen + p.Mandant = "VERA" + p.Niederlassung = "SUB" + p.Benutzer = 74 + p.BelegDat = Now + p.BelegNr = 1 + p.PreislistenNr = 1 + p.PreislistenPos = 1 + p.LeistungsNr = 300 + p.LeistungsBez = "TEST" + p.Preis = 10 + p.Anzahl = 1 + LIST.Add(p) - Return Await SendAsync(endpoint, payload, requestContent) - - End Function - - ' Optional: Storno Beispiel - 'reference unique id! - Public Async Function CancelReceiptAsync(reference As String, POS As List(Of EABelegPositionen), amount As Double) As Task(Of String) - - - ' ChargeItems Liste vorbereiten Dim chargeItems = New List(Of Object) - For Each p In POS - chargeItems.Add(New With { - .Quantity = p.Anzahl, - .Amount = p.Preis, - .VATRate = 0, - .Description = p.LeistungsBez, - .ftChargeItemCase = 4919338167972134929 - }) - Next - Dim payload = New With { .ftCashBoxID = _cashboxId, .ftPosSystemId = "POS-1", @@ -198,7 +283,7 @@ Public Class cFiskaltrustClient New With { .Quantity = 1.0, .Amount = amount, - .Description = "Cash", + .Description = kindOfPayment, .ftPayItemCase = 4919338167972134913 } } @@ -224,66 +309,73 @@ Public Class cFiskaltrustClient End Function + Private Async Function SendAsync(endpoint As String, payload As Object, requestContent As StringContent) As Task(Of String) - Dim exToThrow As Exception = Nothing - - Dim url = _baseUrl & endpoint Dim retries As Integer = 3 Dim delayMs As Integer = 500 - For attempt = 1 To retries + Dim lastException As Exception = Nothing + Dim shouldRetry As Boolean = False + + For attempt As Integer = 1 To retries + + shouldRetry = False Try + Using request As New HttpRequestMessage(HttpMethod.Post, url) request.Headers.Add("cashboxid", _cashboxId) request.Headers.Add("accesstoken", _accessToken) - If payload <> "" Then + If requestContent IsNot Nothing Then request.Content = requestContent End If - Dim response = Await _httpClient.SendAsync(request) Dim result = Await response.Content.ReadAsStringAsync() - ' Logging Hook - Log($"[{DateTime.Now}] Response ({response.StatusCode}): {result}") + Log($"[{DateTime.Now}] Response ({CInt(response.StatusCode)}): {result}") If response.IsSuccessStatusCode Then Return result End If - ' Retry only on transient errors - If CType(response.StatusCode, Integer) >= 500 Then - Throw New Exception("Server error: " & result) + Dim statusCode As Integer = CInt(response.StatusCode) + + If statusCode >= 500 Then + + shouldRetry = True + Throw New Exception($"Server error ({statusCode}): {result}") + Else - ' Client error → no retry - Throw New Exception("Client error: " & result) + + Throw New Exception($"Client error ({statusCode}): {result}") + End If End Using Catch ex As Exception - Log($"[{DateTime.Now}] Attempt {attempt} failed: {ex.Message}") + lastException = ex - If attempt = retries Then - exToThrow = ex - End If + Log($"[{DateTime.Now}] Attempt {attempt} failed: {ex.Message}") End Try + ' Await außerhalb von Catch + If shouldRetry AndAlso attempt < retries Then + Await Task.Delay(delayMs) + End If Next - - If exToThrow IsNot Nothing Then - Await Task.Delay(1000) - Throw exToThrow + If lastException IsNot Nothing Then + Throw lastException End If Throw New Exception("Unexpected error") @@ -291,11 +383,19 @@ Public Class cFiskaltrustClient End Function - Private Function BuildPayloadReceipt(amount As Double, vat As Double, POS As List(Of EABelegPositionen)) As Object + Private Function BuildPayloadReceipt(amount As Decimal, vat As Decimal, POS As List(Of EABelegPositionen), KindOfPayment As String, posSystemId As String) As Object ' ChargeItems Liste vorbereiten Dim chargeItems = New List(Of Object) + Dim PayItemCase As Long + + Select Case KindOfPayment + Case "Cash" : PayItemCase = 4919338167972134913 + Case "Card" : PayItemCase = 4919338167972134913 '-> richtigen Type finden + End Select + + For Each p In POS chargeItems.Add(New With { .Quantity = p.Anzahl, @@ -309,7 +409,7 @@ Public Class cFiskaltrustClient ' Payload Objekt erstellen Dim payload = New With { .ftCashBoxID = _cashboxId, - .ftPosSystemId = "POS-1", + .ftPosSystemId = posSystemId, .cbTerminalID = "T1", .cbReceiptReference = Guid.NewGuid().ToString(), .cbReceiptMoment = DateTime.UtcNow.ToString("o"), @@ -318,28 +418,71 @@ Public Class cFiskaltrustClient New With { .Quantity = 1.0, .Amount = amount, - .Description = "Cash", - .ftPayItemCase = 4919338167972134913 + .Description = KindOfPayment, + .ftPayItemCase = PayItemCase } }, - .ftReceiptCase = 4919338172267102209 + .ftReceiptCase = 4919338172267102209 'IMPLICIT-FLOW -> STANDARD-BARVERKAUF } Return payload End Function - Private Function BuildPayloadNullReceipt() As Object + Private Function BuildPayloadNullReceipt(posSystemId As String, country As String) As Object + + Dim ftReceiptCase_ As Long + Dim cbReceiptReference_ As String + + Select Case country + Case "DE" + ftReceiptCase_ = 4919338172267102210 'NULL-BELEG DE + cbReceiptReference_ = "ZeroReceiptAfterFailure" + + Case Else + ftReceiptCase_ = 4707387510509010946 'NULL-BELEG AT + cbReceiptReference_ = "2" + End Select + Dim payload = New With { .ftCashBoxID = _cashboxId, - .ftPosSystemId = "POS-1", + .ftPosSystemId = posSystemId, .cbTerminalID = "T1", - .cbReceiptReference = "ZeroReceiptAfterFailure", + .cbReceiptReference = cbReceiptReference_, .cbReceiptMoment = DateTime.UtcNow.ToString("o"), .cbChargeItems = New Object() {}, .cbPayItems = New Object() {}, - .ftReceiptCase = 4919338172267102210 + .ftReceiptCase = ftReceiptCase_ + } + + + Return payload + + End Function + + + Private Function BuildPayloadCosinglReceipt(type As String, posSystemId As String) + + 'Kassenabschlussbelege + + Dim caseID As Long + Select Case type + Case "daily" : caseID = 4919338172267102210 + Case "monthly" : caseID = 4919338172267102213 + Case "yearly" : caseID = 4919338172267102214 + End Select + + + Dim payload = New With { + .ftCashBoxID = _cashboxId, + .ftPosSystemId = posSystemId, + .cbTerminalID = "T1", + .cbReceiptReference = type & "-closing-" & DateTime.UtcNow.ToString("o"), + .cbReceiptMoment = DateTime.UtcNow.ToString("o"), + .cbChargeItems = New Object() {}, + .cbPayItems = New Object() {}, + .ftReceiptCase = caseID } @@ -442,14 +585,13 @@ Public Class cFiskaltrustClient Dim numSignatures As Integer = Signatures.Size - For i = 0 To numSignatures + For i = 0 To numSignatures - 1 - While i < numSignatures - Dim SignObj As Chilkat.JsonObject = Signatures.ObjectAt(i) - Dim ftSigPos As New cFiskaltrustSignaturPositions() + Dim SignObj As Chilkat.JsonObject = Signatures.ObjectAt(i) + Dim ftSigPos As New cFiskaltrustSignaturPositions() - With ftSigPos + With ftSigPos .ftSignatures = ftSig.ft_id .ftData = SignObj.StringOf("Data") .ftSignatureFormat = SignObj.StringOf("ftSignatureFormat") @@ -461,8 +603,6 @@ Public Class cFiskaltrustClient End With - i = i + 1 - End While Next diff --git a/SDL/Classes/cRKSV.vb b/SDL/Classes/cRKSV.vb index 3434ec76..f4ced71a 100644 --- a/SDL/Classes/cRKSV.vb +++ b/SDL/Classes/cRKSV.vb @@ -125,9 +125,11 @@ Public Class cRKSV Dim BetragSatzBesonders = IIf(steuersatz = 0.19, summeBRUTTO, 0.0) Dim StandUmsatzzaehler = umsatzZaehler 'KASSE.rksv_Umsatzzaehler - Dim countryID As String Dim client As New cFiskaltrustClient(kasse.rksv_FT_RestServiceURL, kasse.rksv_FT_CashboxID, kasse.rksv_FT_AccessToken, kasse.rksv_FT_Country) - Dim result = Await client.SignReceiptAsync(summeBRUTTO, steuersatz, POS) + + + Dim result = Await client.SignReceiptAsync(summeBRUTTO, steuersatz, POS, "Cash", kasse.rksv_id) + client.saveRKSV_FT(result, QR_CodeString) diff --git a/SDL/kassenbuch/frmBelegNeu.Designer.vb b/SDL/kassenbuch/frmBelegNeu.Designer.vb index ddce91b9..5a6be92f 100644 --- a/SDL/kassenbuch/frmBelegNeu.Designer.vb +++ b/SDL/kassenbuch/frmBelegNeu.Designer.vb @@ -146,6 +146,7 @@ Partial Class frmBelegNeu Me.DataGridViewTextBoxColumn9 = New System.Windows.Forms.DataGridViewTextBoxColumn() Me.FlowLayoutPanel2 = New System.Windows.Forms.FlowLayoutPanel() Me.ContextMenuStrip1 = New System.Windows.Forms.ContextMenuStrip(Me.components) + Me.cm_FT = New System.Windows.Forms.ContextMenuStrip(Me.components) CType(Me.dgvBelegPos, System.ComponentModel.ISupportInitialize).BeginInit() Me.pnl.SuspendLayout() Me.pnlData.SuspendLayout() @@ -1778,6 +1779,11 @@ Partial Class frmBelegNeu Me.ContextMenuStrip1.Name = "ContextMenuStrip1" Me.ContextMenuStrip1.Size = New System.Drawing.Size(61, 4) ' + 'cm_FT + ' + Me.cm_FT.Name = "ContextMenuStrip1" + Me.cm_FT.Size = New System.Drawing.Size(61, 4) + ' 'frmBelegNeu ' Me.AutoScaleDimensions = New System.Drawing.SizeF(96.0!, 96.0!) @@ -1928,4 +1934,5 @@ Partial Class frmBelegNeu Friend WithEvents LinkLabel1 As LinkLabel Friend WithEvents cboBuchungsoforterzeugen As CheckBox Friend WithEvents Button4 As Button + Friend WithEvents cm_FT As ContextMenuStrip End Class diff --git a/SDL/kassenbuch/frmBelegNeu.resx b/SDL/kassenbuch/frmBelegNeu.resx index 5923be0e..e3ff3ff6 100644 --- a/SDL/kassenbuch/frmBelegNeu.resx +++ b/SDL/kassenbuch/frmBelegNeu.resx @@ -159,6 +159,9 @@ 17, 17 + + 173, 17 + 86 diff --git a/SDL/kassenbuch/frmBelegNeu.vb b/SDL/kassenbuch/frmBelegNeu.vb index 34bee61e..b17b04eb 100644 --- a/SDL/kassenbuch/frmBelegNeu.vb +++ b/SDL/kassenbuch/frmBelegNeu.vb @@ -1712,8 +1712,10 @@ Public Class frmBelegNeu If Not verarbeitet Then If Not TESTBUCHUNG Then + KASSE.DECREASE_BELEG_UMSATZ(oldBelegZaehler, If(EA = "E", summeBRUTTO * -1, summeBRUTTO)) cRKSV.DELETE(BELEG, KASSE.rksv_firma) + End If Dim Errmsg = "Programmfehler bei der digitalen Signatur." & vbNewLine & vbNewLine & answer MsgBox(Errmsg, MsgBoxStyle.Critical) @@ -1887,40 +1889,136 @@ Public Class frmBelegNeu Process.Start("https://wiki.verag.ag/de/software/aviso/howtos/Bankomat") End Sub - Private Async Function Button4_ClickAsync(sender As Object, e As EventArgs) As Task Handles Button4.Click - Try - Dim QR_CodeString As String = "" - Dim LastJWS As String = "" - - - KASSE.LOAD(cboKassen._value) - If KASSE.rksv_FT_RestServiceURL <> "" Then - Dim client As New cFiskaltrustClient(KASSE.rksv_FT_RestServiceURL, KASSE.rksv_FT_CashboxID, KASSE.rksv_FT_AccessToken, KASSE.rksv_FT_Country) - Dim result_verbindungstest As String = Await client.Echo() - Dim result_zahlung As String = Await client.SignReceiptAsync_test() - - client.saveRKSV_FT(result_zahlung, QR_CodeString) - - MsgBox(result_verbindungstest) - - Else - MsgBox("keine Rest-Service URL hinterlegt!") - - End If - - Catch ex As Exception - - End Try - - - End Function - Private Sub cboKassen_SelectedIndexChanged(sender As Object, e As EventArgs) Handles cboKassen.SelectedIndexChanged KASSE.LOAD(cboKassen._value) Button4.Visible = KASSE.rksv_FT_RestServiceURL <> "" End Sub + + Private Sub Button4_ClickAsync(sender As Object, e As EventArgs) Handles Button4.Click + + If Not cm_FT.Items.ContainsKey("null") Then + Dim plose = New ToolStripMenuItem() With {.Text = "Nullbeleg", .Name = "null", .Font = New Font(Me.Font.FontFamily, Me.Font.Size)} + cm_FT.Items.Add(plose) + AddHandler plose.Click, AddressOf mnuItemAuftrauege_Clicked + End If + + If Not cm_FT.Items.ContainsKey("monthly") Then + Dim rmc = New ToolStripMenuItem() With {.Text = "Monatabschluss", .Name = "monthly", .Font = New Font(Me.Font.FontFamily, Me.Font.Size)} + AddHandler rmc.Click, AddressOf mnuItemAuftrauege_Clicked + cm_FT.Items.Add(rmc) + End If + + If Not cm_FT.Items.ContainsKey("daily") Then + Dim rmc = New ToolStripMenuItem() With {.Text = "Tagesabschluss", .Name = "daily", .Font = New Font(Me.Font.FontFamily, Me.Font.Size)} + AddHandler rmc.Click, AddressOf mnuItemAuftrauege_Clicked + cm_FT.Items.Add(rmc) + End If + + If Not cm_FT.Items.ContainsKey("yearly") Then + Dim uta = New ToolStripMenuItem() With {.Text = "Jahresabschluss", .Name = "yearly", .Font = New Font(Me.Font.FontFamily, Me.Font.Size)} + AddHandler uta.Click, AddressOf mnuItemAuftrauege_Clicked + cm_FT.Items.Add(uta) + End If + + If Not cm_FT.Items.ContainsKey("bar") Then + Dim ids = New ToolStripMenuItem() With {.Text = "Barverkauf", .Name = "bar", .Font = New Font(Me.Font.FontFamily, Me.Font.Size)} + AddHandler ids.Click, AddressOf mnuItemAuftrauege_Clicked + cm_FT.Items.Add(ids) + End If + + If Not cm_FT.Items.ContainsKey("storno") Then + Dim ids = New ToolStripMenuItem() With {.Text = "Storno", .Name = "storno", .Font = New Font(Me.Font.FontFamily, Me.Font.Size)} + AddHandler ids.Click, AddressOf mnuItemAuftrauege_Clicked + cm_FT.Items.Add(ids) + End If + + If Not cm_FT.Items.ContainsKey("test") Then + Dim ids = New ToolStripMenuItem() With {.Text = "Verbindungstest", .Name = "test", .Font = New Font(Me.Font.FontFamily, Me.Font.Size)} + AddHandler ids.Click, AddressOf mnuItemAuftrauege_Clicked + cm_FT.Items.Add(ids) + End If + + If Not cm_FT.Items.ContainsKey("journal") Then + Dim ids = New ToolStripMenuItem() With {.Text = "Journal", .Name = "journal", .Font = New Font(Me.Font.FontFamily, Me.Font.Size)} + AddHandler ids.Click, AddressOf mnuItemAuftrauege_Clicked + cm_FT.Items.Add(ids) + End If + + cm_FT.Show(Cursor.Position) + + End Sub + + + Private Async Function mnuItemAuftrauege_Clicked(sender As Object, e As EventArgs) As Task(Of Object) + + cm_FT.Hide() + Dim item As ToolStripMenuItem = TryCast(sender, ToolStripMenuItem) + + If item IsNot Nothing Then + + KASSE.LOAD(cboKassen._value) + + Dim client As New cFiskaltrustClient(KASSE.rksv_FT_RestServiceURL, KASSE.rksv_FT_CashboxID, KASSE.rksv_FT_AccessToken, KASSE.rksv_FT_Country) + + If item.Name = "null" Then + 'beide + Dim result As String = Await client.SignNullReceiptAsync(KASSE.rksv_id) + MsgBox(result) + + + ElseIf item.Name = "test" Then + 'beide + Dim result As String = Await client.Echo(KASSE.rksv_bez & " " & KASSE.rksv_FT_Country & " - ") + MsgBox(result) + + + ElseIf item.Name = "storno" Then + 'beide + Dim result As String = Await client.CancelReceiptAsync_test("-1", 100, "Cash") + MsgBox(result) + + ElseIf item.Name = "bar" Then + 'beide + Dim result As String = Await client.SignReceiptAsync_test(KASSE.rksv_id) + MsgBox(result) + + ElseIf item.Name = "monthly" Then + 'beide + Dim result As String = Await client.SignClosinglReceiptAsync(item.Name, KASSE.rksv_id) + MsgBox(result) + + ElseIf item.Name = "daily" Then + 'Nur DE + If KASSE.rksv_FT_Country = "DE" Then + Dim result As String = Await client.SignClosinglReceiptAsync(item.Name, KASSE.rksv_id) + MsgBox(result) + Else + MsgBox("nicht für AT-Kassen möglich!") + End If + + + ElseIf item.Name = "yearly" Then + + Dim result As String = Await client.SignClosinglReceiptAsync(item.Name, KASSE.rksv_id) + MsgBox(result) + + ElseIf item.Name = "journal" Then + + Dim result As String = Await client.Journal(2) + MsgBox(result) + + + + End If + + + End If + + + + End Function End Class Class TestRKSVW diff --git a/SDL/kassenbuch/frmKassenbuch.vb b/SDL/kassenbuch/frmKassenbuch.vb index b771172a..2fdeacea 100644 --- a/SDL/kassenbuch/frmKassenbuch.vb +++ b/SDL/kassenbuch/frmKassenbuch.vb @@ -1150,7 +1150,7 @@ Public Class frmKassenbuch If KASSE.rksv_FT_RestServiceURL <> "" Then Dim client As New cFiskaltrustClient(KASSE.rksv_FT_RestServiceURL, KASSE.rksv_FT_CashboxID, KASSE.rksv_FT_AccessToken, KASSE.rksv_FT_Country) - Dim result = Await client.SignNullReceiptAsync() + Dim result = Await client.SignNullReceiptAsync(RKSV.rksv_id) Dim QR_CodeString As String = "" client.saveRKSV_FT(result, QR_CodeString) Else From 5e4d14952fbc01c63804fe0cdaa2609789ea21cd Mon Sep 17 00:00:00 2001 From: "d.breimaier" Date: Thu, 28 May 2026 15:50:25 +0200 Subject: [PATCH 03/17] UID-Pruefung, etc. --- VERAG_PROG_ALLGEMEIN/Classes/cUIDPruefung.vb | 1 + 1 file changed, 1 insertion(+) diff --git a/VERAG_PROG_ALLGEMEIN/Classes/cUIDPruefung.vb b/VERAG_PROG_ALLGEMEIN/Classes/cUIDPruefung.vb index cd506ed9..b9da904a 100644 --- a/VERAG_PROG_ALLGEMEIN/Classes/cUIDPruefung.vb +++ b/VERAG_PROG_ALLGEMEIN/Classes/cUIDPruefung.vb @@ -317,6 +317,7 @@ Public Class cUIDPruefung Case "AMBAR" : where = " And Filialen.FilialenNr IN (5701) " Case "IMEX" : where = " And Filialen.FilialenNr IN (5501) " Case "ATILLA" : where = " And Filialen.FilialenNr IN (4801) " + Case "VERAG 360 GmbH" : where = " And Filialen.FilialenNr IN (8001) " Case "UNISPED" : where = " AND Filialen.firma='UNISPED' " Case Else : where = " AND Filialen.firma='VERAG' " '" And isnull(FilialenNr,'') Not IN (5501,5701)" End Select From 955ed146933588f77a00e718c31f9d6783662538 Mon Sep 17 00:00:00 2001 From: "d.breimaier" Date: Mon, 8 Jun 2026 16:24:51 +0200 Subject: [PATCH 04/17] spedbuch, etc. --- SDL/Speditionsbuch/usrCntlSpeditionsBuchSuche.Designer.vb | 6 +++--- SDL/Speditionsbuch/usrCntlSpeditionsBuchSuche.vb | 6 +++++- 2 files changed, 8 insertions(+), 4 deletions(-) diff --git a/SDL/Speditionsbuch/usrCntlSpeditionsBuchSuche.Designer.vb b/SDL/Speditionsbuch/usrCntlSpeditionsBuchSuche.Designer.vb index d3de9fd2..e902816e 100644 --- a/SDL/Speditionsbuch/usrCntlSpeditionsBuchSuche.Designer.vb +++ b/SDL/Speditionsbuch/usrCntlSpeditionsBuchSuche.Designer.vb @@ -1489,7 +1489,7 @@ Partial Class usrCntlSpeditionsBuchSuche Me.MenuStrip2.Items.AddRange(New System.Windows.Forms.ToolStripItem() {Me.ToolStripMenuItem14}) Me.MenuStrip2.Location = New System.Drawing.Point(16, 71) Me.MenuStrip2.Name = "MenuStrip2" - Me.MenuStrip2.Size = New System.Drawing.Size(163, 27) + Me.MenuStrip2.Size = New System.Drawing.Size(283, 27) Me.MenuStrip2.TabIndex = 93 Me.MenuStrip2.Text = "Kundenauswertungen" ' @@ -1507,14 +1507,14 @@ Partial Class usrCntlSpeditionsBuchSuche ' Me.ToolStripMenuItem1.Image = Global.SDL.My.Resources.Resources.Excel_logo Me.ToolStripMenuItem1.Name = "ToolStripMenuItem1" - Me.ToolStripMenuItem1.Size = New System.Drawing.Size(336, 24) + Me.ToolStripMenuItem1.Size = New System.Drawing.Size(344, 30) Me.ToolStripMenuItem1.Text = "Kundenbericht (Zeitraum auswählen)" ' 'ToolStripMenuItem19 ' Me.ToolStripMenuItem19.Image = Global.SDL.My.Resources.Resources.Excel_logo Me.ToolStripMenuItem19.Name = "ToolStripMenuItem19" - Me.ToolStripMenuItem19.Size = New System.Drawing.Size(336, 24) + Me.ToolStripMenuItem19.Size = New System.Drawing.Size(344, 30) Me.ToolStripMenuItem19.Text = "Detailkundenbericht (Zeitraum auswählen)" ' 'Button15 diff --git a/SDL/Speditionsbuch/usrCntlSpeditionsBuchSuche.vb b/SDL/Speditionsbuch/usrCntlSpeditionsBuchSuche.vb index f345cf7f..303aa325 100644 --- a/SDL/Speditionsbuch/usrCntlSpeditionsBuchSuche.vb +++ b/SDL/Speditionsbuch/usrCntlSpeditionsBuchSuche.vb @@ -1800,7 +1800,7 @@ Public Class usrCntlSpeditionsBuchSuche If existingRow Is Nothing Then - Dim filialNrTemp = SQL.getValueTxtBySql("SELECT grz_filialNr from tblGrenzstelle where grz_BezeichnungCBO = '" & grenzstelle & "'", "AVISO") + Dim filialNrTemp = SQL.getValueTxtBySql("SELECT grz_filialNr from tblGrenzstelle where grz_Grenzstelle = '" & grenzstelle & "'", "AVISO") If filialNrTemp <> "" AndAlso IsNumeric(filialNrTemp) Then filialNr = CInt(filialNrTemp) End If @@ -3968,6 +3968,10 @@ Public Class usrCntlSpeditionsBuchSuche Private Sub DataGridView_CellContentClick(sender As Object, e As DataGridViewCellEventArgs) End Sub + + Private Sub ToolStripMenuItem14_Click(sender As Object, e As EventArgs) Handles ToolStripMenuItem14.Click + + End Sub End Class Class cSpeditionsbuchReport From b970e3b3395dcc74d2af317461b58b63bfdc9a4f Mon Sep 17 00:00:00 2001 From: "d.breimaier" Date: Mon, 8 Jun 2026 17:21:08 +0200 Subject: [PATCH 05/17] abrechnung, etc. --- SDL/Fakturierung/cAutomailversand.vb | 8 +-- .../frmAbrechnungsMaske.Designer.vb | 33 ++++++------ SDL/Fakturierung/frmAbrechnungsMaske.vb | 21 ++++++-- SDL/Fakturierung/frmFaktSammelRgDrucken.vb | 18 +++++-- SDL/Fakturierung/usrCntlFaktAbrechnung.vb | 50 +++++++++---------- 5 files changed, 79 insertions(+), 51 deletions(-) diff --git a/SDL/Fakturierung/cAutomailversand.vb b/SDL/Fakturierung/cAutomailversand.vb index a64dcc6c..a7a0d56f 100644 --- a/SDL/Fakturierung/cAutomailversand.vb +++ b/SDL/Fakturierung/cAutomailversand.vb @@ -965,7 +965,7 @@ Public Class cAutomailversand If isEinzelrechnung Then RE_Text = "diese Rechnung" Else - RE_Text = "alle markieren Rechnungen" + RE_Text = "alle markierten Rechnungen" End If If vbYes = MsgBox("Möchten Sie für " & RE_Text & " den automatischen Emailversand deaktivieren?" & vbNewLine & "Die Rechnungen müssen dann manuell per Mail verschickt werden!", vbYesNoCancel) Then @@ -992,17 +992,17 @@ Public Class cAutomailversand End If End Function - Public Shared Function automRechnungsversand_durchführen(Optional isEinzelrechnung As Boolean = False) + Public Shared Function automRechnungsversand_durchführen(Optional isEinzelrechnung As Boolean = False, Optional printAfterSent As Boolean = False) Dim RE_Text = "" If isEinzelrechnung Then RE_Text = "diese Rechnung" Else - RE_Text = "alle markieren Rechnungen" + RE_Text = "alle markierten Rechnungen" End If - If vbYes = MsgBox("Möchten Sie für " & RE_Text & " den automatischen Emailversand JETZT durchführen?" & vbNewLine & "Ansonsten werden sie im Nachtlauf automatisch versendet!", vbYesNoCancel) Then + If vbYes = MsgBox("Möchten Sie für " & RE_Text & " den automatischen Emailversand JETZT durchführen?" & IIf(printAfterSent, vbNewLine & "Die Rechnungen werden nach dem verschicken ausgedruckt!", "") & vbNewLine & "Ansonsten werden sie im Nachtlauf automatisch versendet!", vbYesNoCancel) Then Return True Else Return False diff --git a/SDL/Fakturierung/frmAbrechnungsMaske.Designer.vb b/SDL/Fakturierung/frmAbrechnungsMaske.Designer.vb index 4283c005..4bb9a5e5 100644 --- a/SDL/Fakturierung/frmAbrechnungsMaske.Designer.vb +++ b/SDL/Fakturierung/frmAbrechnungsMaske.Designer.vb @@ -32,6 +32,7 @@ Partial Class frmAbrechnungsMaske Me.Label12 = New System.Windows.Forms.Label() Me.dgvRechnungen = New VERAG_PROG_ALLGEMEIN.MyDatagridview(Me.components) Me.Panel2 = New System.Windows.Forms.Panel() + Me.btn_doMailAutoversand = New System.Windows.Forms.Button() Me.Button11 = New System.Windows.Forms.Button() Me.cbxOriginalDrucken = New System.Windows.Forms.CheckBox() Me.cboSort = New VERAG_PROG_ALLGEMEIN.MyComboBox() @@ -88,7 +89,6 @@ Partial Class frmAbrechnungsMaske Me.btnVonJahr = New System.Windows.Forms.Button() Me.UsrCntlFaktAbrechnung1 = New SDL.usrCntlFaktAbrechnung() Me.ContextMenuStrip1 = New System.Windows.Forms.ContextMenuStrip(Me.components) - Me.btn_doMailAutoversand = New System.Windows.Forms.Button() Me.pnl.SuspendLayout() CType(Me.SplitContainer, System.ComponentModel.ISupportInitialize).BeginInit() Me.SplitContainer.Panel1.SuspendLayout() @@ -227,6 +227,21 @@ Partial Class frmAbrechnungsMaske Me.Panel2.Size = New System.Drawing.Size(561, 97) Me.Panel2.TabIndex = 0 ' + 'btn_doMailAutoversand + ' + Me.btn_doMailAutoversand.BackgroundImage = Global.SDL.My.Resources.Resources.zauberstab + Me.btn_doMailAutoversand.BackgroundImageLayout = System.Windows.Forms.ImageLayout.Zoom + Me.btn_doMailAutoversand.FlatStyle = System.Windows.Forms.FlatStyle.Flat + Me.btn_doMailAutoversand.ImageAlign = System.Drawing.ContentAlignment.MiddleLeft + Me.btn_doMailAutoversand.Location = New System.Drawing.Point(293, 21) + Me.btn_doMailAutoversand.Margin = New System.Windows.Forms.Padding(10, 3, 3, 3) + Me.btn_doMailAutoversand.Name = "btn_doMailAutoversand" + Me.btn_doMailAutoversand.Padding = New System.Windows.Forms.Padding(20, 0, 0, 0) + Me.btn_doMailAutoversand.Size = New System.Drawing.Size(40, 25) + Me.btn_doMailAutoversand.TabIndex = 29 + Me.btn_doMailAutoversand.TextAlign = System.Drawing.ContentAlignment.MiddleRight + Me.btn_doMailAutoversand.UseVisualStyleBackColor = True + ' 'Button11 ' Me.Button11.BackgroundImage = Global.SDL.My.Resources.Resources.email_print1 @@ -527,6 +542,7 @@ Partial Class frmAbrechnungsMaske Me.cboRechnungsdruck._allowedValuesFreiText = Nothing Me.cboRechnungsdruck._allowFreiText = False Me.cboRechnungsdruck._value = "" + Me.cboRechnungsdruck.DropDownWidth = 120 Me.cboRechnungsdruck.FormattingEnabled = True Me.cboRechnungsdruck.Location = New System.Drawing.Point(453, 23) Me.cboRechnungsdruck.Margin = New System.Windows.Forms.Padding(2) @@ -976,21 +992,6 @@ Partial Class frmAbrechnungsMaske Me.ContextMenuStrip1.Name = "ContextMenuStrip1" Me.ContextMenuStrip1.Size = New System.Drawing.Size(61, 4) ' - 'btn_doMailAutoversand - ' - Me.btn_doMailAutoversand.BackgroundImage = Global.SDL.My.Resources.Resources.zauberstab - Me.btn_doMailAutoversand.BackgroundImageLayout = System.Windows.Forms.ImageLayout.Zoom - Me.btn_doMailAutoversand.FlatStyle = System.Windows.Forms.FlatStyle.Flat - Me.btn_doMailAutoversand.ImageAlign = System.Drawing.ContentAlignment.MiddleLeft - Me.btn_doMailAutoversand.Location = New System.Drawing.Point(293, 21) - Me.btn_doMailAutoversand.Margin = New System.Windows.Forms.Padding(10, 3, 3, 3) - Me.btn_doMailAutoversand.Name = "btn_doMailAutoversand" - Me.btn_doMailAutoversand.Padding = New System.Windows.Forms.Padding(20, 0, 0, 0) - Me.btn_doMailAutoversand.Size = New System.Drawing.Size(40, 25) - Me.btn_doMailAutoversand.TabIndex = 29 - Me.btn_doMailAutoversand.TextAlign = System.Drawing.ContentAlignment.MiddleRight - Me.btn_doMailAutoversand.UseVisualStyleBackColor = True - ' 'frmAbrechnungsMaske ' Me.AutoScaleDimensions = New System.Drawing.SizeF(6.0!, 13.0!) diff --git a/SDL/Fakturierung/frmAbrechnungsMaske.vb b/SDL/Fakturierung/frmAbrechnungsMaske.vb index a3123a69..0cc6b6a0 100644 --- a/SDL/Fakturierung/frmAbrechnungsMaske.vb +++ b/SDL/Fakturierung/frmAbrechnungsMaske.vb @@ -39,6 +39,7 @@ Public Class frmAbrechnungsMaske cboRechnungsdruck.Items.Add(New VERAG_PROG_ALLGEMEIN.MyListItem("E-MAIL", "2")) cboRechnungsdruck.Items.Add(New VERAG_PROG_ALLGEMEIN.MyListItem("MAIL+KOPIE", "5")) cboRechnungsdruck.Items.Add(New VERAG_PROG_ALLGEMEIN.MyListItem("AUTO-MAIL", "6")) + cboRechnungsdruck.Items.Add(New VERAG_PROG_ALLGEMEIN.MyListItem("AUTO-MAIL + KOPIE", "7")) cboRechnungsdruck.changeItem("") cboSort.Items.Clear() @@ -235,7 +236,7 @@ Public Class frmAbrechnungsMaske If .Columns.Contains("AUTO_sent") Then .Columns("AUTO_sent").Width = 40 - If cboRechnungsdruck._value <> "6" Then + If (cboRechnungsdruck._value <> "6" AndAlso cboRechnungsdruck._value <> "7") Then .Columns("AUTO_sent").Visible = False Else .Columns("AUTO_sent").Visible = True @@ -328,7 +329,8 @@ Public Class frmAbrechnungsMaske If cboRechnungsdruck._value <> "" Then Select Case cboRechnungsdruck._value - Case 6 : sqlstr &= " And isnull(Automailversand,0)=1 " : enableAUTOMAIL_BTN = True + Case 6 : sqlstr &= " And Rechnungsdruck='3' And isnull(Automailversand,0)=1 " : enableAUTOMAIL_BTN = True + Case 7 : sqlstr &= " And Rechnungsdruck='5' And isnull(Automailversand,0)=1 " : enableAUTOMAIL_BTN = True Case 2 : sqlstr &= " And Rechnungsdruck='" & cboRechnungsdruck._value & "' And isnull(Automailversand,0)=0" : enableAUTOMAIL_BTN = True Case 5 : sqlstr &= " And Rechnungsdruck='" & cboRechnungsdruck._value & "' And isnull(Automailversand,0)=0" : enableAUTOMAIL_BTN = False Case Else @@ -976,10 +978,13 @@ Public Class frmAbrechnungsMaske Private Sub btn_doMailAutoversand_Click(sender As Object, e As EventArgs) Handles btn_doMailAutoversand.Click + Dim printAfterSent As Boolean = False + If cboRechnungsdruck._value = "7" Then printAfterSent = True + If dgvRechnungen.SelectedRows.Count > 0 Then - If Not cAutomailversand.automRechnungsversand_durchführen Then Exit Sub + If Not cAutomailversand.automRechnungsversand_durchführen(printAfterSent) Then Exit Sub Dim ListOfRK_ID As New List(Of Integer) @@ -999,6 +1004,16 @@ Public Class frmAbrechnungsMaske fun.sendMailEinzelrechnungen(cboFirma._value, Today(), cboSachbearbeiter._value, ListOfRK_ID) initDGV() + If printAfterSent Then + + For Each row In ListOfRK_ID + cFakturierung.doRechnungsDruck(row,,, 1,, cboPrinter.Text) + + Next + + End If + + End If diff --git a/SDL/Fakturierung/frmFaktSammelRgDrucken.vb b/SDL/Fakturierung/frmFaktSammelRgDrucken.vb index 933bed7a..4fded175 100644 --- a/SDL/Fakturierung/frmFaktSammelRgDrucken.vb +++ b/SDL/Fakturierung/frmFaktSammelRgDrucken.vb @@ -671,10 +671,20 @@ Public Class frmFaktSammelRgDrucken Dim abfertigungsarten = getValues() - RechnungsNrisSet = cFakturierung.doSAMMELRechnungsDruck(cboFirma._value, Sammelrechung, CDate(txtZeitraumBis.Text), CDate(txtRechnungsdatum.Text), cboPrinter.Text, cbxEinzelAnlagen.Checked, cbxSammelbericht.Checked, getSelectionKdNr, 7, listPDFs, cboSB._value,,, getAvisoIds, cbxEVOLOG.Checked, SonstAnlagen, , cbxTransFerry.Checked, cboFaktGrp._value, abfertigungsarten,,, True) - If Not RechnungsNrisSet Then - MsgBox("Fehler bei RechnungsNr-Erzeugung!") + Dim IM_EX As Boolean = False + IM_EX = r.Cells("IM_EX").Value IsNot Nothing AndAlso Not IsDBNull(r.Cells("IM_EX").Value) AndAlso r.Cells("RENR").Value = True + + If abfertigungsarten = "" AndAlso IM_EX Then + + Else + RechnungsNrisSet = cFakturierung.doSAMMELRechnungsDruck(cboFirma._value, Sammelrechung, CDate(txtZeitraumBis.Text), CDate(txtRechnungsdatum.Text), cboPrinter.Text, cbxEinzelAnlagen.Checked, cbxSammelbericht.Checked, getSelectionKdNr, 7, listPDFs, cboSB._value,,, getAvisoIds, cbxEVOLOG.Checked, SonstAnlagen, , cbxTransFerry.Checked, cboFaktGrp._value, abfertigungsarten,,, True) + If Not RechnungsNrisSet Then + MsgBox("Fehler bei RechnungsNr-Erzeugung!") + End If + End If + + Me.Enabled = True End If End If @@ -835,11 +845,13 @@ Public Class frmFaktSammelRgDrucken Button4.Enabled = cbxAUTOMail.Checked Button7.Enabled = cbxAUTOMail.Checked Button3.Enabled = Not cbxAUTOMail.Checked + Button6.Enabled = cbxAUTOMail.Checked Else Button7.Enabled = False Button4.Enabled = False Button3.Enabled = False + Button6.Enabled = False End If diff --git a/SDL/Fakturierung/usrCntlFaktAbrechnung.vb b/SDL/Fakturierung/usrCntlFaktAbrechnung.vb index 511b484f..ca6da27f 100644 --- a/SDL/Fakturierung/usrCntlFaktAbrechnung.vb +++ b/SDL/Fakturierung/usrCntlFaktAbrechnung.vb @@ -5550,24 +5550,24 @@ mwst: Return enableAUTOMAIL End Select - 'BEI EINZELRECHNUNG WIRD STATUS 0 und 2 geprüft - - 'STATUS 0-_> Rechnung angelegt - 'STATUS 1-_> Einzel-Rg gedruckt - 'STATUS 2-_> Anlagen zur Rg gedruckt - 'STATUS 3-_> Sammel-Rg gedruckt - 'STATUS 4-_> ? irgendwas mit SR 6 Maut/Diesel?? - - If cboSammelrechnung._value = 0 AndAlso lblDruckDatum.Text = "" AndAlso RD_DRUCK = 2 Then ' (RECHNUNG.Status <> 4 ANDAlso RECHNUNG.Status <> 0) WARUM NOCHMALS?? - If RECHNUNG IsNot Nothing AndAlso (RECHNUNG.Status <> 0 AndAlso RECHNUNG.Status <> 2) Then - Return enableAUTOMAIL = False - Else - enableAUTOMAIL = True - End If + 'BEI EINZELRECHNUNG WIRD STATUS 0 und 2 geprüft + 'STATUS 0-_> Rechnung angelegt + 'STATUS 1-_> Einzel-Rg gedruckt + 'STATUS 2-_> Anlagen zur Rg gedruckt + 'STATUS 3-_> Sammel-Rg gedruckt + 'STATUS 4-_> ? irgendwas mit SR 6 Maut/Diesel?? + If cboSammelrechnung._value = 0 AndAlso lblDruckDatum.Text = "" AndAlso RD_DRUCK = 2 Then ' (RECHNUNG.Status <> 4 ANDAlso RECHNUNG.Status <> 0) WARUM NOCHMALS?? + If RECHNUNG IsNot Nothing AndAlso (RECHNUNG.Status <> 0 AndAlso RECHNUNG.Status <> 2) Then + Return enableAUTOMAIL = False Else - enableAUTOMAIL = False + enableAUTOMAIL = True + End If + + + Else + enableAUTOMAIL = False End If @@ -5608,18 +5608,18 @@ mwst: End Select - 'BEI EINZELRECHNUNG WIRD STATUS 0 und 2 geprüft + 'BEI EINZELRECHNUNG WIRD STATUS 0 und 2 geprüft - 'STATUS 0-_> Rechnung angelegt - 'STATUS 1-_> Einzel-Rg gedruckt - 'STATUS 2-_> Anlagen zur Rg gedruckt - 'STATUS 3-_> Sammel-Rg gedruckt - 'STATUS 4-_> ? irgendwas mit SR 6 Maut/Diesel?? + 'STATUS 0-_> Rechnung angelegt + 'STATUS 1-_> Einzel-Rg gedruckt + 'STATUS 2-_> Anlagen zur Rg gedruckt + 'STATUS 3-_> Sammel-Rg gedruckt + 'STATUS 4-_> ? irgendwas mit SR 6 Maut/Diesel?? - If RECHNUNG.Sammelrechnung = 0 AndAlso RECHNUNG.DruckDatumZeit Is Nothing AndAlso RD_DRUCK = 2 AndAlso (RECHNUNG.Status = 0 Or RECHNUNG.Status = 2) Then ' (RECHNUNG.Status <> 4 ANDAlso RECHNUNG.Status <> 0) WARUM NOCHMALS?? - enableAUTOMAIL = True - Else - enableAUTOMAIL = False + If RECHNUNG.Sammelrechnung = 0 AndAlso RECHNUNG.DruckDatumZeit Is Nothing AndAlso (RD_DRUCK = 2 Or RD_DRUCK = 5) AndAlso (RECHNUNG.Status = 0 Or RECHNUNG.Status = 2) Then ' (RECHNUNG.Status <> 4 ANDAlso RECHNUNG.Status <> 0) WARUM NOCHMALS?? + enableAUTOMAIL = True + Else + enableAUTOMAIL = False From 63a75e800e6e2a89ab0e4e227d67e5186c7831bd Mon Sep 17 00:00:00 2001 From: "d.breimaier" Date: Tue, 9 Jun 2026 15:29:26 +0200 Subject: [PATCH 06/17] API, etc. --- SDL/mdm/frmMDMDatenverarbetiung.vb | 24 +++ .../usrCntlFakturierung.Designer.vb | 96 +++++++++-- SDL/seriendruck/usrCntlFakturierung.vb | 153 ++++++++++++++++++ VERAG_PROG_ALLGEMEIN/Classes/cAPI.vb | 1 + VERAG_PROG_ALLGEMEIN/Classes/cAdressen.vb | 5 +- .../Classes/cMDMEInarbeitung.vb | 5 + VERAG_PROG_ALLGEMEIN/Classes/cRMC.vb | 2 - 7 files changed, 268 insertions(+), 18 deletions(-) diff --git a/SDL/mdm/frmMDMDatenverarbetiung.vb b/SDL/mdm/frmMDMDatenverarbetiung.vb index 69a843f6..0d6bcdad 100644 --- a/SDL/mdm/frmMDMDatenverarbetiung.vb +++ b/SDL/mdm/frmMDMDatenverarbetiung.vb @@ -4865,10 +4865,17 @@ LEFT JOIN VERAG.dbo.tbl_IDS_Länder land Select Case Lieferant Case "PLOSE" If SQL.doSQL("UPDATE tblPLOSE_Details SET plose_Fakturiert=1 WHERE plose_Fakturiert = 0 AND plose_DatumTransaktion between '" & dat_Sum_Von.Value.ToShortDateString & "' and '" & dat_Sum_Bis.Value.ToShortDateString & "' ", "FMZOLL") Then + + setBillingDateCompleted(Lieferant, datPloseAnhang.Value) + PictureBox1.Visible = True End If Case "UTA" If SQL.doSQL("UPDATE [tblUTAImportNew] set charged=1 where chargedDatetime is not null and isnull(charged,0) = 0 And tblUTAImportNew.Rechnungsdatum = '" & DateTimePicker2.Text & "'", "FMZOLL") Then + + setBillingDateCompleted(Lieferant, datPloseAnhang.Value) + setBillingDateCompleted("UTA_VERAG", datPloseAnhang.Value) + PictureBox1.Visible = True End If Case "MSE" @@ -4877,6 +4884,9 @@ LEFT JOIN VERAG.dbo.tbl_IDS_Länder land inner join [VERAG].[dbo].[tblMSETransactions] as trans on bills.[transaction_id] = trans.[transaction_id] inner join [VERAG].[dbo].[tblMSECustomers] as cust on cust.partner_customer_number = trans.partner_haulier_id where bills.invoice_date = '" & DateTimePicker2.Text & "' and trans.chargedDatetime is not null and isnull(trans.charged,0) = 0 ", "FMZOLL") Then + + setBillingDateCompleted(Lieferant, datPloseAnhang.Value) + PictureBox1.Visible = True End If @@ -4887,6 +4897,9 @@ LEFT JOIN VERAG.dbo.tbl_IDS_Länder land PictureBox1.Visible = True End If + setBillingDateCompleted(Lieferant, datPloseAnhang.Value) + setBillingDateCompleted("IDS_Details", datPloseAnhang.Value) + Case "IDS_AT" If SQL.doSQL("UPDATE [VERAG].[dbo].[tblIDSTransactionsNew] Set charged = 1 FROM [VERAG].[dbo].[tblIDSTransactionsNew] @@ -4897,8 +4910,16 @@ LEFT JOIN VERAG.dbo.tbl_IDS_Länder land MsgBox("Funktion setFakturiert für den Lieferant " & Lieferant & " nicht definiert!") End Select + + + End Sub + Sub setBillingDateCompleted(Lieferant_ As String, date_ As Date) + SQL.doSQL("UPDATE tblMDMEinarbeitung SET cast(billingdate as Date)='" & date_.ToShortDateString & "' WHERE supplier = " & Lieferant_ & " AND billingdate is null ", "FMZOLL") + End Sub + + Private Sub Button5_Click(sender As Object, e As EventArgs) Handles Button5.Click If test Then @@ -5000,6 +5021,9 @@ LEFT JOIN VERAG.dbo.tbl_IDS_Länder land If f.DialogResult = DialogResult.OK Then datum = f.Datum SQL.doSQL("DELETE FROM tblAsfinagMaut", "FMZOLL") + + setBillingDateCompleted("ASFINAG", f.Datum) + If SQL.doSQL("Update Abrechnungsdatum SET Abrechnungsdatum = '" & f.Datum.ToShortDateString & "'", "ASFINAG") Then If SQL.doSQL("UPDATE dbo.TTRBody SET Abrechnungsdatum = '" & f.Datum.ToShortDateString & "' WHERE (PKHistory = 0) AND (PKFileName LIKE N'" & checkifTestfiles() & ".%') AND (FileCreationDate <= '" & (f.Datum).AddDays(1).ToShortDateString & "') AND abrechnungsdatum IS NULL AND belegerstellungsdatum IS NULL", "ASFINAG") Then diff --git a/SDL/seriendruck/usrCntlFakturierung.Designer.vb b/SDL/seriendruck/usrCntlFakturierung.Designer.vb index 35d510b3..59e714af 100644 --- a/SDL/seriendruck/usrCntlFakturierung.Designer.vb +++ b/SDL/seriendruck/usrCntlFakturierung.Designer.vb @@ -46,6 +46,7 @@ Partial Class usrcntlFakturierung Me.Button18 = New System.Windows.Forms.Button() Me.Label44 = New System.Windows.Forms.Label() Me.GBSammelrechnung = New System.Windows.Forms.GroupBox() + Me.btnRE_Text = New System.Windows.Forms.Button() Me.btnFixeTaxe = New System.Windows.Forms.Button() Me.Label11 = New System.Windows.Forms.Label() Me.PictureBox6 = New System.Windows.Forms.PictureBox() @@ -99,7 +100,11 @@ Partial Class usrcntlFakturierung Me.btnRePos = New System.Windows.Forms.Button() Me.Validation1 = New SDL.EORI.validation() Me.btnWikiStatusmails = New System.Windows.Forms.Button() - Me.btnRE_Text = New System.Windows.Forms.Button() + Me.brnSR_abgeschlossen = New System.Windows.Forms.Button() + Me.PictureBox11 = New System.Windows.Forms.PictureBox() + Me.Label12 = New System.Windows.Forms.Label() + Me.Label13 = New System.Windows.Forms.Label() + Me.PictureBox12 = New System.Windows.Forms.PictureBox() Me.GroupBox1.SuspendLayout() Me.GBMautberichte.SuspendLayout() CType(Me.dgvMautbericht, System.ComponentModel.ISupportInitialize).BeginInit() @@ -114,6 +119,8 @@ Partial Class usrcntlFakturierung CType(Me.PictureBox3, System.ComponentModel.ISupportInitialize).BeginInit() CType(Me.PictureBox2, System.ComponentModel.ISupportInitialize).BeginInit() CType(Me.PictureBox1, System.ComponentModel.ISupportInitialize).BeginInit() + CType(Me.PictureBox11, System.ComponentModel.ISupportInitialize).BeginInit() + CType(Me.PictureBox12, System.ComponentModel.ISupportInitialize).BeginInit() Me.SuspendLayout() ' 'GroupBox1 @@ -344,6 +351,11 @@ Partial Class usrcntlFakturierung ' 'GBSammelrechnung ' + Me.GBSammelrechnung.Controls.Add(Me.PictureBox12) + Me.GBSammelrechnung.Controls.Add(Me.Label13) + Me.GBSammelrechnung.Controls.Add(Me.PictureBox11) + Me.GBSammelrechnung.Controls.Add(Me.Label12) + Me.GBSammelrechnung.Controls.Add(Me.brnSR_abgeschlossen) Me.GBSammelrechnung.Controls.Add(Me.btnRE_Text) Me.GBSammelrechnung.Controls.Add(Me.btnFixeTaxe) Me.GBSammelrechnung.Controls.Add(Me.Label11) @@ -399,10 +411,22 @@ Partial Class usrcntlFakturierung Me.GBSammelrechnung.Enabled = False Me.GBSammelrechnung.Location = New System.Drawing.Point(10, 356) Me.GBSammelrechnung.Name = "GBSammelrechnung" - Me.GBSammelrechnung.Size = New System.Drawing.Size(880, 403) + Me.GBSammelrechnung.Size = New System.Drawing.Size(880, 456) Me.GBSammelrechnung.TabIndex = 14 Me.GBSammelrechnung.TabStop = False ' + 'btnRE_Text + ' + Me.btnRE_Text.FlatStyle = System.Windows.Forms.FlatStyle.Flat + Me.btnRE_Text.ForeColor = System.Drawing.Color.FromArgb(CType(CType(0, Byte), Integer), CType(CType(54, Byte), Integer), CType(CType(128, Byte), Integer)) + Me.btnRE_Text.Location = New System.Drawing.Point(744, 223) + Me.btnRE_Text.Name = "btnRE_Text" + Me.btnRE_Text.Size = New System.Drawing.Size(107, 32) + Me.btnRE_Text.TabIndex = 127 + Me.btnRE_Text.Text = "RE-Text setzen" + Me.btnRE_Text.UseVisualStyleBackColor = True + Me.btnRE_Text.Visible = False + ' 'btnFixeTaxe ' Me.btnFixeTaxe.FlatStyle = System.Windows.Forms.FlatStyle.Flat @@ -829,7 +853,7 @@ Partial Class usrcntlFakturierung ' Me.btn_setRENr.FlatStyle = System.Windows.Forms.FlatStyle.Flat Me.btn_setRENr.ForeColor = System.Drawing.Color.FromArgb(CType(CType(0, Byte), Integer), CType(CType(54, Byte), Integer), CType(CType(128, Byte), Integer)) - Me.btn_setRENr.Location = New System.Drawing.Point(10, 191) + Me.btn_setRENr.Location = New System.Drawing.Point(10, 203) Me.btn_setRENr.Name = "btn_setRENr" Me.btn_setRENr.Size = New System.Drawing.Size(121, 49) Me.btn_setRENr.TabIndex = 32 @@ -943,17 +967,54 @@ Partial Class usrcntlFakturierung Me.btnWikiStatusmails.TabIndex = 72 Me.btnWikiStatusmails.UseVisualStyleBackColor = True ' - 'btnRE_Text + 'brnSR_abgeschlossen ' - Me.btnRE_Text.FlatStyle = System.Windows.Forms.FlatStyle.Flat - Me.btnRE_Text.ForeColor = System.Drawing.Color.FromArgb(CType(CType(0, Byte), Integer), CType(CType(54, Byte), Integer), CType(CType(128, Byte), Integer)) - Me.btnRE_Text.Location = New System.Drawing.Point(744, 223) - Me.btnRE_Text.Name = "btnRE_Text" - Me.btnRE_Text.Size = New System.Drawing.Size(107, 32) - Me.btnRE_Text.TabIndex = 127 - Me.btnRE_Text.Text = "RE-Text setzen" - Me.btnRE_Text.UseVisualStyleBackColor = True - Me.btnRE_Text.Visible = False + Me.brnSR_abgeschlossen.FlatStyle = System.Windows.Forms.FlatStyle.Flat + Me.brnSR_abgeschlossen.ForeColor = System.Drawing.Color.FromArgb(CType(CType(0, Byte), Integer), CType(CType(54, Byte), Integer), CType(CType(128, Byte), Integer)) + Me.brnSR_abgeschlossen.Location = New System.Drawing.Point(10, 388) + Me.brnSR_abgeschlossen.Name = "brnSR_abgeschlossen" + Me.brnSR_abgeschlossen.Size = New System.Drawing.Size(121, 49) + Me.brnSR_abgeschlossen.TabIndex = 128 + Me.brnSR_abgeschlossen.Text = "SR abschliesen" + Me.brnSR_abgeschlossen.UseVisualStyleBackColor = True + ' + 'PictureBox11 + ' + Me.PictureBox11.BackgroundImage = Global.SDL.My.Resources.Resources.ok + Me.PictureBox11.BackgroundImageLayout = System.Windows.Forms.ImageLayout.Zoom + Me.PictureBox11.Location = New System.Drawing.Point(148, 398) + Me.PictureBox11.Name = "PictureBox11" + Me.PictureBox11.Size = New System.Drawing.Size(14, 14) + Me.PictureBox11.TabIndex = 130 + Me.PictureBox11.TabStop = False + Me.PictureBox11.Visible = False + ' + 'Label12 + ' + Me.Label12.Location = New System.Drawing.Point(168, 398) + Me.Label12.Name = "Label12" + Me.Label12.Size = New System.Drawing.Size(224, 17) + Me.Label12.TabIndex = 129 + Me.Label12.Text = "Sammelrechnung abgeschlossen" + ' + 'Label13 + ' + Me.Label13.Location = New System.Drawing.Point(168, 412) + Me.Label13.Name = "Label13" + Me.Label13.Size = New System.Drawing.Size(224, 17) + Me.Label13.TabIndex = 131 + Me.Label13.Text = "Auswertung per Mail geschickt" + ' + 'PictureBox12 + ' + Me.PictureBox12.BackgroundImage = Global.SDL.My.Resources.Resources.ok + Me.PictureBox12.BackgroundImageLayout = System.Windows.Forms.ImageLayout.Zoom + Me.PictureBox12.Location = New System.Drawing.Point(148, 414) + Me.PictureBox12.Name = "PictureBox12" + Me.PictureBox12.Size = New System.Drawing.Size(14, 14) + Me.PictureBox12.TabIndex = 132 + Me.PictureBox12.TabStop = False + Me.PictureBox12.Visible = False ' 'usrcntlFakturierung ' @@ -968,7 +1029,7 @@ Partial Class usrcntlFakturierung Me.Controls.Add(Me.Label3) Me.Controls.Add(Me.GroupBox1) Me.Name = "usrcntlFakturierung" - Me.Size = New System.Drawing.Size(1149, 782) + Me.Size = New System.Drawing.Size(1149, 815) Me.GroupBox1.ResumeLayout(False) Me.GBMautberichte.ResumeLayout(False) Me.GBMautberichte.PerformLayout() @@ -985,6 +1046,8 @@ Partial Class usrcntlFakturierung CType(Me.PictureBox3, System.ComponentModel.ISupportInitialize).EndInit() CType(Me.PictureBox2, System.ComponentModel.ISupportInitialize).EndInit() CType(Me.PictureBox1, System.ComponentModel.ISupportInitialize).EndInit() + CType(Me.PictureBox11, System.ComponentModel.ISupportInitialize).EndInit() + CType(Me.PictureBox12, System.ComponentModel.ISupportInitialize).EndInit() Me.ResumeLayout(False) Me.PerformLayout() @@ -1065,4 +1128,9 @@ Partial Class usrcntlFakturierung Friend WithEvents PictureBox6 As PictureBox Friend WithEvents btnFixeTaxe As Button Friend WithEvents btnRE_Text As Button + Friend WithEvents PictureBox11 As PictureBox + Friend WithEvents Label12 As Label + Friend WithEvents brnSR_abgeschlossen As Button + Friend WithEvents PictureBox12 As PictureBox + Friend WithEvents Label13 As Label End Class diff --git a/SDL/seriendruck/usrCntlFakturierung.vb b/SDL/seriendruck/usrCntlFakturierung.vb index ef2e83ca..c15a3152 100644 --- a/SDL/seriendruck/usrCntlFakturierung.vb +++ b/SDL/seriendruck/usrCntlFakturierung.vb @@ -1,6 +1,7 @@ Imports System.Globalization Imports System.IO Imports System.Web.UI.WebControls.Expressions +Imports com.sun.xml.internal.rngom.digested Imports VERAG_PROG_ALLGEMEIN Public Class usrcntlFakturierung @@ -1946,6 +1947,37 @@ Public Class usrcntlFakturierung btn_Mautanh_entfernen.Enabled = sammelrechnung0vorhanden + Dim SR_vorhanden As Integer = CInt((New SQL).getValueTxtBySqlVarList("SELECT COUNT(*) From tblMDMEinarbeitung + where cast(billingdate as Date) = '" & CDate(dtRechnungsdatum.Text) & "'", "FMZOLL",, 0)) + + If SR_vorhanden > 0 Then + + Dim SR_nicht_abgeschlossen As Integer = CInt((New SQL).getValueTxtBySqlVarList("SELECT COUNT(*) From tblMDMEinarbeitung where cast(billingdate as Date) = '" & CDate(dtRechnungsdatum.Text) & "' AND isnull(billing_completed,0) = 0", "FMZOLL",, 0)) + + If SR_nicht_abgeschlossen > 0 Then + brnSR_abgeschlossen.Enabled = True + + showPic(False, PictureBox11) + showPic(False, PictureBox12) + + Else + brnSR_abgeschlossen.Enabled = False + + showPic(True, PictureBox11) + showPic(True, PictureBox12) + + End If + + Else + brnSR_abgeschlossen.Enabled = False + showPic(False, PictureBox11) + showPic(False, PictureBox12) + End If + + + + + End Sub @@ -2259,4 +2291,125 @@ Public Class usrcntlFakturierung showPic(setRechnungstext(Sachbearbeiter, rechnungsdatum, dtSammelrechnungen, setText), PictureBox3) End Sub + + Private Sub brnSR_abgeschlossen_Click(sender As Object, e As EventArgs) Handles brnSR_abgeschlossen.Click + + Dim setAbschlossen As Boolean = False + Dim rechnungsdatum As Date = CDate(dtRechnungsdatum.Text) + + Dim res As MsgBoxResult + res = MsgBox("Möchten Sie die MDM Sammelrechnung für den " & rechnungsdatum.ToShortDateString & " abschließen?", vbYesNoCancel) + Select Case res + Case MsgBoxResult.Yes : setAbschlossen = True + Case MsgBoxResult.Cancel : Exit Sub + End Select + + If setAbschlossen Then + Dim SQL As New VERAG_PROG_ALLGEMEIN.SQL + If SQL.doSQL("Update tblMDMEinarbeitung set billing_completed = 1, billing_completed_user = '" & cAllgemein.USRKURZNAME & "' where cast(billingdate as Date) = '" & rechnungsdatum.ToShortDateString & "' and isnull(billing_completed,0) = 0 ", "FMZOLL") Then + showPic(True, PictureBox11) + + + If rechnungsdatum.Day = Date.DaysInMonth(rechnungsdatum.Year, rechnungsdatum.Month) Then 'Mailversand nur am SR am Ende des Monats mit Daten des Vormonats + If Not VERAG_PROG_ALLGEMEIN.cAllgemein.TESTSYSTEM Then + Dim firstDayLastMonth As Date = New Date(Today.Year, Today.Month, 1).AddMonths(-1) + Dim lastDayLastMonth As Date = New Date(Today.Year, Today.Month, 1).AddDays(-1) + Dim path = createAuswertung(firstDayLastMonth, lastDayLastMonth) + If path <> "" Then + If sendAuswertung(path, firstDayLastMonth, lastDayLastMonth) Then + showPic(True, PictureBox12) + Else + showPic(False, PictureBox12) + End If + End If + Else + showPic(False, PictureBox12) + End If + + + End If + + Else + showPic(False, PictureBox11) + End If + End If + + + End Sub + + + Private Function createAuswertung(von As Date, bis As Date) As String + + 'Daten sind immer vom Vormonat! + + + + + Dim SQLString = "SELECT year(rechnungsdatum)Year,MONTH(rechnungsdatum)Month,RechnungsKundenNr CustomerNo, Adressen.Ordnungsbegriff Customer,Adressen.LandKz Ctry, Offertenstamm.OffertenNr, Offertenstamm.OffertenBez,leistungen.LeistungsNr ProdNo,leistungen.LeistungsBez ProdDscr, /*count(distinct([Rechnungsausgang].Rk_ID)) CountInv,*/ sum(RechnungsausgangPositionen.SteuerfreierBetrag+RechnungsausgangPositionen.SteuerpflichtigerBetrag)NetSum,ReverseCharge + FROM [VERAG].[dbo].[Rechnungsausgang] + inner join Adressen on RechnungsKundenNr=AdressenNr + inner join RechnungsausgangPositionen on Rechnungsausgang.RK_ID= RechnungsausgangPositionen.rk_id + inner join leistungen on leistungen.LeistungsNr=RechnungsausgangPositionen.LeistungsNr + inner join Offertenstamm on Offertenstamm.OffertenNr=Rechnungsausgang.OffertenNr + where Firma_ID=19 + AND RechnungsDatum >= DATEADD(MONTH, DATEDIFF(MONTH, 0, GETDATE()) - 1, 0) + AND RechnungsDatum < DATEADD(MONTH, DATEDIFF(MONTH, 0, GETDATE()), 0) + group by year(rechnungsdatum),MONTH(rechnungsdatum),RechnungsKundenNr,Offertenstamm.OffertenNr,Offertenstamm.OffertenBez,Adressen.Ordnungsbegriff,Adressen.LandKz , leistungen.LeistungsNr,leistungen.LeistungsBez,ReverseCharge + order by Year,Month,CustomerNo,Offertenstamm.OffertenNr,Offertenstamm.OffertenBez,leistungen.LeistungsNr" + + Dim dt As DataTable = (New SQL).loadDgvBySql(SQLString, "FMZOLL", 300) + + If dt.Rows.Count > 0 Then + + Dim filepath = VERAG_PROG_ALLGEMEIN.cProgramFunctions.genExcelFromDT_NEW(dt,,,,, False, "Report-Invoice-Data_" & von.ToShortDateString & "-" & bis.ToShortDateString) + Return filepath + Else + + Return "" + + End If + + + + End Function + Private Function sendAuswertung(pfad As String, von As Date, bis As Date) + + Dim betreff = "" + Dim pfadList As New List(Of String) + pfadList.Add(pfad) + + Dim EMails As String = "mahin.abbasi@360pays.com;lara.jednacak@360pays.com" + Dim EMails_CC As String = "" + Dim EMails_BCC As String = "d.breimaier@verag.ag,al@verag.ag" + + Dim Body = "Attached are the reports for the Verag 360 invoice from " & von.ToShortDateString & " to " & bis.ToShortDateString & "." & + "

Created on: " & Now.ToShortDateString & " at " & Now.ToShortTimeString & + "


Automatically generated email. Please do not reply to this email." + + + betreff = betreff.Replace(vbNewLine, "").Replace(vbCr, "").Replace(vbLf, "").Replace(vbCrLf, "").Replace(System.Environment.NewLine, " ") + + Dim API = VERAG_PROG_ALLGEMEIN.cAPI.INSERT_API(VERAG_PROG_ALLGEMEIN.cAPI_INOUT.OUT, VERAG_PROG_ALLGEMEIN.cAPI_Type.MAIL, VERAG_PROG_ALLGEMEIN.cAPI_ART.SDL_OUT_MDM_AUSWERTUNG) + API.api_EMail = EMails + API.api_EMailCC = EMails_CC + API.api_EMailBCC = EMails_BCC + API.api_EMailSubject = betreff + API.api_EMailText = Body + API.api_EMailAttCnt = pfadList.Count + + + If VERAG_PROG_ALLGEMEIN.cProgramFunctions.sendMail(EMails, betreff, Body,, False, False, EMails_CC, EMails_BCC, pfadList) Then + API.UPDTAE_OK() + brnSR_abgeschlossen.Enabled = False + + Else + API.UPDTAE_ERR() + End If + + + + + End Function + + End Class diff --git a/VERAG_PROG_ALLGEMEIN/Classes/cAPI.vb b/VERAG_PROG_ALLGEMEIN/Classes/cAPI.vb index 228e9bc3..f15f7a50 100644 --- a/VERAG_PROG_ALLGEMEIN/Classes/cAPI.vb +++ b/VERAG_PROG_ALLGEMEIN/Classes/cAPI.vb @@ -31,6 +31,7 @@ Public Enum cAPI_ART AVISO_OUT_SAMMELRECHNUNG = 84 AVISO_OUT_EINZELRECHNUNG = 85 SDL_OUT_RS_ORIGINALRECHNUNGEN = 86 + SDL_OUT_MDM_AUSWERTUNG = 87 End Enum diff --git a/VERAG_PROG_ALLGEMEIN/Classes/cAdressen.vb b/VERAG_PROG_ALLGEMEIN/Classes/cAdressen.vb index 7aee3af3..d3bbb16d 100644 --- a/VERAG_PROG_ALLGEMEIN/Classes/cAdressen.vb +++ b/VERAG_PROG_ALLGEMEIN/Classes/cAdressen.vb @@ -1,5 +1,6 @@ Imports System.Data.SqlClient Imports System.Reflection +Imports System.Text.RegularExpressions Public Class cAdressen Property Auswahl As Object = Nothing @@ -166,7 +167,7 @@ Public Class cAdressen 'Prüfung Neuanlage: Nur Hinweismeldung! -> speichern soll trotzdem möglich sein! If checkUID(KD, kundenNameUID, UIDMehfachverwendung) Then ERROR_TXT = "Die UID Nummer existiert bereits " & kundenNameUID & "!" & vbNewLine & "Bitte prüfen, damit es zu keiner doppelten Erfassung des Kunden kommt." : Return False Else - Try + Try Dim kunde = DirectCast(KD, cKunde) Dim addresseTemp = New cAdressen(kunde.KundenNr) If Not (addresseTemp.UstIdKz = UstIdKz And addresseTemp.UstIdNr = UstIdNr) Then @@ -314,7 +315,7 @@ Public Class cAdressen Try Using conn As SqlConnection = SQL.GetNewOpenConnectionFMZOLL(False) - Using cmd As New SqlCommand("Select TOP(1) * FROM Adressen WHERE (UstIdKz + UstIdNr='" & UIDNr & "' or Steuernummer ='" & UIDNr & "') AND (WölflKundenNr = " & woelflKdNr & " OR weitereWölflKundenNr = " & woelflKdNr & ") " & IIf(isWoelfKdNr, " AND (AdressenNr LIKE '15%' or AdressenNr LIKE '18%')", ""), conn) + Using cmd As New SqlCommand("Select TOP(1) * FROM Adressen WHERE (UstIdKz + UstIdNr='" & UIDNr & "' or Steuernummer ='" & Regex.Replace(UIDNr, "[^0-9.-]", "") & "') AND (WölflKundenNr = " & woelflKdNr & " OR weitereWölflKundenNr = " & woelflKdNr & ") " & IIf(isWoelfKdNr, " AND (AdressenNr LIKE '15%' or AdressenNr LIKE '18%')", ""), conn) Dim dr = cmd.ExecuteReader() If dr.Read Then diff --git a/VERAG_PROG_ALLGEMEIN/Classes/cMDMEInarbeitung.vb b/VERAG_PROG_ALLGEMEIN/Classes/cMDMEInarbeitung.vb index af8c217f..332ea020 100644 --- a/VERAG_PROG_ALLGEMEIN/Classes/cMDMEInarbeitung.vb +++ b/VERAG_PROG_ALLGEMEIN/Classes/cMDMEInarbeitung.vb @@ -13,6 +13,9 @@ Public Class cMDMEinarbeitung Property completed_date As Object = Nothing Property import_date As Object = Nothing Property importfilename As Object = Nothing + Property billingdate As Object = Nothing + Property billing_completed As Boolean = False + Public hasEntry = False @@ -48,6 +51,8 @@ Public Class cMDMEinarbeitung list.Add(New VERAG_PROG_ALLGEMEIN.SQLVariable("completed_date", completed_date)) list.Add(New VERAG_PROG_ALLGEMEIN.SQLVariable("import_date", import_date)) list.Add(New VERAG_PROG_ALLGEMEIN.SQLVariable("importfilename", importfilename)) + list.Add(New VERAG_PROG_ALLGEMEIN.SQLVariable("billingdate", billingdate)) + list.Add(New VERAG_PROG_ALLGEMEIN.SQLVariable("billing_completed", billing_completed)) Return list End Function diff --git a/VERAG_PROG_ALLGEMEIN/Classes/cRMC.vb b/VERAG_PROG_ALLGEMEIN/Classes/cRMC.vb index a548e9c6..539f028e 100644 --- a/VERAG_PROG_ALLGEMEIN/Classes/cRMC.vb +++ b/VERAG_PROG_ALLGEMEIN/Classes/cRMC.vb @@ -1,8 +1,6 @@  Imports System.Data.SqlClient Imports System.Reflection -Imports System.Web.Configuration -Imports io.konik.zugferd Public Class cRMC Property rmc_id As Integer From 3724f77c4c1e40a147da1daa916c7e8fa1badbda Mon Sep 17 00:00:00 2001 From: "d.breimaier" Date: Tue, 9 Jun 2026 15:48:27 +0200 Subject: [PATCH 07/17] fakt-Mailversand --- SDL/seriendruck/usrCntlFakturierung.vb | 14 ++++++-------- 1 file changed, 6 insertions(+), 8 deletions(-) diff --git a/SDL/seriendruck/usrCntlFakturierung.vb b/SDL/seriendruck/usrCntlFakturierung.vb index c15a3152..f327cada 100644 --- a/SDL/seriendruck/usrCntlFakturierung.vb +++ b/SDL/seriendruck/usrCntlFakturierung.vb @@ -1,7 +1,6 @@ Imports System.Globalization Imports System.IO Imports System.Web.UI.WebControls.Expressions -Imports com.sun.xml.internal.rngom.digested Imports VERAG_PROG_ALLGEMEIN Public Class usrcntlFakturierung @@ -2312,11 +2311,10 @@ Public Class usrcntlFakturierung If rechnungsdatum.Day = Date.DaysInMonth(rechnungsdatum.Year, rechnungsdatum.Month) Then 'Mailversand nur am SR am Ende des Monats mit Daten des Vormonats If Not VERAG_PROG_ALLGEMEIN.cAllgemein.TESTSYSTEM Then - Dim firstDayLastMonth As Date = New Date(Today.Year, Today.Month, 1).AddMonths(-1) - Dim lastDayLastMonth As Date = New Date(Today.Year, Today.Month, 1).AddDays(-1) - Dim path = createAuswertung(firstDayLastMonth, lastDayLastMonth) + Dim firstDayOfMonth As Date = New Date(rechnungsdatum.Year, rechnungsdatum.Month, 1) + Dim path = createAuswertung(firstDayOfMonth, rechnungsdatum) If path <> "" Then - If sendAuswertung(path, firstDayLastMonth, lastDayLastMonth) Then + If sendAuswertung(path, firstDayOfMonth, rechnungsdatum) Then showPic(True, PictureBox12) Else showPic(False, PictureBox12) @@ -2352,8 +2350,8 @@ Public Class usrcntlFakturierung inner join leistungen on leistungen.LeistungsNr=RechnungsausgangPositionen.LeistungsNr inner join Offertenstamm on Offertenstamm.OffertenNr=Rechnungsausgang.OffertenNr where Firma_ID=19 - AND RechnungsDatum >= DATEADD(MONTH, DATEDIFF(MONTH, 0, GETDATE()) - 1, 0) - AND RechnungsDatum < DATEADD(MONTH, DATEDIFF(MONTH, 0, GETDATE()), 0) + AND cast(RechnungsDatum as Date) >= '" & von.ToShortDateString & "' + AND cast(RechnungsDatum as Date) <= '" & bis.ToShortDateString & "' group by year(rechnungsdatum),MONTH(rechnungsdatum),RechnungsKundenNr,Offertenstamm.OffertenNr,Offertenstamm.OffertenBez,Adressen.Ordnungsbegriff,Adressen.LandKz , leistungen.LeistungsNr,leistungen.LeistungsBez,ReverseCharge order by Year,Month,CustomerNo,Offertenstamm.OffertenNr,Offertenstamm.OffertenBez,leistungen.LeistungsNr" @@ -2382,7 +2380,7 @@ Public Class usrcntlFakturierung Dim EMails_CC As String = "" Dim EMails_BCC As String = "d.breimaier@verag.ag,al@verag.ag" - Dim Body = "Attached are the reports for the Verag 360 invoice from " & von.ToShortDateString & " to " & bis.ToShortDateString & "." & + Dim Body = "Attached is the report for the Verag 360 invoices from " & von.ToShortDateString & " to " & bis.ToShortDateString & "." & "

Created on: " & Now.ToShortDateString & " at " & Now.ToShortTimeString & "


Automatically generated email. Please do not reply to this email." From c6762fa687e3ca2a666c5ca722f4dc716606a7d5 Mon Sep 17 00:00:00 2001 From: "d.breimaier" Date: Tue, 9 Jun 2026 16:11:51 +0200 Subject: [PATCH 08/17] fakt, Version, Spedbuch-Suche --- SDL/My Project/AssemblyInfo.vb | 4 +- .../usrCntlSpeditionsBuchSuche.vb | 47 +++++++++---------- SDL/seriendruck/usrCntlFakturierung.vb | 9 +--- 3 files changed, 25 insertions(+), 35 deletions(-) diff --git a/SDL/My Project/AssemblyInfo.vb b/SDL/My Project/AssemblyInfo.vb index aac6d6d4..d690090a 100644 --- a/SDL/My Project/AssemblyInfo.vb +++ b/SDL/My Project/AssemblyInfo.vb @@ -31,5 +31,5 @@ Imports System.Runtime.InteropServices ' übernehmen, indem Sie "*" eingeben: ' - - + + diff --git a/SDL/Speditionsbuch/usrCntlSpeditionsBuchSuche.vb b/SDL/Speditionsbuch/usrCntlSpeditionsBuchSuche.vb index 303aa325..9a6605dd 100644 --- a/SDL/Speditionsbuch/usrCntlSpeditionsBuchSuche.vb +++ b/SDL/Speditionsbuch/usrCntlSpeditionsBuchSuche.vb @@ -1809,27 +1809,27 @@ Public Class usrCntlSpeditionsBuchSuche If existingRow IsNot Nothing Then - existingRow("Anzahl") = CInt(existingRow("Anzahl")) + anz - existingRow("BAR") = CDbl(existingRow("BAR")) + bar - existingRow("HANDLING") = CDbl(existingRow("HANDLING")) + handling - existingRow("zu_kassieren_BAR") = CDbl(existingRow("zu_kassieren_BAR")) + zukassBAR - Else - - Dim R As DataRow = dt_summen.NewRow() - R("Anzahl") = anz - R("BAR") = bar - R("HANDLING") = handling - R("zu_kassieren_BAR") = zukassBAR - R("Grenzstelle") = grenzstelle - R("FilialNr") = filialNr - - dt_summen.Rows.Add(R) - End If + existingRow("Anzahl") = CInt(existingRow("Anzahl")) + anz + existingRow("BAR") = CDbl(existingRow("BAR")) + bar + existingRow("HANDLING") = CDbl(existingRow("HANDLING")) + handling + existingRow("zu_kassieren_BAR") = CDbl(existingRow("zu_kassieren_BAR")) + zukassBAR + Else + Dim R As DataRow = dt_summen.NewRow() + R("Anzahl") = anz + R("BAR") = bar + R("HANDLING") = handling + R("zu_kassieren_BAR") = zukassBAR + R("Grenzstelle") = grenzstelle + R("FilialNr") = filialNr + dt_summen.Rows.Add(R) End If - sumAnz += anz + + End If + + sumAnz += anz sumBar += bar sumhandling += handling sumzukassBAR += zukassBAR @@ -1853,7 +1853,7 @@ Public Class usrCntlSpeditionsBuchSuche Dim sb As New System.Text.StringBuilder - sb.AppendLine(String.Format("{0,-15} {1,6} {2,12} {3,15} {4,15}", "Grenzstelle", "Anz", "Bar", "Kassiert BAR", "Handling")) + sb.AppendLine(String.Format("{0,-15} {1,6} {2,12} {3,15} {4,15}", "Grenzstelle", "Anz", "zu kassieren", "kassiert", "Handling")) sb.AppendLine(New String("-"c, 65)) @@ -1861,11 +1861,11 @@ Public Class usrCntlSpeditionsBuchSuche Dim grenzstelle As String = If(IsDBNull(r_("Grenzstelle")), "", r_("Grenzstelle").ToString()) Dim anz As Integer = If(IsDBNull(r_("Anzahl")), 0, CInt(r_("Anzahl"))) - Dim bar As Double = If(IsDBNull(r_("BAR")), 0, CDbl(r_("BAR"))) Dim kass As Double = If(IsDBNull(r_("zu_kassieren_BAR")), 0, CDbl(r_("zu_kassieren_BAR"))) + Dim bar As Double = If(IsDBNull(r_("BAR")), 0, CDbl(r_("BAR"))) Dim handling As Double = If(IsDBNull(r_("HANDLING")), 0, CDbl(r_("HANDLING"))) - sb.AppendLine(String.Format("{0,-15} {1,6} {2,12:N2} {3,15:N2} {4,15:N2}", grenzstelle, anz, bar, kass, handling)) + sb.AppendLine(String.Format("{0,-15} {1,6} {2,12:N2} {3,15:N2} {4,15:N2}", grenzstelle, anz, kass, bar, handling)) Next SumText = sb.ToString() @@ -3119,11 +3119,8 @@ Public Class usrCntlSpeditionsBuchSuche Dim Abfertigungsart As Integer OffertenNr = 2 : Abfertigungsart = 23 - If isGutschrift Then - RG.Anlage_1 = "SA Handling " & grenzstelle - Else - RG.Anlage_1 = "SA Gutschrift " & grenzstelle - End If + + RG.Anlage_1 = "SA " & grenzstelle If grenzstelle = "NKD" AndAlso VERAG_PROG_ALLGEMEIN.cAllgemein.FIRMA_ID = 1 Then RG.Firma_ID = 11 'wenn NKD diff --git a/SDL/seriendruck/usrCntlFakturierung.vb b/SDL/seriendruck/usrCntlFakturierung.vb index f327cada..02a35f93 100644 --- a/SDL/seriendruck/usrCntlFakturierung.vb +++ b/SDL/seriendruck/usrCntlFakturierung.vb @@ -2307,9 +2307,7 @@ Public Class usrcntlFakturierung Dim SQL As New VERAG_PROG_ALLGEMEIN.SQL If SQL.doSQL("Update tblMDMEinarbeitung set billing_completed = 1, billing_completed_user = '" & cAllgemein.USRKURZNAME & "' where cast(billingdate as Date) = '" & rechnungsdatum.ToShortDateString & "' and isnull(billing_completed,0) = 0 ", "FMZOLL") Then showPic(True, PictureBox11) - - - If rechnungsdatum.Day = Date.DaysInMonth(rechnungsdatum.Year, rechnungsdatum.Month) Then 'Mailversand nur am SR am Ende des Monats mit Daten des Vormonats + If rechnungsdatum.Day = Date.DaysInMonth(rechnungsdatum.Year, rechnungsdatum.Month) Then If Not VERAG_PROG_ALLGEMEIN.cAllgemein.TESTSYSTEM Then Dim firstDayOfMonth As Date = New Date(rechnungsdatum.Year, rechnungsdatum.Month, 1) Dim path = createAuswertung(firstDayOfMonth, rechnungsdatum) @@ -2338,11 +2336,6 @@ Public Class usrcntlFakturierung Private Function createAuswertung(von As Date, bis As Date) As String - 'Daten sind immer vom Vormonat! - - - - Dim SQLString = "SELECT year(rechnungsdatum)Year,MONTH(rechnungsdatum)Month,RechnungsKundenNr CustomerNo, Adressen.Ordnungsbegriff Customer,Adressen.LandKz Ctry, Offertenstamm.OffertenNr, Offertenstamm.OffertenBez,leistungen.LeistungsNr ProdNo,leistungen.LeistungsBez ProdDscr, /*count(distinct([Rechnungsausgang].Rk_ID)) CountInv,*/ sum(RechnungsausgangPositionen.SteuerfreierBetrag+RechnungsausgangPositionen.SteuerpflichtigerBetrag)NetSum,ReverseCharge FROM [VERAG].[dbo].[Rechnungsausgang] inner join Adressen on RechnungsKundenNr=AdressenNr From 655d96b89ff7634bfcdb3fb64b32ac4bd099cd86 Mon Sep 17 00:00:00 2001 From: "d.breimaier" Date: Tue, 9 Jun 2026 16:32:19 +0200 Subject: [PATCH 09/17] Laufzettel, etc. --- SDL/Formulare/KDFormulare/frmFormulare.vb | 2 ++ 1 file changed, 2 insertions(+) diff --git a/SDL/Formulare/KDFormulare/frmFormulare.vb b/SDL/Formulare/KDFormulare/frmFormulare.vb index 96f302c2..922cc118 100644 --- a/SDL/Formulare/KDFormulare/frmFormulare.vb +++ b/SDL/Formulare/KDFormulare/frmFormulare.vb @@ -3065,6 +3065,8 @@ Public Class FormularManagerNEU gesColli = 0 gesGewicht = 0 + rpt.TextBox13.Visible = False 'lfdNr von ABT nicht anzeigen + rpt.txtLKW.Text = AVISO.LKW_Nr rpt.txtLKWId.Text = AVISO.AvisoID From e6b58a365c1d08b5582f9807eec50693b70ca84c Mon Sep 17 00:00:00 2001 From: "d.breimaier" Date: Tue, 9 Jun 2026 16:58:53 +0200 Subject: [PATCH 10/17] fakt, etc. --- SDL/seriendruck/usrCntlFakturierung.vb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/SDL/seriendruck/usrCntlFakturierung.vb b/SDL/seriendruck/usrCntlFakturierung.vb index 02a35f93..295e1fa9 100644 --- a/SDL/seriendruck/usrCntlFakturierung.vb +++ b/SDL/seriendruck/usrCntlFakturierung.vb @@ -2371,7 +2371,7 @@ Public Class usrcntlFakturierung Dim EMails As String = "mahin.abbasi@360pays.com;lara.jednacak@360pays.com" Dim EMails_CC As String = "" - Dim EMails_BCC As String = "d.breimaier@verag.ag,al@verag.ag" + Dim EMails_BCC As String = cMitarbeiter.GetEMailRecipientForEmailNotification("Auswertung-360Pays", 19) Dim Body = "Attached is the report for the Verag 360 invoices from " & von.ToShortDateString & " to " & bis.ToShortDateString & "." & "

Created on: " & Now.ToShortDateString & " at " & Now.ToShortTimeString & From 11a30ec7ca3daaf5042b0a1d3edc056e4abe0e14 Mon Sep 17 00:00:00 2001 From: "d.breimaier" Date: Wed, 10 Jun 2026 09:15:59 +0200 Subject: [PATCH 11/17] abrechnungsmaske, etc. --- SDL/Fakturierung/frmAbrechnungsMaske.vb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/SDL/Fakturierung/frmAbrechnungsMaske.vb b/SDL/Fakturierung/frmAbrechnungsMaske.vb index 0cc6b6a0..1d92fd4a 100644 --- a/SDL/Fakturierung/frmAbrechnungsMaske.vb +++ b/SDL/Fakturierung/frmAbrechnungsMaske.vb @@ -329,7 +329,7 @@ Public Class frmAbrechnungsMaske If cboRechnungsdruck._value <> "" Then Select Case cboRechnungsdruck._value - Case 6 : sqlstr &= " And Rechnungsdruck='3' And isnull(Automailversand,0)=1 " : enableAUTOMAIL_BTN = True + Case 6 : sqlstr &= " And Rechnungsdruck='2' And isnull(Automailversand,0)=1 " : enableAUTOMAIL_BTN = True Case 7 : sqlstr &= " And Rechnungsdruck='5' And isnull(Automailversand,0)=1 " : enableAUTOMAIL_BTN = True Case 2 : sqlstr &= " And Rechnungsdruck='" & cboRechnungsdruck._value & "' And isnull(Automailversand,0)=0" : enableAUTOMAIL_BTN = True Case 5 : sqlstr &= " And Rechnungsdruck='" & cboRechnungsdruck._value & "' And isnull(Automailversand,0)=0" : enableAUTOMAIL_BTN = False From 45a5bf57b5c46569b0043b258858a70f8b0ce3ea Mon Sep 17 00:00:00 2001 From: "d.breimaier" Date: Wed, 10 Jun 2026 11:40:50 +0200 Subject: [PATCH 12/17] fakt, etc. --- SDL/Fakturierung/frmAbrechnungsMaske.vb | 2 +- SDL/Fakturierung/frmFaktSammelRgDrucken.vb | 4 +- .../usrCntlSpeditionsBuchSuche.vb | 2 - SDL/mdm/usrcntlFremdrechnungen.Designer.vb | 55 ++++++++++--------- 4 files changed, 31 insertions(+), 32 deletions(-) diff --git a/SDL/Fakturierung/frmAbrechnungsMaske.vb b/SDL/Fakturierung/frmAbrechnungsMaske.vb index 1d92fd4a..e299e7a6 100644 --- a/SDL/Fakturierung/frmAbrechnungsMaske.vb +++ b/SDL/Fakturierung/frmAbrechnungsMaske.vb @@ -331,7 +331,7 @@ Public Class frmAbrechnungsMaske Select Case cboRechnungsdruck._value Case 6 : sqlstr &= " And Rechnungsdruck='2' And isnull(Automailversand,0)=1 " : enableAUTOMAIL_BTN = True Case 7 : sqlstr &= " And Rechnungsdruck='5' And isnull(Automailversand,0)=1 " : enableAUTOMAIL_BTN = True - Case 2 : sqlstr &= " And Rechnungsdruck='" & cboRechnungsdruck._value & "' And isnull(Automailversand,0)=0" : enableAUTOMAIL_BTN = True + Case 2 : sqlstr &= " And Rechnungsdruck='" & cboRechnungsdruck._value & "' And isnull(Automailversand,0)=0" : enableAUTOMAIL_BTN = False Case 5 : sqlstr &= " And Rechnungsdruck='" & cboRechnungsdruck._value & "' And isnull(Automailversand,0)=0" : enableAUTOMAIL_BTN = False Case Else sqlstr &= " And Rechnungsdruck='" & cboRechnungsdruck._value & "' And isnull(Automailversand,0)=0 " : enableAUTOMAIL = False diff --git a/SDL/Fakturierung/frmFaktSammelRgDrucken.vb b/SDL/Fakturierung/frmFaktSammelRgDrucken.vb index 4fded175..c4b107f1 100644 --- a/SDL/Fakturierung/frmFaktSammelRgDrucken.vb +++ b/SDL/Fakturierung/frmFaktSammelRgDrucken.vb @@ -672,10 +672,10 @@ Public Class frmFaktSammelRgDrucken Dim abfertigungsarten = getValues() Dim IM_EX As Boolean = False - IM_EX = r.Cells("IM_EX").Value IsNot Nothing AndAlso Not IsDBNull(r.Cells("IM_EX").Value) AndAlso r.Cells("RENR").Value = True + IM_EX = r.Cells("IM_EX").Value IsNot Nothing AndAlso Not IsDBNull(r.Cells("IM_EX").Value) AndAlso Not IsDBNull(r.Cells("RENR").Value) AndAlso r.Cells("RENR").Value <> "" If abfertigungsarten = "" AndAlso IM_EX Then - + MsgBox("Achtung, Rechnung für Kunde " & r.Cells("RechnungsKundenNr").Value & " wurde nicht gesetzt, weil keine Abfertigungsart ausgewählt wurde!") Else RechnungsNrisSet = cFakturierung.doSAMMELRechnungsDruck(cboFirma._value, Sammelrechung, CDate(txtZeitraumBis.Text), CDate(txtRechnungsdatum.Text), cboPrinter.Text, cbxEinzelAnlagen.Checked, cbxSammelbericht.Checked, getSelectionKdNr, 7, listPDFs, cboSB._value,,, getAvisoIds, cbxEVOLOG.Checked, SonstAnlagen, , cbxTransFerry.Checked, cboFaktGrp._value, abfertigungsarten,,, True) If Not RechnungsNrisSet Then diff --git a/SDL/Speditionsbuch/usrCntlSpeditionsBuchSuche.vb b/SDL/Speditionsbuch/usrCntlSpeditionsBuchSuche.vb index 9a6605dd..4d6dbd8b 100644 --- a/SDL/Speditionsbuch/usrCntlSpeditionsBuchSuche.vb +++ b/SDL/Speditionsbuch/usrCntlSpeditionsBuchSuche.vb @@ -3238,8 +3238,6 @@ Public Class usrCntlSpeditionsBuchSuche If RG.SAVE Then RK_ID = RG.RK_ID - - Return True Else Return False diff --git a/SDL/mdm/usrcntlFremdrechnungen.Designer.vb b/SDL/mdm/usrcntlFremdrechnungen.Designer.vb index 3ce1c404..4db66d63 100644 --- a/SDL/mdm/usrcntlFremdrechnungen.Designer.vb +++ b/SDL/mdm/usrcntlFremdrechnungen.Designer.vb @@ -22,7 +22,6 @@ Partial Class usrcntlFremdrechnungen 'Das Bearbeiten mit dem Code-Editor ist nicht möglich. Private Sub InitializeComponent() - Me.components = New System.ComponentModel.Container() Dim DataGridViewCellStyle1 As System.Windows.Forms.DataGridViewCellStyle = New System.Windows.Forms.DataGridViewCellStyle() Dim DataGridViewCellStyle2 As System.Windows.Forms.DataGridViewCellStyle = New System.Windows.Forms.DataGridViewCellStyle() Me.PDFHochladenToolStripMenuItem = New System.Windows.Forms.ToolStripMenuItem() @@ -36,11 +35,13 @@ Partial Class usrcntlFremdrechnungen Me.btnVERAGCardNew = New System.Windows.Forms.Button() Me.btnSDL_PLOSE = New System.Windows.Forms.Button() Me.btnSDL_RMC = New System.Windows.Forms.Button() - Me.ContextMenuStrip1 = New System.Windows.Forms.ContextMenuStrip(Me.components) + Me.ContextMenuStrip1 = New System.Windows.Forms.ContextMenuStrip() Me.PDFLöschenToolStripMenuItem = New System.Windows.Forms.ToolStripMenuItem() Me.RechnungsanhangHochladenToolStripMenuItem = New System.Windows.Forms.ToolStripMenuItem() Me.RechnungsanhangloeschenToolStripMenuItem = New System.Windows.Forms.ToolStripMenuItem() Me.Panel1 = New System.Windows.Forms.Panel() + Me.lblmissingPDFs = New System.Windows.Forms.Label() + Me.Label10 = New System.Windows.Forms.Label() Me.lblCountMissingInvoices = New System.Windows.Forms.Label() Me.Label1 = New System.Windows.Forms.Label() Me.Label2 = New System.Windows.Forms.Label() @@ -69,11 +70,9 @@ Partial Class usrcntlFremdrechnungen Me.Button8 = New System.Windows.Forms.Button() Me.Panel3 = New System.Windows.Forms.Panel() Me.SplitContainer1 = New System.Windows.Forms.SplitContainer() - Me.dgvLFRechnung = New VERAG_PROG_ALLGEMEIN.MyDatagridview(Me.components) - Me.dgvDetails = New VERAG_PROG_ALLGEMEIN.MyDatagridview(Me.components) + Me.dgvLFRechnung = New VERAG_PROG_ALLGEMEIN.MyDatagridview() + Me.dgvDetails = New VERAG_PROG_ALLGEMEIN.MyDatagridview() Me.Panel4 = New System.Windows.Forms.Panel() - Me.Label10 = New System.Windows.Forms.Label() - Me.lblmissingPDFs = New System.Windows.Forms.Label() Me.FlowLayoutPanel.SuspendLayout() Me.ContextMenuStrip1.SuspendLayout() Me.Panel1.SuspendLayout() @@ -336,6 +335,29 @@ Partial Class usrcntlFremdrechnungen Me.Panel1.Size = New System.Drawing.Size(260, 907) Me.Panel1.TabIndex = 23 ' + 'lblmissingPDFs + ' + Me.lblmissingPDFs.Anchor = CType((System.Windows.Forms.AnchorStyles.Top Or System.Windows.Forms.AnchorStyles.Right), System.Windows.Forms.AnchorStyles) + Me.lblmissingPDFs.BackColor = System.Drawing.Color.White + Me.lblmissingPDFs.Location = New System.Drawing.Point(173, 88) + Me.lblmissingPDFs.Name = "lblmissingPDFs" + Me.lblmissingPDFs.RightToLeft = System.Windows.Forms.RightToLeft.Yes + Me.lblmissingPDFs.Size = New System.Drawing.Size(74, 13) + Me.lblmissingPDFs.TabIndex = 69 + Me.lblmissingPDFs.Text = "0" + Me.lblmissingPDFs.TextAlign = System.Drawing.ContentAlignment.TopRight + Me.lblmissingPDFs.Visible = False + ' + 'Label10 + ' + Me.Label10.AutoSize = True + Me.Label10.Location = New System.Drawing.Point(4, 88) + Me.Label10.Name = "Label10" + Me.Label10.Size = New System.Drawing.Size(80, 13) + Me.Label10.TabIndex = 68 + Me.Label10.Text = "fehlende PDFs:" + Me.Label10.Visible = False + ' 'lblCountMissingInvoices ' Me.lblCountMissingInvoices.Anchor = CType((System.Windows.Forms.AnchorStyles.Top Or System.Windows.Forms.AnchorStyles.Right), System.Windows.Forms.AnchorStyles) @@ -716,27 +738,6 @@ Partial Class usrcntlFremdrechnungen Me.Panel4.Size = New System.Drawing.Size(1356, 108) Me.Panel4.TabIndex = 11 ' - 'Label10 - ' - Me.Label10.AutoSize = True - Me.Label10.Location = New System.Drawing.Point(4, 88) - Me.Label10.Name = "Label10" - Me.Label10.Size = New System.Drawing.Size(80, 13) - Me.Label10.TabIndex = 68 - Me.Label10.Text = "fehlende PDFs:" - ' - 'lblmissingPDFs - ' - Me.lblmissingPDFs.Anchor = CType((System.Windows.Forms.AnchorStyles.Top Or System.Windows.Forms.AnchorStyles.Right), System.Windows.Forms.AnchorStyles) - Me.lblmissingPDFs.BackColor = System.Drawing.Color.White - Me.lblmissingPDFs.Location = New System.Drawing.Point(173, 88) - Me.lblmissingPDFs.Name = "lblmissingPDFs" - Me.lblmissingPDFs.RightToLeft = System.Windows.Forms.RightToLeft.Yes - Me.lblmissingPDFs.Size = New System.Drawing.Size(74, 13) - Me.lblmissingPDFs.TabIndex = 69 - Me.lblmissingPDFs.Text = "0" - Me.lblmissingPDFs.TextAlign = System.Drawing.ContentAlignment.TopRight - ' 'usrcntlFremdrechnungen ' Me.AutoScaleDimensions = New System.Drawing.SizeF(6.0!, 13.0!) From 18c72c65f3f08153e77c952c97bae709f45b77e2 Mon Sep 17 00:00:00 2001 From: "d.breimaier" Date: Wed, 10 Jun 2026 11:48:26 +0200 Subject: [PATCH 13/17] fix Zugferd-Report --- SDL/kunden/frmKundenUebersichtZollRgDetails.vb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/SDL/kunden/frmKundenUebersichtZollRgDetails.vb b/SDL/kunden/frmKundenUebersichtZollRgDetails.vb index 314aacc5..253ecfb6 100644 --- a/SDL/kunden/frmKundenUebersichtZollRgDetails.vb +++ b/SDL/kunden/frmKundenUebersichtZollRgDetails.vb @@ -256,7 +256,7 @@ Public Class frmKundenUebersichtZollRgDetails Console.WriteLine(err) If output <> "" Then - Dim tmpPath_Report = VERAG_PROG_ALLGEMEIN.DATENVERVER_OPTIONS.getTMPPath("MUSTANG-REPORT", ".pdf", , False) + Dim tmpPath_Report = VERAG_PROG_ALLGEMEIN.DATENVERVER_OPTIONS.getTMPPath("MUSTANG-REPORT.pdf", ".pdf", , False) VERAG_PROG_ALLGEMEIN.DATENVERVER_OPTIONS.CreateValidationPdf(output, Path_temp, RK_ID, tmpPath_Report) If tmpPath_Report <> "" Then Process.Start(tmpPath_Report) End If From dfae79c9cfbb0cbce0f91020e13d1069b0fffebd Mon Sep 17 00:00:00 2001 From: "d.breimaier" Date: Wed, 10 Jun 2026 15:37:14 +0200 Subject: [PATCH 14/17] =?UTF-8?q?div.=20=C3=84nduerngen,=20Fakt.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- SDL/Fakturierung/cFakturierung.vb | 10 ++++++---- SDL/Fakturierung/frmFaktSammelRgDrucken.vb | 6 +++--- 2 files changed, 9 insertions(+), 7 deletions(-) diff --git a/SDL/Fakturierung/cFakturierung.vb b/SDL/Fakturierung/cFakturierung.vb index 2e3ea0c6..b2705cbc 100644 --- a/SDL/Fakturierung/cFakturierung.vb +++ b/SDL/Fakturierung/cFakturierung.vb @@ -3050,7 +3050,7 @@ Public Class cFakturierung 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 desc As InvoiceDescriptor = InvoiceDescriptor.CreateInvoice(addYeartoRgNr(FIRMA.Firma_ID, RECHNUNG.Buchungsjahr) & RECHNUNG.RechnungsNr, RECHNUNG.RechnungsDatum, IIf(FIRMA.Firma_ID = 26, CurrencyCodes.GBP, CurrencyCodes.EUR)) Select Case RECHNUNG.BelegartenKz Case "AR" @@ -3279,7 +3279,7 @@ Public Class cFakturierung 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)) + Dim desc As InvoiceDescriptor = InvoiceDescriptor.CreateInvoice(addYeartoRgNr(FIRMA.Firma_ID, RECHNUNG.Buchungsjahr) & RechnungsNr, RechnungsDatum, IIf(FIRMA.Firma_ID = 26, CurrencyCodes.GBP, CurrencyCodes.EUR)) Select Case BelegartenKz Case "AR" @@ -5773,9 +5773,11 @@ Public Class cFakturierung End Function Shared Function addYeartoRgNr(Firma_ID, Buchungsjahr) + 'If Buchungsjahr <= 2026 Then 'angedacht das zu korrigieren mit Jahreswechsel -> wird auch eig. im BMD-Export gesetzt, lieber so lassen! : Breimaier 10.06.2026 Select Case Firma_ID - Case "21", "22", "23" : Return Buchungsjahr.ToString.Substring(2) & "-" - End Select + Case "21", "22", "23" : Return Buchungsjahr.ToString.Substring(2) & "-" + End Select + 'End If Return "" End Function diff --git a/SDL/Fakturierung/frmFaktSammelRgDrucken.vb b/SDL/Fakturierung/frmFaktSammelRgDrucken.vb index c4b107f1..6911e5ec 100644 --- a/SDL/Fakturierung/frmFaktSammelRgDrucken.vb +++ b/SDL/Fakturierung/frmFaktSammelRgDrucken.vb @@ -27,8 +27,8 @@ Public Class frmFaktSammelRgDrucken End Sub Private Sub RadioButton_CheckedChanged(sender As Object, e As EventArgs) Handles RadioButton.CheckedChanged, RadioButton1.CheckedChanged, RadioButton2.CheckedChanged, RadioButton3.CheckedChanged, RadioButton4.CheckedChanged, RadioButton6.CheckedChanged, RadioButton5.CheckedChanged - lblSB.Visible = False : cboSB.Visible = False : btn.Enabled = True : Button9.Enabled = True : Button8.Enabled = True : cbxMWST.Visible = False : pnlAUTOMailversand.Visible = False : cbxAUTOMail.Visible = False : MyListBox1.Enabled = True : btnNurExport.Enabled = True : btnNurImport.Enabled = True : btnKeine.Enabled = True - + lblSB.Visible = False : cboSB.Visible = False : btn.Enabled = True : Button9.Enabled = True : Button8.Enabled = True : cbxMWST.Visible = False : pnlAUTOMailversand.Visible = False : cbxAUTOMail.Visible = False : MyListBox1.Visible = True : btnNurExport.Visible = True : btnNurImport.Visible = True : btnKeine.Visible = True + lblAbfertigungsarten.Visible = True cboSB.changeItem("") If DirectCast(sender, RadioButton).Checked Then Sammelrechung = sender.tag Select Case Sammelrechung @@ -53,7 +53,7 @@ Public Class frmFaktSammelRgDrucken Case 6 : txtZeitraumBis.Text = Now.AddDays(-1).ToShortDateString : lblSB.Visible = True : cboSB.Visible = True cboSB.changeItem(VERAG_PROG_ALLGEMEIN.cAllgemein.USRKURZNAME) : btn.Enabled = False : Button9.Enabled = False : Button2.Enabled = False cbxMWST.Visible = True : pnlAUTOMailversand.Visible = True : cbxAUTOMail.Visible = True : Label5.Visible = False : cboFaktGrp.Visible = False - MyListBox1.Enabled = False : btnNurExport.Enabled = False : btnNurImport.Enabled = False : btnKeine.Enabled = False + MyListBox1.Visible = False : btnNurExport.Visible = False : btnNurImport.Visible = False : btnKeine.Visible = False : lblAbfertigungsarten.Visible = False Case 7 : txtZeitraumBis.Text = Now.ToShortDateString : lblSB.Visible = True : cboSB.Visible = True : cboSB.changeItem(VERAG_PROG_ALLGEMEIN.cAllgemein.USRKURZNAME) From 58b7db92cc54fee6f4d0ca0a8e7fa28ede3fd8dd Mon Sep 17 00:00:00 2001 From: "d.breimaier" Date: Thu, 11 Jun 2026 09:31:43 +0200 Subject: [PATCH 15/17] fix abrechnung, etc. --- SDL/Fakturierung/cFakturierung.vb | 2 +- SDL/Fakturierung/frmAbrechnungsMaske.vb | 24 +++++++++++++++++++++--- 2 files changed, 22 insertions(+), 4 deletions(-) diff --git a/SDL/Fakturierung/cFakturierung.vb b/SDL/Fakturierung/cFakturierung.vb index b2705cbc..0543de8d 100644 --- a/SDL/Fakturierung/cFakturierung.vb +++ b/SDL/Fakturierung/cFakturierung.vb @@ -3279,7 +3279,7 @@ Public Class cFakturierung 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(addYeartoRgNr(FIRMA.Firma_ID, RECHNUNG.Buchungsjahr) & RechnungsNr, RechnungsDatum, IIf(FIRMA.Firma_ID = 26, CurrencyCodes.GBP, CurrencyCodes.EUR)) + Dim desc As InvoiceDescriptor = InvoiceDescriptor.CreateInvoice(RechnungsNr, RechnungsDatum, IIf(FIRMA.Firma_ID = 26, CurrencyCodes.GBP, CurrencyCodes.EUR)) Select Case BelegartenKz Case "AR" diff --git a/SDL/Fakturierung/frmAbrechnungsMaske.vb b/SDL/Fakturierung/frmAbrechnungsMaske.vb index e299e7a6..5d09ace0 100644 --- a/SDL/Fakturierung/frmAbrechnungsMaske.vb +++ b/SDL/Fakturierung/frmAbrechnungsMaske.vb @@ -1,5 +1,7 @@ Imports System.IO +Imports GrapeCity.ActiveReports.PageReportModel Imports Microsoft.Office.Interop +Imports VERAG_PROG_ALLGEMEIN Public Class frmAbrechnungsMaske Dim SQL As New VERAG_PROG_ALLGEMEIN.SQL @@ -199,7 +201,7 @@ Public Class frmAbrechnungsMaske Else ' sqlstr &= " SELECT FilialenNr, AbfertigungsNr, UnterNr, Firma_ID, Status, Sammelrechnung, Sachbearbeiter, SteuerpflichtigerGesamtbetrag, SteuerfreierGesamtbetrag, RechnungsNr, RechnungsDatum, DruckDatumZeit, Buchungsjahr, RK_ID" - sqlstr &= " SELECT cast(isnull(Automailversand_sent, 0) as bit) as AUTO_sent, isnull(Rechnungsausgang.RechnungsNr,'-') as ReNr, FilialenNr, AbfertigungsNr, cast(FilialenNr as varchar) + ' ' + cast(AbfertigungsNr as varchar) as PosNr,UnterNr, Firma_ID,Rechnungsausgang.Sammelrechnung as Art, [RechnungsName 1] as Rechnungsempfänger, (isnull(SteuerpflichtigerGesamtbetrag,0) + isnull(SteuerfreierGesamtbetrag,0)) as Betrag, RK_ID,RechnungsLandKz,RechnungsKundenNr" + sqlstr &= " SELECT cast(isnull(Automailversand_sent, 0) as bit) as AUTO_sent, isnull(Rechnungsausgang.RechnungsNr,'-') as ReNr, FilialenNr, AbfertigungsNr, cast(FilialenNr as varchar) + ' ' + cast(AbfertigungsNr as varchar) as PosNr,UnterNr, Firma_ID,Rechnungsausgang.Sammelrechnung as Art, [RechnungsName 1] as Rechnungsempfänger, (isnull(SteuerpflichtigerGesamtbetrag,0) + isnull(SteuerfreierGesamtbetrag,0)) as Betrag, RK_ID,RechnungsLandKz,RechnungsKundenNr, ReErfZeitstempel" sqlstr &= ",(CASE WHEN Rechnungsdruck =0 THEN 'POST' WHEN Rechnungsdruck=1 THEN 'FAX' WHEN Rechnungsdruck=2 THEN 'E-MAIL' WHEN Rechnungsdruck=5 THEN 'MAIL+KOPIE' ELSE '-' END) as Rechnungsdruck, isnull(BelegartenKz, '') as BelegartenKz " sqlstr &= " FROM Rechnungsausgang INNER JOIN Adressen ON AdressenNr=Rechnungsausgang.RechnungsKundenNr" sqlstr &= " WHERE 1=1 " @@ -218,6 +220,7 @@ Public Class frmAbrechnungsMaske .Columns("Firma_ID").Visible = False .Columns("RechnungsLandKz").Visible = False .Columns("RechnungsKundenNr").Visible = False + .Columns("ReErfZeitstempel").Visible = False .Columns("PosNr").HeaderText = "Pos-Nr." If .Columns.Contains("BelegartenKz") Then @@ -992,10 +995,25 @@ Public Class frmAbrechnungsMaske If noRE_NR Then MsgBox("ACHTUNG, RechnungsNr wurde nicht gesetzt." & vbNewLine & "Vorgang wird abgebrochen!") : Exit Sub - For Each row As DataGridViewRow In dgvRechnungen.SelectedRows + Dim selectedRows = dgvRechnungen.SelectedRows.Cast(Of DataGridViewRow) + + Select Case cboSort._value + Case "EZ" + selectedRows = selectedRows.OrderBy(Function(r) CDate(r.Cells("ReErfZeitstempel").Value)) + + Case Else + selectedRows = selectedRows _ + .OrderBy(Function(r) r.Cells("FilialenNr").Value) _ + .ThenBy(Function(r) r.Cells("AbfertigungsNr").Value) _ + .ThenBy(Function(r) r.Cells("RK_ID").Value) + End Select + + For Each row As DataGridViewRow In selectedRows + + If row.Cells("RK_ID").Value IsNot DBNull.Value AndAlso IsNumeric(row.Cells("RK_ID").Value) Then - If Not IsDBNull(row.Cells("RK_ID").Value) AndAlso IsNumeric(row.Cells("RK_ID").Value) Then ListOfRK_ID.Add(CInt(row.Cells("RK_ID").Value)) + End If Next From 490fb1606d219c80bb94616d0db9a0d56b24fc86 Mon Sep 17 00:00:00 2001 From: "d.breimaier" Date: Thu, 11 Jun 2026 11:12:24 +0200 Subject: [PATCH 16/17] CBAM-FLYER deaktiviert! --- SDL/Fakturierung/usrCntlFaktAbrechnung.vb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/SDL/Fakturierung/usrCntlFaktAbrechnung.vb b/SDL/Fakturierung/usrCntlFaktAbrechnung.vb index ca6da27f..a57a6ecf 100644 --- a/SDL/Fakturierung/usrCntlFaktAbrechnung.vb +++ b/SDL/Fakturierung/usrCntlFaktAbrechnung.vb @@ -1908,7 +1908,7 @@ Public Class usrCntlFaktAbrechnung End If Next '----------------------------- - addCBamFlyer(dgvAnhaenge) + 'addCBamFlyer(dgvAnhaenge) '----------------------------- 'ANHÄNGE SELEKTIEREN '----------------------------- From dcd8721f036ec3fda75bfe409ac9b60ae48aadac Mon Sep 17 00:00:00 2001 From: "d.breimaier" Date: Thu, 11 Jun 2026 11:22:24 +0200 Subject: [PATCH 17/17] =?UTF-8?q?=C3=84nderungen=20AUTO-Mailversand?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- SDL/Fakturierung/frmFaktSammelRgDrucken.vb | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/SDL/Fakturierung/frmFaktSammelRgDrucken.vb b/SDL/Fakturierung/frmFaktSammelRgDrucken.vb index 6911e5ec..55bcea78 100644 --- a/SDL/Fakturierung/frmFaktSammelRgDrucken.vb +++ b/SDL/Fakturierung/frmFaktSammelRgDrucken.vb @@ -701,6 +701,8 @@ Public Class frmFaktSammelRgDrucken Me.Enabled = True Me.Cursor = Cursors.Default + cbxAUTOMail.Checked = Not cbxAUTOMail.Checked + End If End If @@ -719,6 +721,8 @@ Public Class frmFaktSammelRgDrucken 'setMailversand(false, Firma, Sammelrechung, 2) setMailversand_ALL(False, Firma, Sammelrechung) + cbxAUTOMail.Checked = Not cbxAUTOMail.Checked + End If End If