diff --git a/.gitignore b/.gitignore index 5028f7b4..37414890 100644 --- a/.gitignore +++ b/.gitignore @@ -261,4 +261,3 @@ __pycache__/ *.pyc /VERAG_PROG_ALLGEMEIN/Benutzerdefinierte Steuerelemente /VERAG_PROG_ALLGEMEIN/VERAG_PROG_ALLGEMEIN.vbproj -/SDL/SDL.vbproj diff --git a/SDL/Classes/cEABeleg.vb b/SDL/Classes/cEABeleg.vb index dbf7ec60..76246071 100644 --- a/SDL/Classes/cEABeleg.vb +++ b/SDL/Classes/cEABeleg.vb @@ -283,8 +283,9 @@ Public Class EABeleg Property ECTerminalreturnCode As Object = Nothing Property EC_daid As Integer = 0 Property FT_ReceiptReference As Object = Nothing - Property FT_ReceiptReference_Storno As Object = Nothing + Property FT_MissingSignature As Boolean = False + Property FT_setMissingSignatureFailed As Boolean = False Property POS As New List(Of EABelegPositionen) @@ -365,8 +366,13 @@ Public Class EABeleg Me.ECZahlungsPerAPI = cSqlDb.checkNullReturnValue(dr.Item("ECZahlungsPerAPI"), Nothing) Me.ECTerminalreturnCode = cSqlDb.checkNullReturnValue(dr.Item("ECTerminalreturnCode"), Nothing) Me.EC_daid = cSqlDb.checkNullReturnValue(dr.Item("EC_daid"), Nothing) + + 'Fiskaltrust + Me.FT_ReceiptReference = cSqlDb.checkNullReturnValue(dr.Item("FT_ReceiptReference"), Nothing) Me.FT_ReceiptReference_Storno = cSqlDb.checkNullReturnValue(dr.Item("FT_ReceiptReference_Storno"), Nothing) + Me.FT_MissingSignature = cSqlDb.checkNullReturnValue(dr.Item("FT_MissingSignature"), False) + Me.FT_MissingSignature = cSqlDb.checkNullReturnValue(dr.Item("FT_setMissingSignatureFailed"), False) If loadPosAswell Then POS = LOAD_POS_List(Mandant, Niederlassung, Benutzer, BelegNr, BelegDat) ' MsgBox(POS.Count) @@ -552,8 +558,12 @@ Public Class EABeleg list.Add(New VERAG_PROG_ALLGEMEIN.MyListItem2("ECZahlungsPerAPI", ECZahlungsPerAPI)) list.Add(New VERAG_PROG_ALLGEMEIN.MyListItem2("ECTerminalreturnCode", ECTerminalreturnCode)) list.Add(New VERAG_PROG_ALLGEMEIN.MyListItem2("EC_daid", EC_daid)) + + 'FISKALTRUST list.Add(New VERAG_PROG_ALLGEMEIN.MyListItem2("FT_ReceiptReference", FT_ReceiptReference)) list.Add(New VERAG_PROG_ALLGEMEIN.MyListItem2("FT_ReceiptReference_Storno", FT_ReceiptReference_Storno)) + list.Add(New VERAG_PROG_ALLGEMEIN.MyListItem2("FT_MissingSignature", FT_MissingSignature)) + list.Add(New VERAG_PROG_ALLGEMEIN.MyListItem2("FT_setMissingSignatureFailed", FT_setMissingSignatureFailed)) 'For Each p As System.Reflection.PropertyInfo In Me.GetType().GetProperties() 'If p.CanRead Then diff --git a/SDL/Classes/cFiskaltrustClient.vb b/SDL/Classes/cFiskaltrustClient.vb index a1aacac8..eb3a39a3 100644 --- a/SDL/Classes/cFiskaltrustClient.vb +++ b/SDL/Classes/cFiskaltrustClient.vb @@ -740,6 +740,7 @@ Public Class cFiskaltrustSignatures Property ftCashBoxID As Object = Nothing Property cbTerminalID As Object = Nothing Property cbReceiptReference As Object = Nothing + Property ftBeleg_ID As Object = Nothing Public hasEntry = False @@ -767,6 +768,7 @@ Public Class cFiskaltrustSignatures 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)) + list.Add(New VERAG_PROG_ALLGEMEIN.SQLVariable("ftBeleg_ID", ftBeleg_ID)) Return list End Function diff --git a/SDL/Classes/cFiskaltrustClient_chilkat.vb b/SDL/Classes/cFiskaltrustClient_chilkat.vb index 87785ae8..a9ff87db 100644 --- a/SDL/Classes/cFiskaltrustClient_chilkat.vb +++ b/SDL/Classes/cFiskaltrustClient_chilkat.vb @@ -1,13 +1,7 @@ - -Imports System.Data.SqlClient -Imports System.IO -Imports System.Reflection -Imports Chilkat -Imports Gma.QrCodeNet.Encoding -Imports GrapeCity.DataVisualization.Chart -Imports itextsharp.text.pdf.qrcode -Imports Newtonsoft.Json +Imports Chilkat +Imports io.konik.zugferd.unqualified Imports QRCoder +Imports VERAG_PROG_ALLGEMEIN Public Class FtReceiptCases @@ -17,6 +11,7 @@ Public Class FtReceiptCases ' Test-/Nullbeleg Public Const ZeroReceipt As Long = &H4445000000000002L + ' Kassenlebenszyklus Public Const InitialOperation As Long = &H4445000000000003L Public Const OutOfOperation As Long = &H4445000000000004L @@ -25,18 +20,48 @@ Public Class FtReceiptCases Public Const YearlyClosing As Long = &H4445000000000006L Public Const DailyClosing As Long = &H4445000000000007L + ' Kasseneinzahlung / Kassenauszahlung / Geldtransfer + Public Const CashDepositOrWithdrawal As Long = &H4445000000000011L + + ' Flags Public Const ImplicitTransaction As Long = &H100000000L Public Const ReversalReceipt As Long = &H40000L Public Const TrainingReceipt As Long = &H20000L + ' aktiviert den Late-Signing-Modus + Public Const FailedReceipt As Long = &H10000L + + ' Receipt-Request: + ' bereits verarbeiteten Beleg anhand cbReceiptReference abrufen + Public Const ReceiptRequest As Long = &H800000000000L End Class Public Class FtChargeItemCase - Public Const RevenueNormal As Long = &H4445000000000001L ' 19 % - Public Const RevenueReduced As Long = &H4445000000000002L ' 7 % - Public Const RevenueTaxFree As Long = &H4445000000000005L ' 0 % + ' DE – Verkaufsbelege + Public Const RevenueNormal As Long = &H4445000000000001L ' 19 % Regelsteuersatz + + Public Const RevenueReduced As Long = &H4445000000000002L ' 7 % ermäßigter Steuersatz + + Public Const RevenueNotTaxable As Long = &H4445000000000005L ' Nicht steuerbar + + Public Const RevenueTaxFree As Long = &H4445000000000006L ' Umsatzsteuerfrei, 0 % + + ' DE – Kassenbewegungen + Public Const Anfangsbestand As Long = &H4445000000000090L ' Anfangsbestand + + Public Const Privatentnahme As Long = &H4445000000000091L ' Privatentnahme + + Public Const Privateinlage As Long = &H4445000000000092L ' Privateinlage + + Public Const Geldtransit As Long = &H4445000000000093L ' Geldtransit + + Public Const Lohnzahlung As Long = &H4445000000000094L ' Lohnzahlung + + Public Const Einzahlung As Long = &H4445000000000095L ' Einzahlung + + Public Const Auszahlung As Long = &H4445000000000096L ' Auszahlung End Class @@ -49,8 +74,37 @@ Public Class FtJournalType End Class +Public Class ReceiptCaseIntern + + Public Const STORNO As String = "Storno" + Public Const VERKAUF As String = "Verkauf" + Public Const EINGANG As String = "Eingang" + Public Const AUSGANG As String = "Ausgang" + Public Const WIEDERHOLUNG As String = "Retry" + Public Const NULLBELEG As String = "NULL-BELEG" + Public Const STARTBELEG As String = "START-BELEG" + Public Const OUTOFOPERATIONBELEG As String = "END-BELEG" + Public Const TEMP_OUTOFOPERATIONBELEG As String = "TEMP-AUSFALL" + Public Const DAILYCLOSING As String = "TAGESABSCHLUSS" + +End Class + + +Public Class PayItemCasesIntern + + Public Const Cash As String = "Cash" + Public Const DebitCard As String = "DebitCard" + Public Const Kasseneinzahlungen_Auszahlungen As String = "Kasseneinzahlungen_Auszahlungen" + + +End Class + + + Public Class FtPayItemCases + 'DE + ' Barzahlung Public Const Cash As Long = &H4445000000000001L @@ -64,7 +118,10 @@ Public Class FtPayItemCases Public Const OnlinePayment As Long = &H4445000000000006L ' Gutschein - Public Const Voucher As Long = &H444500000000000DL + Public Const Voucher As Long = &H4445000000000007L + + 'Cash transfer from/to cash book + Public Const Kasseineinzahlung_Auszahlung As Long = &H4445000000000016L End Class @@ -74,23 +131,31 @@ Public Class cFiskaltrustClient_chilkat Private ReadOnly _cashboxId As String Private ReadOnly _accessToken As String Private ReadOnly _country As String + Private ReadOnly _isFiskaltrust As Boolean = False Public Sub New(baseUrl As String, cashboxId As String, accessToken As String, country As String) _baseUrl = baseUrl.TrimEnd("/"c) _cashboxId = cashboxId _accessToken = accessToken _country = country + + If _cashboxId <> "" AndAlso baseUrl <> "" AndAlso _accessToken <> "" AndAlso _country <> "" Then + _isFiskaltrust = True + Else + _isFiskaltrust = False + End If + End Sub - Public Function SignReceipt(amount As Decimal, vat As Decimal, POS As List(Of EABelegPositionen), kindOfPayment As String, posSystemId As String) As String - - Dim payload As JsonObject = BuildPayloadReceipt(amount, vat, POS, kindOfPayment, posSystemId, "Verkauf", "") - - Return SendChilkat(GetEndpoint("payment"), payload.Emit()) - + Public Function isFiskaltrust() As Boolean + Return _isFiskaltrust End Function - Public Function SignReceipt_test(posSystemId As String) As String + + + + + Public Function SignReceipt_test(posSystemId As String, TSEisOnline As Boolean) As String Dim LIST = New List(Of EABelegPositionen) Dim p = New EABelegPositionen @@ -104,105 +169,161 @@ Public Class cFiskaltrustClient_chilkat p.LeistungsNr = 300 p.LeistungsBez = "TEST" p.Preis = 10 - p.Anzahl = 1 + p.Anzahl = 10 LIST.Add(p) Dim amount = 100 Dim vat = 0 Dim POS = LIST Dim kindOfPayment = "Cash" + Try + Dim payload As JsonObject = BuildPayloadReceipt(amount, vat, POS, kindOfPayment, posSystemId, "Verkauf", "", TSEisOnline) - Dim payload As JsonObject = BuildPayloadReceipt(amount, vat, POS, kindOfPayment, posSystemId, "Verkauf", "") - - Return SendChilkat(GetEndpoint("payment"), payload.Emit()) + Return SendChilkat(GetEndpoint("payment"), payload.Emit()) + Catch ex As Exception + VERAG_PROG_ALLGEMEIN.cErrorHandler.ERR(ex.Message, ex.StackTrace, System.Reflection.MethodInfo.GetCurrentMethod.Name) + End Try End Function - Public Function ChancelReceipt(reference As String, amount As Decimal, vat As Decimal, POS As List(Of EABelegPositionen), kindOfPayment As String, posSystemId As String) As String - Dim payload As JsonObject = BuildPayloadReceipt(amount, vat, POS, kindOfPayment, posSystemId, "Storno", reference) - Return SendChilkat(GetEndpoint("storno"), payload.Emit()) + Public Function ChancelReceipt_test(reference As String, posSystemId As String, TSEisOnline As Boolean) As String + + Try + 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) + + Dim amount = 100 + Dim vat = 0 + Dim POS = LIST + Dim kindOfPayment = "Cash" + + Dim payload As JsonObject = BuildPayloadReceipt(amount, vat, POS, kindOfPayment, posSystemId, "Storno", reference, TSEisOnline) + + Return SendChilkat(GetEndpoint("storno"), payload.Emit()) + Catch ex As Exception + VERAG_PROG_ALLGEMEIN.cErrorHandler.ERR(ex.Message, ex.StackTrace, System.Reflection.MethodInfo.GetCurrentMethod.Name) + End Try End Function - Public Function ChancelReceipt_test(reference As String, posSystemId As String) As String + Public Function SignReceipt(amount As Decimal, vat As Decimal, POS As List(Of EABelegPositionen), kindOfPayment As String, posSystemId As String, typOfReceiptCase As String, reference As String, TESisOnline As Boolean) As String + Try + Dim payload As JsonObject = BuildPayloadReceipt(amount, vat, POS, kindOfPayment, posSystemId, typOfReceiptCase, reference, TESisOnline) - 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 SendChilkat(GetEndpoint("payment"), payload.Emit()) + Catch ex As Exception + VERAG_PROG_ALLGEMEIN.cErrorHandler.ERR(ex.Message, ex.StackTrace, System.Reflection.MethodInfo.GetCurrentMethod.Name) + End Try - Dim amount = 100 - Dim vat = 0 - Dim POS = LIST - Dim kindOfPayment = "Cash" - - Dim payload As JsonObject = BuildPayloadReceipt(amount, vat, POS, kindOfPayment, posSystemId, "Storno", reference) - - Return SendChilkat(GetEndpoint("storno"), payload.Emit()) End Function - Public Function SignNullReceipt(posSystemId As String) As String - Return SendChilkat(GetEndpoint("payment"), BuildPayloadNullReceipt(posSystemId, _country).Emit()) + Try + Return SendChilkat(GetEndpoint("payment"), BuildPayloadNullReceipt(posSystemId, _country).Emit()) + Catch ex As Exception + VERAG_PROG_ALLGEMEIN.cErrorHandler.ERR(ex.Message, ex.StackTrace, System.Reflection.MethodInfo.GetCurrentMethod.Name) + End Try + End Function + + Public Function ChancelReceipt(reference As String, amount As Decimal, vat As Decimal, POS As List(Of EABelegPositionen), kindOfPayment As String, posSystemId As String, TSEisOnline As Boolean) As String + Try + Dim payload As JsonObject = BuildPayloadReceipt(amount, vat, POS, kindOfPayment, posSystemId, "Storno", reference, TSEisOnline) + + Return SendChilkat(GetEndpoint("storno"), payload.Emit()) + Catch ex As Exception + VERAG_PROG_ALLGEMEIN.cErrorHandler.ERR(ex.Message, ex.StackTrace, System.Reflection.MethodInfo.GetCurrentMethod.Name) + End Try + End Function + + Public Function SignOutOfOrderReceipt(posSystemId As String) As String + Try + Return SendChilkat(GetEndpoint("payment"), BuildPayloadOutOfOperationReceipt(posSystemId, _country).Emit()) + Catch ex As Exception + VERAG_PROG_ALLGEMEIN.cErrorHandler.ERR(ex.Message, ex.StackTrace, System.Reflection.MethodInfo.GetCurrentMethod.Name) + End Try + End Function + + Public Function SignTempOutOfOrderReceipt(posSystemId As String) As String + Try + Return SendChilkat(GetEndpoint("payment"), BuildPayloadOutOfOperationReceipt(posSystemId, _country).Emit()) + Catch ex As Exception + VERAG_PROG_ALLGEMEIN.cErrorHandler.ERR(ex.Message, ex.StackTrace, System.Reflection.MethodInfo.GetCurrentMethod.Name) + End Try + End Function + + Public Function SignInitialOperationReceipt(posSystemId As String) As String + Try + Return SendChilkat(GetEndpoint("payment"), BuildPayloadInitialOperationReceipt(posSystemId, _country).Emit()) + Catch ex As Exception + VERAG_PROG_ALLGEMEIN.cErrorHandler.ERR(ex.Message, ex.StackTrace, System.Reflection.MethodInfo.GetCurrentMethod.Name) + End Try End Function Public Function SignClosingReceipt(receiptType As String, posSystemId As String, kind As String) As String - - Return SendChilkat(GetEndpoint("payment"), BuildPayloadClosingReceipt(receiptType, posSystemId, kind).Emit()) + Try + Return SendChilkat(GetEndpoint("payment"), BuildPayloadClosingReceipt(receiptType, posSystemId, kind).Emit()) + Catch ex As Exception + VERAG_PROG_ALLGEMEIN.cErrorHandler.ERR(ex.Message, ex.StackTrace, System.Reflection.MethodInfo.GetCurrentMethod.Name) + End Try End Function Public Function Echo(kassenName As String) As String + Try + Dim json As New JsonObject() + json.UpdateString("Message", kassenName & " - VERBINDUNG OK") - Dim json As New JsonObject() - json.UpdateString("Message", kassenName & " - VERBINDUNG OK") - - Return SendChilkat(GetEndpoint("test"), json.Emit()) - + Return SendChilkat(GetEndpoint("test"), json.Emit()) + Catch ex As Exception + VERAG_PROG_ALLGEMEIN.cErrorHandler.ERR(ex.Message, ex.StackTrace, System.Reflection.MethodInfo.GetCurrentMethod.Name) + End Try End Function Public Function Journal(ftJournalType As Integer) As String + Try - Dim endpoint = GetEndpoint("journal") + Dim endpoint = GetEndpoint("journal") - endpoint &= "?type=" & ftJournalType + endpoint &= "?type=" & ftJournalType - Return SendChilkat(endpoint, "") + Return SendChilkat(endpoint, "") + + Catch ex As Exception + VERAG_PROG_ALLGEMEIN.cErrorHandler.ERR(ex.Message, ex.StackTrace, System.Reflection.MethodInfo.GetCurrentMethod.Name) + End Try End Function + Private Function SendChilkat(endpoint As String, payload As String, Optional isGet As Boolean = False) As String Dim retries As Integer = 3 Dim lastEx As Exception = Nothing - VERAG_PROG_ALLGEMEIN.cChilkat_Helper.UnlockCilkat() - Dim rest As New Chilkat.Rest - Dim failureDesc As String - rest.VerboseLogging = True + VERAG_PROG_ALLGEMEIN.cChilkat_Helper.UnlockCilkat() + + Dim rest As New Chilkat.Rest + rest.VerboseLogging = True For i As Integer = 1 To retries Try - Dim uri As New Uri(_baseUrl) If Not rest.Connect(uri.Host, uri.Port, uri.Scheme = "https", True) Then - Throw New Exception(rest.LastErrorText) - failureDesc = rest.LastErrorText - Return failureDesc - End If rest.AddHeader("cashboxid", _cashboxId) @@ -211,41 +332,88 @@ Public Class cFiskaltrustClient_chilkat Dim response As String If isGet Then - response = rest.FullRequestNoBody("GET", uri.AbsoluteUri & endpoint) - Else + response = rest.FullRequestNoBody( + "GET", + uri.AbsoluteUri & endpoint + ) + + Else If _country = "AT" Then rest.AddHeader("Content-Type", "text/plain") - response = rest.FullRequestString("POST", uri.AbsoluteUri & endpoint, payload) Else rest.AddHeader("Content-Type", "application/json") - response = rest.FullRequestString("POST", uri.AbsoluteUri & endpoint, payload) End If + response = rest.FullRequestString("POST", uri.AbsoluteUri & endpoint, payload) End If - If rest.ResponseStatusCode >= 200 AndAlso rest.ResponseStatusCode < 300 Then + Dim statusCode As Integer = rest.ResponseStatusCode + + ' SUCCESS + If statusCode >= 200 AndAlso statusCode < 300 Then Return response - Else - failureDesc = rest.LastErrorText End If - Throw New Exception("HTTP " & rest.ResponseStatusCode & ": " & response) + ' 4xx = client/request error -> DO NOT RETRY + If statusCode >= 400 AndAlso statusCode < 500 Then + Throw New Exception( + "HTTP " & statusCode & ": " & response + ) + End If + + ' 5xx = server error -> retry + If statusCode >= 500 AndAlso statusCode < 600 Then + + lastEx = New Exception( + "HTTP " & statusCode & ": " & response + ) + + If i < retries Then + Threading.Thread.Sleep(500) + Continue For + End If + + Throw lastEx + End If + + ' Unexpected status code + Throw New Exception( + "HTTP " & statusCode & ": " & response + ) Catch ex As Exception + lastEx = ex - Threading.Thread.Sleep(500) + + ' If this was an HTTP 4xx, don't retry. + If rest.ResponseStatusCode >= 400 AndAlso + rest.ResponseStatusCode < 500 Then + + Throw + VERAG_PROG_ALLGEMEIN.cErrorHandler.ERR(ex.Message, ex.StackTrace, System.Reflection.MethodInfo.GetCurrentMethod.Name, ERROR_OP.MAIL) + + End If + + ' Connection/transport error -> retry + If i < retries Then + Threading.Thread.Sleep(500) + End If + End Try Next Throw lastEx + + + End Function - Private Function BuildPayloadReceipt(amount As Decimal, vat As Decimal, POS As List(Of EABelegPositionen), kindOfPayment As String, posSystemId As String, _receiptCase As String, _reference As String) As JsonObject + Private Function BuildPayloadReceipt(amount As Decimal, vat As Decimal, POS As List(Of EABelegPositionen), kindOfPayment As String, posSystemId As String, _receiptCase As String, _reference As String, TSEisOnline As Boolean) As JsonObject Dim json As New JsonObject() @@ -261,70 +429,162 @@ Public Class cFiskaltrustClient_chilkat json.UpdateString("cbReceiptMoment", DateTime.UtcNow.ToString("o")) - Dim receipCase As Long - Select Case _receiptCase - - Case "Storno" - receipCase = FtReceiptCases.PosReceipt Or FtReceiptCases.ReversalReceipt Or FtReceiptCases.ImplicitTransaction 'Storno - - Case Else - receipCase = FtReceiptCases.PosReceipt Or FtReceiptCases.ImplicitTransaction 'Verkauf - - End Select + Dim receiptCaseValue As Long - json.UpdateString("ftReceiptCase", receipCase) + If _receiptCase = ReceiptCaseIntern.STORNO Then + + ' Neue Referenz für den Stornobeleg + json.UpdateString("cbReceiptReference", Guid.NewGuid().ToString()) + ' Referenz auf den ursprünglichen Beleg + json.UpdateString("cbPreviousReceiptReference", _reference) + + If TSEisOnline Then + receiptCaseValue = FtReceiptCases.PosReceipt Or FtReceiptCases.ReversalReceipt Or FtReceiptCases.ImplicitTransaction + Else + receiptCaseValue = FtReceiptCases.PosReceipt Or FtReceiptCases.ReversalReceipt Or FtReceiptCases.FailedReceipt Or FtReceiptCases.ImplicitTransaction + End If + json.UpdateString("cbUser", VERAG_PROG_ALLGEMEIN.cAllgemein.USRKURZNAME) + + ElseIf _receiptCase = ReceiptCaseIntern.WIEDERHOLUNG Then + + 'Receipt-Request nach Kommunikationsfehler + 'dieselbe cbReceiptReference verwenden + 'dieselben cbChargeItems und cbPayItems mitsenden + 'optional dieselbe cbTerminalID + + json.UpdateString("cbReceiptReference", _reference) + receiptCaseValue = FtReceiptCases.PosReceipt Or FtReceiptCases.ReceiptRequest + + ' Kasseneinzahlung (ohne Positionen) / Kassenauszahlung (ohne Positionen) + ElseIf (_receiptCase = ReceiptCaseIntern.EINGANG OrElse _receiptCase = ReceiptCaseIntern.AUSGANG) Then + kindOfPayment = PayItemCasesIntern.Kasseneinzahlungen_Auszahlungen + json.UpdateString("cbReceiptReference", Guid.NewGuid().ToString()) + + If TSEisOnline Then + receiptCaseValue = FtReceiptCases.CashDepositOrWithdrawal Or FtReceiptCases.ImplicitTransaction + Else + receiptCaseValue = FtReceiptCases.CashDepositOrWithdrawal Or FtReceiptCases.FailedReceipt Or FtReceiptCases.ImplicitTransaction + End If + + + Else + + ' New reference for a normal receipt + json.UpdateString("cbReceiptReference", Guid.NewGuid().ToString()) + If TSEisOnline Then + receiptCaseValue = FtReceiptCases.PosReceipt Or FtReceiptCases.ImplicitTransaction + Else + receiptCaseValue = FtReceiptCases.PosReceipt Or FtReceiptCases.FailedReceipt Or FtReceiptCases.ImplicitTransaction + End If + + + End If + + json.UpdateString("ftReceiptCase", receiptCaseValue.ToString()) Dim chargeItems = json.AppendArray("cbChargeItems") - For Each p In POS + If POS.Count > 0 Then - If chargeItems.AddObjectAt(-1) Then - Dim item As Chilkat.JsonObject = chargeItems.ObjectAt(chargeItems.Size - 1) - item.UpdateInt("Quantity", p.Anzahl) - item.UpdateNumber("Amount", p.Preis.ToString().Replace(",", ".")) - item.UpdateNumber("VATRate", vat.ToString().Replace(",", ".")) - item.UpdateString("Description", p.LeistungsBez) + For Each p In POS - Dim ChargeItemCase As Long - Select Case vat - - Case 19D - ChargeItemCase = FtChargeItemCase.RevenueNormal - - Case 7D - ChargeItemCase = FtChargeItemCase.RevenueReduced - - Case 0D - ChargeItemCase = FtChargeItemCase.RevenueTaxFree - - Case Else - Throw New Exception("Unbekannter Steuersatz") - End Select + If chargeItems.AddObjectAt(-1) Then - item.UpdateString("ftChargeItemCase", ChargeItemCase) - End If + Dim quantity As Double = p.Anzahl + Dim unitPrice As Double = p.Preis + Dim lineAmount As Double = p.Betrag + + 'bei Storno negieren (BEI DE nur einen Teil)! -> im V1 Beispiel sind beide negativ!!! + 'To cancel a receipt, resend it with this flag added to the ftReceiptCase and inverse the cbPayItems OR cbChargeItems (This is not the same behavior as described in the general part — in Germany, this flag requires only one of cbPayItems or cbChargeItems to be negative, and both must not be negative at the same time)' + 'https://docs.fiskaltrust.cloud/docs/poscreators/middleware-doc/germany/reference-tables/ftreceiptcase + + If _receiptCase = ReceiptCaseIntern.STORNO Then + quantity = quantity * -1 + lineAmount = lineAmount * -1 + End If + + Dim item As Chilkat.JsonObject = chargeItems.ObjectAt(chargeItems.Size - 1) + item.UpdateInt("Quantity", quantity) + item.UpdateNumber("Amount", lineAmount) + item.UpdateNumber("VATRate", vat) + item.UpdateString("Description", p.LeistungsBez) + + Dim ChargeItemCase As Long + Select Case vat + + Case 19D + ChargeItemCase = FtChargeItemCase.RevenueNormal + + Case 7D + ChargeItemCase = FtChargeItemCase.RevenueReduced + + Case 0D + ChargeItemCase = FtChargeItemCase.RevenueTaxFree + + Case Else + Throw New Exception("Unbekannter Steuersatz") + End Select + + + item.UpdateString("ftChargeItemCase", ChargeItemCase) + End If + + + Next + + End If + + + Dim paidAmount As Double = amount + Dim paidQuantity As Integer = 1 + + 'bei Storno negieren (BEI DE nur einen Teil)! -> im V1 Beispiel sind beide negativ!!! + 'To cancel a receipt, resend it with this flag added to the ftReceiptCase and inverse the cbPayItems OR cbChargeItems (This is not the same behavior as described in the general part — in Germany, this flag requires only one of cbPayItems or cbChargeItems to be negative, and both must not be negative at the same time)' + 'https://docs.fiskaltrust.cloud/docs/poscreators/middleware-doc/germany/reference-tables/ftreceiptcase + + If PayItemCasesIntern.Kasseneinzahlungen_Auszahlungen Then + + End If + + + + If _receiptCase = ReceiptCaseIntern.STORNO Then + paidAmount = paidAmount * -1 + paidQuantity = paidQuantity * -1 + End If - Next Dim payItems = json.AppendArray("cbPayItems") payItems.AddObjectAt(-1) Dim pay As Chilkat.JsonObject = payItems.ObjectAt(payItems.Size - 1) - pay.UpdateInt("Quantity", 1) - pay.UpdateNumber("Amount", amount.ToString().Replace(",", ".")) - pay.UpdateString("Description", kindOfPayment) + pay.UpdateInt("Quantity", paidQuantity) + pay.UpdateNumber("Amount", paidAmount) + Dim Description As String = "" Select Case kindOfPayment - Case "Cash" + Case PayItemCasesIntern.Cash pay.UpdateString("ftPayItemCase", FtPayItemCases.Cash) - Case "Card" + Description = "Bar" + Case PayItemCasesIntern.DebitCard pay.UpdateString("ftPayItemCase", FtPayItemCases.DebitCard) + Description = "ECKarte" + Case PayItemCasesIntern.Kasseneinzahlungen_Auszahlungen + pay.UpdateString("ftPayItemCase", FtPayItemCases.Kasseineinzahlung_Auszahlung) + If amount > 0 Then + Description = "Kasseneingang" + ElseIf amount < 0 Then + Description = "Kassenausgang" + End If End Select + pay.UpdateString("Description", Description) + + Return json End Function @@ -354,14 +614,12 @@ Public Class cFiskaltrustClient_chilkat json.UpdateString("ftPosSystemId", getVersion(posSystemId)) json.UpdateString("cbTerminalID", posSystemId) json.UpdateString("cbReceiptMoment", DateTime.UtcNow.ToString("o")) - json.UpdateString("ftReceiptCase", (FtReceiptCases.InitialOperation).ToString()) + json.UpdateString("ftReceiptCase", (FtReceiptCases.InitialOperation Or FtReceiptCases.ImplicitTransaction).ToString()) json.UpdateString("cbReceiptReference", "INIT") json.UpdateString("cbUser", "Admin") json.UpdateString("ftReceiptCaseData", "") - - Dim chargeItems = json.AppendArray("cbChargeItems") Dim payItems = json.AppendArray("cbPayItems") @@ -376,9 +634,8 @@ Public Class cFiskaltrustClient_chilkat json.UpdateString("ftPosSystemId", getVersion(posSystemId)) json.UpdateString("cbTerminalID", posSystemId) json.UpdateString("cbReceiptMoment", DateTime.UtcNow.ToString("o")) - json.UpdateString("ftReceiptCase", (FtReceiptCases.OutOfOperation).ToString()) + json.UpdateString("ftReceiptCase", (FtReceiptCases.OutOfOperation Or FtReceiptCases.ImplicitTransaction).ToString()) json.UpdateString("cbReceiptReference", "OutOfOperation") - json.UpdateString("cbUser", "Admin") json.UpdateString("ftReceiptCaseData", "") @@ -442,7 +699,7 @@ Public Class cFiskaltrustClient_chilkat Case "journal" Select Case _country - Case "DE" : Return "/json/v0/Journal" + Case "DE" : Return "/json/v1/Journal" Case "AT" : Return "/json/Journal" End Select @@ -461,13 +718,17 @@ Public Class cFiskaltrustClient_chilkat End Function Private Function getVersion(Terminal_ID As String) As String - Return Terminal_ID & "_" & Application.ProductVersion + Return Terminal_ID '& "_" & Application.ProductVersion End Function Public Function saveRKSV_FT(ByRef result_zahlung As String, ByRef QR_CodeString As String, ByRef beleg_temp As EABeleg, ByRef isStorno As Boolean) As Boolean - If result_zahlung <> "" Then - Dim json As New Chilkat.JsonObject + If String.IsNullOrWhiteSpace(result_zahlung) Then + Return False + End If + + + Dim json As New Chilkat.JsonObject Dim success As Boolean = json.Load(result_zahlung) If (success <> True) Then Debug.WriteLine(json.LastErrorText) @@ -499,17 +760,26 @@ Public Class cFiskaltrustClient_chilkat .ftCashBoxIdentification = json.StringOf("ftCashBoxIdentification") .ftReceiptIdentification = json.StringOf("ftReceiptIdentification") .ftReceiptMoment = ftReceiptMoment.GetAsTimestamp(getAsLocal) - .ftState = json.StringOf("ftState") - saved = .SAVE() + .ftState = json.StringOf("ftState") - If saved AndAlso beleg_temp IsNot Nothing Then + If beleg_temp Is Nothing Then + .ftBeleg_ID = -1 + Else + .ftBeleg_ID = beleg_temp.BelegNr + End If + + + saved = .SAVE() + + If saved AndAlso beleg_temp IsNot Nothing Then If isStorno Then beleg_temp.FT_ReceiptReference_Storno = .cbReceiptReference beleg_temp.SAVE() Else - beleg_temp.FT_ReceiptReference = .cbReceiptReference - End If + beleg_temp.FT_ReceiptReference = .cbReceiptReference + beleg_temp.SAVE() + End If End If @@ -518,64 +788,60 @@ Public Class cFiskaltrustClient_chilkat Dim num As Integer = json.SizeOfArray("ftSignatures") - If num = 0 Then - Return False - End If + If num = 0 Then + MsgBox("Signatureinheit liefert keine (gültige) Signatur, Signatureinheit ausgefallen" & vbNewLine & "Beleg kann nachträglich signiert werden!") + Return False + End If - Dim Signatures As Chilkat.JsonArray = json.ArrayOf("ftSignatures") + 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 - 1 + For i = 0 To numSignatures - 1 - 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 - .ftSignatures = ftSig.ft_id - .ftData = SignObj.StringOf("Data") - .ftSignatureFormat = SignObj.StringOf("ftSignatureFormat") - .ftSignatureType = SignObj.StringOf("ftSignatureType") - saved = .SAVE() - 'If IsNumeric(.ftSignatureType) AndAlso CInt(.ftSignatureType) = IIf(VERAG_PROG_ALLGEMEIN.cAllgemein.TESTSYSTEM = True, 0, 3) Then - ' QR_CodeString = .ftData - 'End If - - 'https://receipts.fiskaltrust.eu/{ftQueueID}/{ftQueueItemID} - Dim URL_FT As String = "" - If Not String.IsNullOrWhiteSpace(ftSig.ftQueueID) AndAlso Not String.IsNullOrWhiteSpace(ftSig.ftQueueItemID) Then - URL_FT = $"https://receipts.fiskaltrust.eu/{ftSig.ftQueueID}/{ftSig.ftQueueItemID}" - - Using qrGenerator As New QRCodeGenerator() - Using qrData As QRCodeData = qrGenerator.CreateQrCode(URL_FT, QRCodeGenerator.ECCLevel.Q) - - Dim qrCode As New PngByteQRCode(qrData) - Dim qrBytes As Byte() = qrCode.GetGraphic(20) - Dim qrBase64 As String = Convert.ToBase64String(qrBytes) - - QR_CodeString = qrBase64 - - End Using - End Using + With ftSigPos + .ftSignatures = ftSig.ft_id + .ftData = SignObj.StringOf("Data") + .ftSignatureFormat = SignObj.StringOf("ftSignatureFormat") + .ftSignatureType = SignObj.StringOf("ftSignatureType") + saved = .SAVE() - End If - End With - Next + End With + Next - Return saved + 'https://receipts.fiskaltrust.eu/{ftQueueID}/{ftQueueItemID} + Dim URL_FT As String = "" + If Not String.IsNullOrWhiteSpace(ftSig.ftQueueID) AndAlso Not String.IsNullOrWhiteSpace(ftSig.ftQueueItemID) Then + URL_FT = $"https://receipts.fiskaltrust.eu/{ftSig.ftQueueID}/{ftSig.ftQueueItemID}" + Using qrGenerator As New QRCodeGenerator() + Using qrData As QRCodeData = qrGenerator.CreateQrCode(URL_FT, QRCodeGenerator.ECCLevel.Q) + Dim qrCode As New PngByteQRCode(qrData) + Dim qrBytes As Byte() = qrCode.GetGraphic(20) + Dim qrBase64 As String = Convert.ToBase64String(qrBytes) + + QR_CodeString = qrBase64 + + End Using + End Using End If + Return saved + + End Function @@ -625,7 +891,7 @@ Public Class cFiskaltrustClient_chilkat R("ftQueueId") = .StringOf("ftQueueId") R("ftQueueItemId") = .StringOf("ftQueueItemId") R("ftReceiptHash") = .StringOf("ftReceiptHash") - R("TimeStamp") = tmstmp.GetAsTimestamp(getAsLocal) + R("TimeStamp") = .StringOf("ftReceiptMoment") End With @@ -643,15 +909,8 @@ Public Class cFiskaltrustClient_chilkat End If - - End Function - - Private Sub Log(message As String) - Console.WriteLine(message) - End Sub - Public Function PrettyPrintJson(jsonText As String) As String Dim json As New Chilkat.JsonObject() diff --git a/SDL/Classes/cRKSV.vb b/SDL/Classes/cRKSV.vb index fb781b8e..7ba65c43 100644 --- a/SDL/Classes/cRKSV.vb +++ b/SDL/Classes/cRKSV.vb @@ -1,4 +1,5 @@ -Imports GrapeCity.ActiveReports + +Imports GrapeCity.ActiveReports Imports SDL.RKSVServer Imports VERAG_PROG_ALLGEMEIN.DSFinVKService Imports VERAG_PROG_ALLGEMEIN.RKSV_DE_DSFinVKService @@ -89,7 +90,7 @@ Public Class cRKSV End Function - Shared Function insertRKSVFiskaltrustAsync(ByVal kasse As cRKSV_Kasse, beleg_temp As EABeleg, ByVal RKSV_Beleg_Id As Integer, ByVal summeBRUTTO As Double, TEST As Boolean, ByRef QR_CodeString As String, ByRef LastJWS As String) As Boolean + Shared Function insertRKSVFiskaltrustAsync(ByVal kasse As cRKSV_Kasse, beleg_temp As EABeleg, ByVal RKSV_Beleg_Id As Integer, ByVal summeBRUTTO As Double, TEST As Boolean, ByRef QR_CodeString As String, ByRef LastJWS As String, ByRef typOfReceiptCase As String, Optional reference As String = "", Optional TSEisOnline As Boolean = True) As Boolean Try @@ -122,25 +123,37 @@ Public Class cRKSV Dim kindOfPayment As String = getKindOfPayment(beleg_temp) - If False Then - 'Dim client As New cFiskaltrustClient(kasse.rksv_FT_RestServiceURL, kasse.rksv_FT_CashboxID, kasse.rksv_FT_AccessToken, kasse.rksv_FT_Country) - 'Dim result = Await client.SignReceiptAsync(summeBRUTTO, steuersatz, POS, "Cash", kasse.rksv_id) - 'If result <> "" Then - ' Return client.saveRKSV_FT(result, QR_CodeString) - 'Else - ' Return False - 'End If - Else - Dim client As New cFiskaltrustClient_chilkat(kasse.rksv_FT_RestServiceURL, kasse.rksv_FT_CashboxID, kasse.rksv_FT_AccessToken, kasse.rksv_FT_Country) - Dim result = client.SignReceipt(summeBRUTTO, steuersatz, beleg_temp.POS, kindOfPayment, kasse.rksv_id) - If result <> "" Then + Dim client As New cFiskaltrustClient_chilkat(kasse.rksv_FT_RestServiceURL, kasse.rksv_FT_CashboxID, kasse.rksv_FT_AccessToken, kasse.rksv_FT_Country) + + Dim result As String = "" + + Select Case typOfReceiptCase + Case ReceiptCaseIntern.NULLBELEG + result = client.SignNullReceipt(kasse.rksv_id) + + Case ReceiptCaseIntern.STARTBELEG + result = client.SignInitialOperationReceipt(kasse.rksv_id) + + Case ReceiptCaseIntern.OUTOFOPERATIONBELEG + result = client.SignOutOfOrderReceipt(kasse.rksv_id) + + Case ReceiptCaseIntern.TEMP_OUTOFOPERATIONBELEG + result = client.SignTempOutOfOrderReceipt(kasse.rksv_id) + + Case ReceiptCaseIntern.DAILYCLOSING + result = client.SignClosingReceipt("daily", kasse.rksv_id, "daily") + Case Else + result = client.SignReceipt(summeBRUTTO, steuersatz, beleg_temp.POS, kindOfPayment, kasse.rksv_id, typOfReceiptCase, reference, TSEisOnline) + End Select + + If result <> "" Then Return client.saveRKSV_FT(result, QR_CodeString, beleg_temp, False) Else Return False End If - End If + Catch ex As Exception @@ -968,7 +981,7 @@ Public Class cRKSV End Try Return False End Function - Shared Function stornoRKSV_FT(ByVal kasse As cRKSV_Kasse, ByVal beleg_temp As EABeleg, ByRef QR_CodeString As String, ByRef LastJWS As String, ByRef answer As String) As Boolean + Shared Function stornoRKSV_FT(ByVal kasse As cRKSV_Kasse, ByVal beleg_temp As EABeleg, ByRef QR_CodeString As String, ByRef LastJWS As String, ByRef answer As String, TSEisOnline As Boolean) As Boolean Try If beleg_temp.rksv_BelegId <= 0 Then @@ -1013,9 +1026,9 @@ Public Class cRKSV Else Dim client As New cFiskaltrustClient_chilkat(kasse.rksv_FT_RestServiceURL, kasse.rksv_FT_CashboxID, kasse.rksv_FT_AccessToken, kasse.rksv_FT_Country) - Dim result = client.ChancelReceipt(beleg_temp.FT_ReceiptReference, beleg_temp.rksv_umsatz, steuersatz, beleg_temp.POS, kindOfPayment, kasse.rksv_id) + Dim result = client.ChancelReceipt(beleg_temp.FT_ReceiptReference, beleg_temp.rksv_umsatz, steuersatz, beleg_temp.POS, kindOfPayment, kasse.rksv_id, TSEisOnline) If result <> "" Then - Return client.saveRKSV_FT(result, QR_CodeString, beleg_temp, True) + client.saveRKSV_FT(result, QR_CodeString, beleg_temp, True) Else Return False End If @@ -1325,6 +1338,11 @@ Public Class cRKSV rpt.picVERAG.Image = My.Resources.FrontOfficeSUB rpt.lblFirma_Name.Text = "Front-Office Suben eG" rpt.lblFirma_Details.Text = "A 4975 Suben | Suben 14" & vbNewLine & "UID: ATU74813856 " + Case "FT DE-KLIPPHAUSEN", "TEST-KASSE FT DE" + 'Default Werte: + rpt.picVERAG.Image = My.Resources.Klipphausen_Logo + rpt.lblFirma_Name.Text = "Front-Office Klipphausen GmbH" + rpt.lblFirma_Details.Text = "D 01665 Klipphausen | Am Bahndamm 3" End Select If KASSE.rksv_aktiv Or KASSE.rksvDE_aktiv Then @@ -1821,6 +1839,188 @@ Public Class cRKSV End Function + Public Shared Function printStatusBelegFiskaltrust(KASSE As cRKSV_Kasse, PERSONAL As cPersonal, AUTODRUCK As Boolean, Firma As String, fiskaltrustReceiptCasTypIntern As String) As Boolean + Try + + If PERSONAL Is Nothing Then + Dim FMZOLL_SQL As New FMZOLL_SQL + PERSONAL = FMZOLL_SQL.getPersonalById(274) + End If + + Dim ib = "" + + Dim TESTBUCHUNG = False + Dim oldBelegZaehler = KASSE.rksv_BelegIdZaehler + Dim summe As Double = 0 + Dim RKSV_Beleg_Id = KASSE.INCREASE_BELEG_UMSATZ(If(TESTBUCHUNG, 0, summe)) + If RKSV_Beleg_Id < 0 Then + 'Exit Function + Return False + End If + + + Dim belegBez As String = fiskaltrustReceiptCasTypIntern + + + Dim BELEG As New EABeleg(PERSONAL.Mandant, PERSONAL.Niederlassung, PERSONAL.ID) + ' Dim GJ = New cGeschaeftsjahr(BELEG.Mandant, BELEG.Niederlassung, BELEG.Benutzer, cRKSV.getGJ(BELEG.BelegDat)) + + BELEG.Ordnungsbegriff = "*** " & belegBez & " ***" + BELEG.Beleg_TYP = "0" + BELEG.Belegart = "0" + BELEG.Name1 = "*** " & belegBez & " ***" + BELEG.Steuerschlüssel = 3510 + BELEG.BelegNr = cRKSV.getNewBelegNr(BELEG, Firma) 'GJ.INCREASE_BELEG() 'Vergabe der Belegnummer ' + ' Beleg noch nicht gespeichert.... BELEG.DEL_POS_List()' Positionen löschen, da BelegNr Neu vergeben + For Each p In BELEG.POS + p.BelegNr = BELEG.BelegNr + Next + BELEG.gebucht = True + BELEG.SAVE() + + + ' QR_Image = Nothing + Dim QR_CodeString As String = "" + Dim LastJWS As String = "" + Dim isFiskaltrust As Boolean = False + Dim verarbeitet As Boolean = False + If KASSE.rksv_aktiv Then ' WENN für die Kasse die RKSV gilt + Dim answer = "" + + If KASSE IsNot Nothing AndAlso KASSE.rksv_FT_RestServiceURL IsNot Nothing AndAlso KASSE.rksv_FT_CashboxID IsNot Nothing AndAlso KASSE.rksv_FT_AccessToken IsNot Nothing AndAlso KASSE.rksv_FT_Country IsNot Nothing Then + Dim client_chilkat As New cFiskaltrustClient_chilkat(KASSE.rksv_FT_RestServiceURL, KASSE.rksv_FT_CashboxID, KASSE.rksv_FT_AccessToken, KASSE.rksv_FT_Country) + isFiskaltrust = client_chilkat.isFiskaltrust() + End If + + If isFiskaltrust Then + Dim result = cRKSV.insertRKSVFiskaltrustAsync(KASSE, BELEG, RKSV_Beleg_Id, 0, TESTBUCHUNG, QR_CodeString, LastJWS, fiskaltrustReceiptCasTypIntern) + verarbeitet = result + End If + + + If Not verarbeitet Then + + If Not TESTBUCHUNG Then + KASSE.DECREASE_BELEG_UMSATZ(oldBelegZaehler, summe * -1) + cRKSV.DELETE(BELEG, KASSE.rksv_firma) + End If + MsgBox("Programmfehler bei der digitalen Signatur." & vbNewLine & vbNewLine & answer, MsgBoxStyle.Critical) + ' Me.Cursor = Cursors.Default + 'BELEG = cRKSV.STORNO(BELEG, "Programmfehler") + ' MsgBox("Programmfehler bei der digitalen Signatur.") + + Return False + End If + ' If Not isFiskaltrust Then KASSE.SET_LAST_QR_JWS(LastJWS, QR_CodeString) + End If + + If KASSE.rksvDE_aktiv Then ' WENN für die Kasse die DEUTSCHLAND gilt + Dim answer = "" + + '*Nullbelg-POS* + Dim POS As New EABelegPositionen + POS.Abfertigungsart = 10 '"Sonstiges" + POS.Mandant = BELEG.Mandant + POS.Niederlassung = BELEG.Niederlassung + POS.Benutzer = BELEG.Benutzer + POS.BelegDat = BELEG.BelegDat + POS.BelegNr = BELEG.BelegNr + POS.PreislistenPos = -1 + POS.LeistungsNr = 499 + POS.LeistungsBez = belegBez + POS.Leistungsbeschreibung = belegBez + POS.PreislistenNr = -1 + POS.PreistabellenNr = -1 + POS.Preis = 0 + POS.Anzahl = 1 + POS.Anzahlmultiplikator = 1 + POS.Betrag = 0 + POS.Preisbindung = 0 + ' POS.AbfertigungsNr = 000 + BELEG.POS.Add(POS) + + 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 + If Not TESTBUCHUNG Then + KASSE.DECREASE_BELEG_UMSATZ(oldBelegZaehler, summe * -1) + cRKSV.DELETE(BELEG, KASSE.rksv_firma) + End If + MsgBox("Programmfehler bei der digitalen Signatur." & vbNewLine & vbNewLine & answer, MsgBoxStyle.Critical) + ' Me.Cursor = Cursors.Default + 'BELEG = cRKSV.STORNO(BELEG, "Programmfehler") + ' MsgBox("Programmfehler bei der digitalen Signatur.") + + Return False + End If + KASSE.SET_LAST_QR_JWS(LastJWS, QR_CodeString) + + 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX + If KASSE.rksv_KassaGuid = "KASSE_01" Then + BELEG.rksv_jws = Nothing + BELEG.rksv_qr = Nothing + End If + 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX + + End If + + 'RKSV-Daten beim Beleg ergänzen: + BELEG.rksv_jws = LastJWS + BELEG.rksv_qr = QR_CodeString + BELEG.rksv_BelegId = RKSV_Beleg_Id + BELEG.rksv_id = KASSE.rksv_id + BELEG.rksv_umsatz = summe + BELEG.rksv_aktiv = (KASSE.rksv_aktiv Or KASSE.rksvDE_aktiv) + BELEG.SAVE() + + Dim rksv As New cRKSV_Kasse(PERSONAL.cRKSV_Kasse.rksv_id) + + Select Case fiskaltrustReceiptCasTypIntern + Case ReceiptCaseIntern.NULLBELEG + rksv.SET_NULLBELEG() + Case ReceiptCaseIntern.STARTBELEG + rksv.SET_INITIALSTARTBELEG() + Case ReceiptCaseIntern.OUTOFOPERATIONBELEG + rksv.SET_OUTOFORDERBELEG() + Case ReceiptCaseIntern.TEMP_OUTOFOPERATIONBELEG + rksv.SET_OUTOFORDERBELEG() + Case ReceiptCaseIntern.DAILYCLOSING + SQL.doSQL("UPDATE [tblRKSV_FT] set ftEndOfDayReceipt = getDate() where Day(ftReceiptMoment) = Day(GETDATE()) and ftEndOfDayReceipt is null and ftCashBoxID = '" & PERSONAL.cRKSV_Kasse.rksv_FT_CashboxID & "' ", "FMZOLL") + End Select + + + If isFiskaltrust Then + + + End If + + 'printBeleg(BELEG, KASSE, PERSONAL, cboPrinter.SelectedItem.ToString) 'Beleg drucken + + + If AUTODRUCK Then + Dim pName = "" + For Each sPrinter As String In System.Drawing.Printing.PrinterSettings.InstalledPrinters + If sPrinter = "AUTODRUCK_MAIL" Then pName = sPrinter : Exit For + Next + If pName = "" Then + Dim oPS As New System.Drawing.Printing.PrinterSettings + pName = oPS.PrinterName + End If + cRKSV.printKundenBeleg(BELEG, KASSE, PERSONAL, pName, False) 'Beleg drucken + Else + cRKSV.printKundenBeleg(BELEG, KASSE, PERSONAL, "", False) 'Beleg drucken + End If + + Return True + ' End If + + Catch ex As Exception + MsgBox(ex.Message & ex.StackTrace) + End Try + Return False + + End Function + + + Public Shared Function getCardSerialInReader(kasse_id As Integer, reader As String) Try diff --git a/SDL/Classes/cRKSV_Kasse.vb b/SDL/Classes/cRKSV_Kasse.vb index f76d0f02..18c17044 100644 --- a/SDL/Classes/cRKSV_Kasse.vb +++ b/SDL/Classes/cRKSV_Kasse.vb @@ -30,6 +30,12 @@ Public Class cRKSV_Kasse Property rksv_FT_RestServiceURL As Object = Nothing Property rksv_FT_Country As Object = Nothing + Property rksv_FT_ZeroReceiptCreated As Object = Nothing + + Property rksv_FT_InitialStartCreated As Object = Nothing + + Property rksv_FT_OutOfOrderCreated As Object = Nothing + Dim SQL As New SQL @@ -184,6 +190,54 @@ Public Class cRKSV_Kasse Return False End Function + Public Function SET_NULLBELEG() As Boolean + Try + Using conn As SqlConnection = cSqlDb.GetNewOpenConnectionFMZOLL() + Using cmd As New SqlCommand(" UPDATE [tblRKSV_Kassen] SET rksv_FT_ZeroReceiptCreated = getDate() WHERE rksv_id=@rksv_id", conn) + cmd.Parameters.AddWithValue("@rksv_id", rksv_id) + Dim dr = cmd.ExecuteReader() + dr.Close() + End Using + End Using + Return True + Catch ex As Exception + MsgBox("Fehler in der Funktion '" & System.Reflection.MethodInfo.GetCurrentMethod.Name & "'" & vbNewLine & vbNewLine & ex.Message & vbNewLine & vbNewLine & ex.StackTrace) + End Try + Return False + End Function + + Public Function SET_OUTOFORDERBELEG() As Boolean + Try + Using conn As SqlConnection = cSqlDb.GetNewOpenConnectionFMZOLL() + Using cmd As New SqlCommand(" UPDATE [tblRKSV_Kassen] SET rksv_FT_OutOfOrderCreated = getDate() WHERE rksv_id=@rksv_id", conn) + cmd.Parameters.AddWithValue("@rksv_id", rksv_id) + Dim dr = cmd.ExecuteReader() + dr.Close() + End Using + End Using + Return True + Catch ex As Exception + MsgBox("Fehler in der Funktion '" & System.Reflection.MethodInfo.GetCurrentMethod.Name & "'" & vbNewLine & vbNewLine & ex.Message & vbNewLine & vbNewLine & ex.StackTrace) + End Try + Return False + End Function + + Public Function SET_INITIALSTARTBELEG() As Boolean + Try + Using conn As SqlConnection = cSqlDb.GetNewOpenConnectionFMZOLL() + Using cmd As New SqlCommand(" UPDATE [tblRKSV_Kassen] SET rksv_FT_InitialStartCreated = getDate() WHERE rksv_id=@rksv_id", conn) + cmd.Parameters.AddWithValue("@rksv_id", rksv_id) + Dim dr = cmd.ExecuteReader() + dr.Close() + End Using + End Using + Return True + Catch ex As Exception + MsgBox("Fehler in der Funktion '" & System.Reflection.MethodInfo.GetCurrentMethod.Name & "'" & vbNewLine & vbNewLine & ex.Message & vbNewLine & vbNewLine & ex.StackTrace) + End Try + Return False + End Function + Public Function SAVE() As Boolean 'obj As Object, tablename As String, where As String) As Boolean Dim list As List(Of VERAG_PROG_ALLGEMEIN.MyListItem2) = getParameterList() @@ -208,7 +262,6 @@ Public Class cRKSV_Kasse Me.rksv_id = cSqlDb.checkNullReturnValue(dr.Item("rksv_id"), Nothing) Me.rksv_bez = cSqlDb.checkNullReturnValue(dr.Item("rksv_bez"), Nothing) Me.rksv_CompanyGUID = cSqlDb.checkNullReturnValue(dr.Item("rksv_CompanyGUID"), Nothing) - Me.rksv_firma = cSqlDb.checkNullReturnValue(dr.Item("rksv_firma"), Nothing) Me.rksv_startdatum = cSqlDb.checkNullReturnValue(dr.Item("rksv_startdatum"), Nothing) Me.rksv_aktiv = cSqlDb.checkNullReturnValue(dr.Item("rksv_aktiv"), Nothing) @@ -232,6 +285,9 @@ Public Class cRKSV_Kasse Me.rksv_FT_AccessToken = cSqlDb.checkNullReturnValue(dr.Item("rksv_FT_AccessToken"), Nothing) Me.rksv_FT_RestServiceURL = cSqlDb.checkNullReturnValue(dr.Item("rksv_FT_RestServiceURL"), Nothing) Me.rksv_FT_Country = cSqlDb.checkNullReturnValue(dr.Item("rksv_FT_Country"), Nothing) + Me.rksv_FT_ZeroReceiptCreated = cSqlDb.checkNullReturnValue(dr.Item("rksv_FT_ZeroReceiptCreated"), Nothing) + Me.rksv_FT_OutOfOrderCreated = cSqlDb.checkNullReturnValue(dr.Item("rksv_FT_OutOfOrderCreated"), Nothing) + Me.rksv_FT_InitialStartCreated = cSqlDb.checkNullReturnValue(dr.Item("rksv_FT_InitialStartCreated"), Nothing) End If dr.Close() @@ -273,6 +329,9 @@ Public Class cRKSV_Kasse list.Add(New VERAG_PROG_ALLGEMEIN.MyListItem2("rksv_FT_AccessToken", rksv_FT_AccessToken)) list.Add(New VERAG_PROG_ALLGEMEIN.MyListItem2("rksv_FT_RestServiceURL", rksv_FT_RestServiceURL)) list.Add(New VERAG_PROG_ALLGEMEIN.MyListItem2("rksv_FT_Country", rksv_FT_Country)) + list.Add(New VERAG_PROG_ALLGEMEIN.MyListItem2("rksv_FT_ZeroReceiptCreated", rksv_FT_ZeroReceiptCreated)) + list.Add(New VERAG_PROG_ALLGEMEIN.MyListItem2("rksv_FT_InitialStartCreated", rksv_FT_InitialStartCreated)) + list.Add(New VERAG_PROG_ALLGEMEIN.MyListItem2("rksv_FT_OutOfOrderCreated", rksv_FT_OutOfOrderCreated)) Return list diff --git a/SDL/Fakturierung/cAutomailversand.vb b/SDL/Fakturierung/cAutomailversand.vb index a1fbbf64..bbc88c3f 100644 --- a/SDL/Fakturierung/cAutomailversand.vb +++ b/SDL/Fakturierung/cAutomailversand.vb @@ -404,6 +404,12 @@ Public Class cAutomailversand Subject = Subject.Replace("%Belegtyp%", belegtyp) Subject = Subject.Replace("%BelegNr%", txtRgNr) + If RECHNUNG IsNot Nothing Then + Subject = Subject.Replace("%FilialNr%%AbfertigungsNr%-%UnterNr%", RECHNUNG.FilialenNr & "-" & RECHNUNG.AbfertigungsNr & "-" & RECHNUNG.UnterNr) + Else + Subject = Subject.Replace("%FilialNr%%AbfertigungsNr%-%UnterNr%", "") + End If + TextHTML &= r.txt_text TextHTML = TextHTML.Replace("%Belegtyp%", belegtyp) @@ -1414,7 +1420,7 @@ Public Class cAutomailversand End Function - Private Function setAccountToSend(FIRMA_ID As Integer) As String + Public Function setAccountToSend(FIRMA_ID As Integer) As String Dim tmpFirma = New VERAG_PROG_ALLGEMEIN.cFirmen(FIRMA_ID) @@ -1529,7 +1535,7 @@ Public Class cAutomailversand End Function - Public Shared Function automRechnungsversand_aktivieren(showMessage As Boolean, Optional isEinzelrechnung As Boolean = False) + Public Shared Function automRechnungsversand_aktivieren(showMessage As Boolean, datum As Date, Optional isEinzelrechnung As Boolean = False) Dim RE_Text = "" @@ -1542,7 +1548,7 @@ Public Class cAutomailversand If Not showMessage Then Return True Else - If vbYes = MsgBox("Möchten Sie für " & RE_Text & " den automatischen Emailversand aktivieren?" & vbNewLine & "Die Rechnungen werden automatisch im Nachtlauf per EMail verschickt!", vbYesNoCancel) Then + If vbYes = MsgBox("Möchten Sie für " & RE_Text & " den automatischen Emailversand aktivieren?" & vbNewLine & "Die Rechnungen werden automatisch im Nachtlauf per EMail verschickt!" & vbNewLine & "Rechungsdatum: " & datum.ToShortDateString, vbYesNoCancel) Then Return True Else Return False diff --git a/SDL/Fakturierung/cFakturierung.vb b/SDL/Fakturierung/cFakturierung.vb index 7000b6fe..22b04357 100644 --- a/SDL/Fakturierung/cFakturierung.vb +++ b/SDL/Fakturierung/cFakturierung.vb @@ -945,7 +945,7 @@ Public Class cFakturierung Case 1 rpt.picVERAG.Image = My.Resources.Verag_AG_Logo - rpt.Picture1.Image = My.Resources.aeo_AT_imex + rpt.Picture1.Image = My.Resources.aeo Case 4 rpt.picVERAG.Image = My.Resources.Verag_AG_Logo @@ -2627,12 +2627,20 @@ Public Class cFakturierung If listVZMonth.Count > 0 Then If listVZMonth.Count = 1 Then - MonthStart = IIf(CDate(MWSTAntrag.UStVAn_ReDatVon).Month < 10, "0", "") & listVZMonth(0).ToString + MonthStart = IIf(listVZMonth(0) < 10, "0", "") & listVZMonth(0).ToString MonthEnd = "" Else - MonthStart = IIf(CDate(MWSTAntrag.UStVAn_ReDatVon).Month < 10, "0", "") & listVZMonth(0).ToString - MonthEnd = IIf(CDate(MWSTAntrag.UStVAn_ReDatBis).Month < 10, "0", "") & listVZMonth(listVZMonth.Count - 1).ToString + MonthStart = IIf(listVZMonth(0) < 10, "0", "") & listVZMonth(0).ToString + MonthEnd = IIf(listVZMonth(listVZMonth.Count - 1) < 10, "0", "") & listVZMonth(listVZMonth.Count - 1).ToString End If + + 'If listVZMonth.Count = 1 Then + ' MonthStart = IIf(CDate(MWSTAntrag.UStVAn_ReDatVon).Month < 10, "0", "") & listVZMonth(0).ToString + ' MonthEnd = "" + 'Else + ' MonthStart = IIf(CDate(MWSTAntrag.UStVAn_ReDatVon).Month < 10, "0", "") & listVZMonth(0).ToString + ' MonthEnd = IIf(CDate(MWSTAntrag.UStVAn_ReDatBis).Month < 10, "0", "") & listVZMonth(listVZMonth.Count - 1).ToString + 'End If End If @@ -3050,6 +3058,9 @@ Public Class cFakturierung Dim FIRMA As New VERAG_PROG_ALLGEMEIN.cFirmen(RECHNUNG.Firma_ID) 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" desc.Name = "SPEDITIONSRECHNUNG" @@ -3100,29 +3111,34 @@ Public Class cFakturierung ' Optionally, to support Peppol----------------------------- + If RECHNUNG.FilialenNr > 0 AndAlso RECHNUNG.AbfertigungsNr > 0 Then + Dim lrn = RECHNUNG.FilialenNr & "/" & RECHNUNG.AbfertigungsNr + desc.AddAdditionalReferencedDocument(lrn, AdditionalReferencedDocumentTypeCode.ReferenceDocument) + + End If If Not IsDBNull(RECHNUNG.RechnungsUstIdNr) AndAlso RECHNUNG.RechnungsUstIdNr IsNot Nothing AndAlso Not IsDBNull(RECHNUNG.RechnungsUstIdKz) AndAlso RECHNUNG.RechnungsUstIdKz IsNot Nothing Then - desc.AddBuyerTaxRegistration(RECHNUNG.RechnungsUstIdKz & RECHNUNG.RechnungsUstIdNr, TaxRegistrationSchemeID.VA) - If vatBuyer Then - desc.SetBuyerElectronicAddress(RECHNUNG.RechnungsUstIdKz & RECHNUNG.RechnungsUstIdNr, vatBuyer) - desc.SetSellerElectronicAddress(FIRMA.Firma_UID.ToString.Replace("UID: ", ""), vatSeller) + desc.AddBuyerTaxRegistration(RECHNUNG.RechnungsUstIdKz & RECHNUNG.RechnungsUstIdNr, TaxRegistrationSchemeID.VA) + If vatBuyer Then + desc.SetBuyerElectronicAddress(RECHNUNG.RechnungsUstIdKz & RECHNUNG.RechnungsUstIdNr, vatBuyer) + desc.SetSellerElectronicAddress(FIRMA.Firma_UID.ToString.Replace("UID: ", ""), vatSeller) + End If + + End If + '----------------------------- + desc.ActualDeliveryDate = (RECHNUNG.Abfertigungsdatum) + + Dim steuerProzent As Double = SQL.DLookup(" isnull([Steuersatz %],0)", "[Steuertabelle] ", "[Steuerschlüssel]='" & checkNull(RECHNUNG.Steuerschlüssel) & "'", "FMZOLL", 0) + Dim steuerProzenFaktor As Double = 0 + If steuerProzent > 0 AndAlso steuerProzent < 1 Then + steuerProzenFaktor = steuerProzent * 100 End If - End If - '----------------------------- - desc.ActualDeliveryDate = (RECHNUNG.Abfertigungsdatum) - Dim steuerProzent As Double = SQL.DLookup(" isnull([Steuersatz %],0)", "[Steuertabelle] ", "[Steuerschlüssel]='" & checkNull(RECHNUNG.Steuerschlüssel) & "'", "FMZOLL", 0) - Dim steuerProzenFaktor As Double = 0 - If steuerProzent > 0 AndAlso steuerProzent < 1 Then - steuerProzenFaktor = steuerProzent * 100 - End If + Dim sumNetto As Double = 0 + For Each p In RECHNUNG.POSITIONEN - - Dim sumNetto As Double = 0 - For Each p In RECHNUNG.POSITIONEN - - Dim tradeLineItemNew As TradeLineItem = desc.AddTradeLineItem( + Dim tradeLineItemNew As TradeLineItem = desc.AddTradeLineItem( name:=p.LeistungsBez, billedQuantity:=Convert.ToDecimal(p.Anzahl), unitCode:=QuantityCodes.C62, ' immer in Stück @@ -3132,27 +3148,27 @@ Public Class cFakturierung taxPercent:=IIf(p.Steuerpflichtig, Convert.ToDecimal(RECHNUNG.Steuersatz_Proz * 100), 0), taxType:=IIf(p.Steuerpflichtig, TaxTypes.VAT, TaxTypes.VAT) ) - Dim netUnitPrice = Convert.ToDecimal(p.Preis) - Dim grossUnitPrice = IIf(p.Steuerpflichtig, Convert.ToDecimal(p.Preis * (1 + RECHNUNG.Steuersatz_Proz)), Convert.ToDecimal(p.Preis)) - Dim netPricePos = netUnitPrice * Convert.ToDecimal(p.Anzahl) - sumNetto += netPricePos - Next + Dim netUnitPrice = Convert.ToDecimal(p.Preis) + Dim grossUnitPrice = IIf(p.Steuerpflichtig, Convert.ToDecimal(p.Preis * (1 + RECHNUNG.Steuersatz_Proz)), Convert.ToDecimal(p.Preis)) + Dim netPricePos = netUnitPrice * Convert.ToDecimal(p.Anzahl) + sumNetto += netPricePos + Next - 'Summe aller Rechnungspositions-Nettobeträge der Rechnung - Dim lineTotalAmont = sumNetto - 'Der Gesamtbetrag der Umsatzsteuer für die Rechnung, - 'IIf(RECHNUNG.SteuerpflichtigerGesamtbetrag <> 0, Math.Round(Convert.ToDecimal(RECHNUNG.SteuerpflichtigerGesamtbetrag) / (100 + steuerProzenFaktor) * steuerProzenFaktor, 2), 0) ?????????????????? - Dim taxTotalAmount = IIf(RECHNUNG.SteuerpflichtigerGesamtbetrag <> 0, Math.Round(Convert.ToDecimal(RECHNUNG.SteuerpflichtigerGesamtbetrag) / (100 + steuerProzenFaktor) * steuerProzenFaktor, 2, MidpointRounding.AwayFromZero), 0) - ' Die Gesamtsumme der Rechnung ohne Umsatzsteuer ' RECHNUNG.SteuerfreierGesamtbetrag + RECHNUNG.SteuerpflichtigerGesamtbetrag + 0 - 0 - Dim taxBasisAmount = Convert.ToDecimal(RECHNUNG.SteuerfreierGesamtbetrag + RECHNUNG.SteuerpflichtigerGesamtbetrag + 0 - 0 - taxTotalAmount) - 'Der Gesamtbetrag der Rechnung mit Umsatzsteuer - 'Dim grandTotalAmount = Convert.ToDecimal(RECHNUNG.SteuerfreierGesamtbetrag + RECHNUNG.SteuerpflichtigerGesamtbetrag + taxTotalAmount) - Dim grandTotalAmount = Convert.ToDecimal(RECHNUNG.SteuerfreierGesamtbetrag + RECHNUNG.SteuerpflichtigerGesamtbetrag) - 'Der ausstehende Betrag, um dessen Zahlung gebeten wird. Dieser Betrag ist der Rechnungsgesamtbetrag einschließlich Umsatzsteuer abzüglich des im Voraus gezahlten Betrages.Im Falle einer vollständig beglichenen Rechnung ist dieser Betrag gleich null. Der Betrag kann negativ sein; In diesem Fall schuldet der Verkäufer dem Käufer den Betrag - 'Dim duePayableAmount = Convert.ToDecimal(RECHNUNG.SteuerfreierGesamtbetrag + RECHNUNG.SteuerpflichtigerGesamtbetrag + taxTotalAmount) - Dim duePayableAmount = Convert.ToDecimal(RECHNUNG.SteuerfreierGesamtbetrag + RECHNUNG.SteuerpflichtigerGesamtbetrag) + 'Summe aller Rechnungspositions-Nettobeträge der Rechnung + Dim lineTotalAmont = sumNetto + 'Der Gesamtbetrag der Umsatzsteuer für die Rechnung, + 'IIf(RECHNUNG.SteuerpflichtigerGesamtbetrag <> 0, Math.Round(Convert.ToDecimal(RECHNUNG.SteuerpflichtigerGesamtbetrag) / (100 + steuerProzenFaktor) * steuerProzenFaktor, 2), 0) ?????????????????? + Dim taxTotalAmount = IIf(RECHNUNG.SteuerpflichtigerGesamtbetrag <> 0, Math.Round(Convert.ToDecimal(RECHNUNG.SteuerpflichtigerGesamtbetrag) / (100 + steuerProzenFaktor) * steuerProzenFaktor, 2, MidpointRounding.AwayFromZero), 0) + ' Die Gesamtsumme der Rechnung ohne Umsatzsteuer ' RECHNUNG.SteuerfreierGesamtbetrag + RECHNUNG.SteuerpflichtigerGesamtbetrag + 0 - 0 + Dim taxBasisAmount = Convert.ToDecimal(RECHNUNG.SteuerfreierGesamtbetrag + RECHNUNG.SteuerpflichtigerGesamtbetrag + 0 - 0 - taxTotalAmount) + 'Der Gesamtbetrag der Rechnung mit Umsatzsteuer + 'Dim grandTotalAmount = Convert.ToDecimal(RECHNUNG.SteuerfreierGesamtbetrag + RECHNUNG.SteuerpflichtigerGesamtbetrag + taxTotalAmount) + Dim grandTotalAmount = Convert.ToDecimal(RECHNUNG.SteuerfreierGesamtbetrag + RECHNUNG.SteuerpflichtigerGesamtbetrag) + 'Der ausstehende Betrag, um dessen Zahlung gebeten wird. Dieser Betrag ist der Rechnungsgesamtbetrag einschließlich Umsatzsteuer abzüglich des im Voraus gezahlten Betrages.Im Falle einer vollständig beglichenen Rechnung ist dieser Betrag gleich null. Der Betrag kann negativ sein; In diesem Fall schuldet der Verkäufer dem Käufer den Betrag + 'Dim duePayableAmount = Convert.ToDecimal(RECHNUNG.SteuerfreierGesamtbetrag + RECHNUNG.SteuerpflichtigerGesamtbetrag + taxTotalAmount) + Dim duePayableAmount = Convert.ToDecimal(RECHNUNG.SteuerfreierGesamtbetrag + RECHNUNG.SteuerpflichtigerGesamtbetrag) - desc.SetTotals( + desc.SetTotals( lineTotalAmount:=Convert.ToDecimal(lineTotalAmont), chargeTotalAmount:=0, 'Summe aller in der Rechnung enthaltenen Zuschläge der Dokumentenebene allowanceTotalAmount:=0, 'Summe aller in der Rechnung enthaltenen Abschläge der Dokumenteneben @@ -3165,96 +3181,96 @@ Public Class cFakturierung ) - desc.AddTradePaymentTerms(RECHNUNG.TextZZ, zahlungszieldatum) + desc.AddTradePaymentTerms(RECHNUNG.TextZZ, zahlungszieldatum) - 'If RECHNUNG.TextZZ.ToString.Contains("Abbuchungsauftrag") Then - ' desc.SetPaymentMeansSepaDirectDebit("", "") - 'Else - desc.SetPaymentMeans(PaymentMeansTypeCodes.SEPACreditTransfer, RECHNUNG.TextZZ) - 'End If + 'If RECHNUNG.TextZZ.ToString.Contains("Abbuchungsauftrag") Then + ' desc.SetPaymentMeansSepaDirectDebit("", "") + 'Else + desc.SetPaymentMeans(PaymentMeansTypeCodes.SEPACreditTransfer, RECHNUNG.TextZZ) + 'End If - Dim isReverseCharge = isReverseChargeSumme(FIRMA, RECHNUNG) - If isReverseCharge Then - Select Case RECHNUNG.RechnungSprache - Case "EN" : desc.AddNote("The VAT liability is transferred to the recipient of the service (reverse charge system).", SubjectCodes.AAI) - Case Else : desc.AddNote("Die Umsatzsteuerschuld geht auf den Leistungsempfänger über (Reverse Charge Verfahren).", SubjectCodes.AAI) - End Select - End If + Dim isReverseCharge = isReverseChargeSumme(FIRMA, RECHNUNG) + If isReverseCharge Then + Select Case RECHNUNG.RechnungSprache + Case "EN" : desc.AddNote("The VAT liability is transferred to the recipient of the service (reverse charge system).", SubjectCodes.AAI) + Case Else : desc.AddNote("Die Umsatzsteuerschuld geht auf den Leistungsempfänger über (Reverse Charge Verfahren).", SubjectCodes.AAI) + End Select + End If - If RECHNUNG.SteuerfreierGesamtbetrag > 0 Then - desc.AddApplicableTradeTax(Convert.ToDecimal(RECHNUNG.SteuerfreierGesamtbetrag), 0, 0, TaxTypes.VAT, TaxCategoryCodes.Z) - End If + If RECHNUNG.SteuerfreierGesamtbetrag > 0 Then + desc.AddApplicableTradeTax(Convert.ToDecimal(RECHNUNG.SteuerfreierGesamtbetrag), 0, 0, TaxTypes.VAT, TaxCategoryCodes.Z) + End If - If RECHNUNG.SteuerpflichtigerGesamtbetrag > 0 Then - desc.AddApplicableTradeTax(Convert.ToDecimal(taxBasisAmount - RECHNUNG.SteuerfreierGesamtbetrag), Convert.ToDecimal(steuerProzenFaktor), Convert.ToDecimal(taxTotalAmount), TaxTypes.VAT, IIf(isReverseCharge, TaxCategoryCodes.AE, TaxCategoryCodes.S)) - End If + If RECHNUNG.SteuerpflichtigerGesamtbetrag > 0 Then + desc.AddApplicableTradeTax(Convert.ToDecimal(taxBasisAmount - RECHNUNG.SteuerfreierGesamtbetrag), Convert.ToDecimal(steuerProzenFaktor), Convert.ToDecimal(taxTotalAmount), TaxTypes.VAT, IIf(isReverseCharge, TaxCategoryCodes.AE, TaxCategoryCodes.S)) + End If - Select Case FIRMA.Firma_ID - Case 21, 22, 23 '"UNISPED" - If FIRMA.Firma_IBAN1 IsNot Nothing AndAlso FIRMA.Firma_BIC1 IsNot Nothing AndAlso FIRMA.Firma_Bankverbindung1 IsNot Nothing Then desc.AddCreditorFinancialAccount(IIf(FIRMA.Firma_IBAN1 IsNot Nothing, FIRMA.Firma_IBAN1.ToString.Replace("IBAN: ", ""), ""), IIf(FIRMA.Firma_BIC1 IsNot Nothing, FIRMA.Firma_BIC1.ToString.Replace("BIC: ", ""), ""),,, IIf(FIRMA.Firma_Bankverbindung1 IsNot Nothing, FIRMA.Firma_Bankverbindung1, "")) - If FIRMA.Firma_IBAN2 IsNot Nothing AndAlso FIRMA.Firma_BIC2 IsNot Nothing AndAlso FIRMA.Firma_Bankverbindung2 IsNot Nothing Then desc.AddCreditorFinancialAccount(IIf(FIRMA.Firma_IBAN2 IsNot Nothing, FIRMA.Firma_IBAN2.ToString.Replace("IBAN: ", ""), ""), IIf(FIRMA.Firma_BIC2 IsNot Nothing, FIRMA.Firma_BIC2.ToString.Replace("BIC: ", ""), ""),,, IIf(FIRMA.Firma_Bankverbindung2 IsNot Nothing, FIRMA.Firma_Bankverbindung2, "")) + Select Case FIRMA.Firma_ID + Case 21, 22, 23 '"UNISPED" + If FIRMA.Firma_IBAN1 IsNot Nothing AndAlso FIRMA.Firma_BIC1 IsNot Nothing AndAlso FIRMA.Firma_Bankverbindung1 IsNot Nothing Then desc.AddCreditorFinancialAccount(IIf(FIRMA.Firma_IBAN1 IsNot Nothing, FIRMA.Firma_IBAN1.ToString.Replace("IBAN: ", ""), ""), IIf(FIRMA.Firma_BIC1 IsNot Nothing, FIRMA.Firma_BIC1.ToString.Replace("BIC: ", ""), ""),,, IIf(FIRMA.Firma_Bankverbindung1 IsNot Nothing, FIRMA.Firma_Bankverbindung1, "")) + If FIRMA.Firma_IBAN2 IsNot Nothing AndAlso FIRMA.Firma_BIC2 IsNot Nothing AndAlso FIRMA.Firma_Bankverbindung2 IsNot Nothing Then desc.AddCreditorFinancialAccount(IIf(FIRMA.Firma_IBAN2 IsNot Nothing, FIRMA.Firma_IBAN2.ToString.Replace("IBAN: ", ""), ""), IIf(FIRMA.Firma_BIC2 IsNot Nothing, FIRMA.Firma_BIC2.ToString.Replace("BIC: ", ""), ""),,, IIf(FIRMA.Firma_Bankverbindung2 IsNot Nothing, FIRMA.Firma_Bankverbindung2, "")) - Case 26 'VERAG-UNISPED" - If FIRMA.Firma_IBAN1 IsNot Nothing AndAlso FIRMA.Firma_BIC1 IsNot Nothing AndAlso FIRMA.Firma_Bankverbindung1 IsNot Nothing Then desc.AddCreditorFinancialAccount(IIf(FIRMA.Firma_IBAN1 IsNot Nothing, FIRMA.Firma_IBAN1.ToString.Replace("IBAN: ", ""), ""), IIf(FIRMA.Firma_BIC1 IsNot Nothing, FIRMA.Firma_BIC1.ToString.Replace("BIC: ", ""), ""),,, IIf(FIRMA.Firma_Bankverbindung1 IsNot Nothing, FIRMA.Firma_Bankverbindung1, "")) - If FIRMA.Firma_IBAN2 IsNot Nothing AndAlso FIRMA.Firma_BIC2 IsNot Nothing AndAlso FIRMA.Firma_Bankverbindung2 IsNot Nothing Then desc.AddCreditorFinancialAccount(IIf(FIRMA.Firma_IBAN2 IsNot Nothing, FIRMA.Firma_IBAN2.ToString.Replace("IBAN: ", ""), ""), IIf(FIRMA.Firma_BIC2 IsNot Nothing, FIRMA.Firma_BIC2.ToString.Replace("BIC: ", ""), ""),,, IIf(FIRMA.Firma_Bankverbindung2 IsNot Nothing, FIRMA.Firma_Bankverbindung2, "")) + Case 26 'VERAG-UNISPED" + If FIRMA.Firma_IBAN1 IsNot Nothing AndAlso FIRMA.Firma_BIC1 IsNot Nothing AndAlso FIRMA.Firma_Bankverbindung1 IsNot Nothing Then desc.AddCreditorFinancialAccount(IIf(FIRMA.Firma_IBAN1 IsNot Nothing, FIRMA.Firma_IBAN1.ToString.Replace("IBAN: ", ""), ""), IIf(FIRMA.Firma_BIC1 IsNot Nothing, FIRMA.Firma_BIC1.ToString.Replace("BIC: ", ""), ""),,, IIf(FIRMA.Firma_Bankverbindung1 IsNot Nothing, FIRMA.Firma_Bankverbindung1, "")) + If FIRMA.Firma_IBAN2 IsNot Nothing AndAlso FIRMA.Firma_BIC2 IsNot Nothing AndAlso FIRMA.Firma_Bankverbindung2 IsNot Nothing Then desc.AddCreditorFinancialAccount(IIf(FIRMA.Firma_IBAN2 IsNot Nothing, FIRMA.Firma_IBAN2.ToString.Replace("IBAN: ", ""), ""), IIf(FIRMA.Firma_BIC2 IsNot Nothing, FIRMA.Firma_BIC2.ToString.Replace("BIC: ", ""), ""),,, IIf(FIRMA.Firma_Bankverbindung2 IsNot Nothing, FIRMA.Firma_Bankverbindung2, "")) - Case 24 'AMBAR" - If FIRMA.Firma_IBAN1 IsNot Nothing AndAlso FIRMA.Firma_BIC1 IsNot Nothing AndAlso FIRMA.Firma_Bankverbindung1 IsNot Nothing Then desc.AddCreditorFinancialAccount(IIf(FIRMA.Firma_IBAN1 IsNot Nothing, FIRMA.Firma_IBAN1.ToString.Replace("IBAN: ", ""), ""), IIf(FIRMA.Firma_BIC1 IsNot Nothing, FIRMA.Firma_BIC1.ToString.Replace("BIC: ", ""), ""),,, IIf(FIRMA.Firma_Bankverbindung1 IsNot Nothing, FIRMA.Firma_Bankverbindung1, "")) - If FIRMA.Firma_IBAN2 IsNot Nothing AndAlso FIRMA.Firma_BIC2 IsNot Nothing AndAlso FIRMA.Firma_Bankverbindung2 IsNot Nothing Then desc.AddCreditorFinancialAccount(IIf(FIRMA.Firma_IBAN2 IsNot Nothing, FIRMA.Firma_IBAN2.ToString.Replace("IBAN: ", ""), ""), IIf(FIRMA.Firma_BIC2 IsNot Nothing, FIRMA.Firma_BIC2.ToString.Replace("BIC: ", ""), ""),,, IIf(FIRMA.Firma_Bankverbindung2 IsNot Nothing, FIRMA.Firma_Bankverbindung2, "")) - 'Änderung Ticket_Nr.: 6983 - 'desc.AddCreditorFinancialAccount("TR90 0006 2001 6040 0009 0804 66", "TGBATRISXXX",,, "Garanti Bank Türkei – Euro Konto") - desc.AddCreditorFinancialAccount("TR67 0006 2000 5440 0009 0513 57", "TGBATRISXXX",,, "Garanti Bank Türkei – Euro Konto") + Case 24 'AMBAR" + If FIRMA.Firma_IBAN1 IsNot Nothing AndAlso FIRMA.Firma_BIC1 IsNot Nothing AndAlso FIRMA.Firma_Bankverbindung1 IsNot Nothing Then desc.AddCreditorFinancialAccount(IIf(FIRMA.Firma_IBAN1 IsNot Nothing, FIRMA.Firma_IBAN1.ToString.Replace("IBAN: ", ""), ""), IIf(FIRMA.Firma_BIC1 IsNot Nothing, FIRMA.Firma_BIC1.ToString.Replace("BIC: ", ""), ""),,, IIf(FIRMA.Firma_Bankverbindung1 IsNot Nothing, FIRMA.Firma_Bankverbindung1, "")) + If FIRMA.Firma_IBAN2 IsNot Nothing AndAlso FIRMA.Firma_BIC2 IsNot Nothing AndAlso FIRMA.Firma_Bankverbindung2 IsNot Nothing Then desc.AddCreditorFinancialAccount(IIf(FIRMA.Firma_IBAN2 IsNot Nothing, FIRMA.Firma_IBAN2.ToString.Replace("IBAN: ", ""), ""), IIf(FIRMA.Firma_BIC2 IsNot Nothing, FIRMA.Firma_BIC2.ToString.Replace("BIC: ", ""), ""),,, IIf(FIRMA.Firma_Bankverbindung2 IsNot Nothing, FIRMA.Firma_Bankverbindung2, "")) + 'Änderung Ticket_Nr.: 6983 + 'desc.AddCreditorFinancialAccount("TR90 0006 2001 6040 0009 0804 66", "TGBATRISXXX",,, "Garanti Bank Türkei – Euro Konto") + desc.AddCreditorFinancialAccount("TR67 0006 2000 5440 0009 0513 57", "TGBATRISXXX",,, "Garanti Bank Türkei – Euro Konto") - Case 20 '"IMEX" - If RECHNUNG.RechnungsLandKz = "TR" Then - desc.AddCreditorFinancialAccount("TR84 0006 2001 6040 0009 0987 13", "",,, "Garanti Bank") - Else - If hasVK(RECHNUNG) Then - desc.AddCreditorFinancialAccount("AT35 4480 0365 7822 0002", "VBOEATWWOOE",,, "Volksbank Oberösterreich AG") + Case 20 '"IMEX" + If RECHNUNG.RechnungsLandKz = "TR" Then + desc.AddCreditorFinancialAccount("TR84 0006 2001 6040 0009 0987 13", "",,, "Garanti Bank") Else - If hasEUSTZOLL(RECHNUNG.RechnungsNr) Then - desc.AddCreditorFinancialAccount("AT62 4480 0365 7822 0001", "VBOEATWWOOE", ) + If hasVK(RECHNUNG) Then + desc.AddCreditorFinancialAccount("AT35 4480 0365 7822 0002", "VBOEATWWOOE",,, "Volksbank Oberösterreich AG") Else - desc.AddCreditorFinancialAccount("TR84 0006 2001 6040 0009 0987 13", "VBOEATWWOOE", ,, "Volksbank Oberösterreich AG") + If hasEUSTZOLL(RECHNUNG.RechnungsNr) Then + desc.AddCreditorFinancialAccount("AT62 4480 0365 7822 0001", "VBOEATWWOOE", ) + Else + desc.AddCreditorFinancialAccount("TR84 0006 2001 6040 0009 0987 13", "VBOEATWWOOE", ,, "Volksbank Oberösterreich AG") + End If End If End If - End If - Case 19 - If FIRMA.Firma_IBAN1 IsNot Nothing AndAlso FIRMA.Firma_BIC1 IsNot Nothing AndAlso FIRMA.Firma_Bankverbindung1 IsNot Nothing Then desc.AddCreditorFinancialAccount(IIf(FIRMA.Firma_IBAN1 IsNot Nothing, FIRMA.Firma_IBAN1.ToString.Replace("IBAN: ", ""), ""), IIf(FIRMA.Firma_BIC1 IsNot Nothing, FIRMA.Firma_BIC1.ToString.Replace("BIC: ", ""), ""),,, IIf(FIRMA.Firma_Bankverbindung1 IsNot Nothing, FIRMA.Firma_Bankverbindung1, "")) + Case 19 + If FIRMA.Firma_IBAN1 IsNot Nothing AndAlso FIRMA.Firma_BIC1 IsNot Nothing AndAlso FIRMA.Firma_Bankverbindung1 IsNot Nothing Then desc.AddCreditorFinancialAccount(IIf(FIRMA.Firma_IBAN1 IsNot Nothing, FIRMA.Firma_IBAN1.ToString.Replace("IBAN: ", ""), ""), IIf(FIRMA.Firma_BIC1 IsNot Nothing, FIRMA.Firma_BIC1.ToString.Replace("BIC: ", ""), ""),,, IIf(FIRMA.Firma_Bankverbindung1 IsNot Nothing, FIRMA.Firma_Bankverbindung1, "")) - Case Else 'VERAG,ATILLA - If FIRMA.Firma_IBAN1 IsNot Nothing AndAlso FIRMA.Firma_BIC1 IsNot Nothing AndAlso FIRMA.Firma_Bankverbindung1 IsNot Nothing Then desc.AddCreditorFinancialAccount(IIf(FIRMA.Firma_IBAN1 IsNot Nothing, FIRMA.Firma_IBAN1.ToString.Replace("IBAN: ", ""), ""), IIf(FIRMA.Firma_BIC1 IsNot Nothing, FIRMA.Firma_BIC1.ToString.Replace("BIC: ", ""), ""),,, IIf(FIRMA.Firma_Bankverbindung1 IsNot Nothing, FIRMA.Firma_Bankverbindung1, "")) - If FIRMA.Firma_IBAN2 IsNot Nothing AndAlso FIRMA.Firma_BIC2 IsNot Nothing AndAlso FIRMA.Firma_Bankverbindung2 IsNot Nothing Then desc.AddCreditorFinancialAccount(IIf(FIRMA.Firma_IBAN2 IsNot Nothing, FIRMA.Firma_IBAN2.ToString.Replace("IBAN: ", ""), ""), IIf(FIRMA.Firma_BIC2 IsNot Nothing, FIRMA.Firma_BIC2.ToString.Replace("BIC: ", ""), ""),,, IIf(FIRMA.Firma_Bankverbindung2 IsNot Nothing, FIRMA.Firma_Bankverbindung2, "")) + Case Else 'VERAG,ATILLA + If FIRMA.Firma_IBAN1 IsNot Nothing AndAlso FIRMA.Firma_BIC1 IsNot Nothing AndAlso FIRMA.Firma_Bankverbindung1 IsNot Nothing Then desc.AddCreditorFinancialAccount(IIf(FIRMA.Firma_IBAN1 IsNot Nothing, FIRMA.Firma_IBAN1.ToString.Replace("IBAN: ", ""), ""), IIf(FIRMA.Firma_BIC1 IsNot Nothing, FIRMA.Firma_BIC1.ToString.Replace("BIC: ", ""), ""),,, IIf(FIRMA.Firma_Bankverbindung1 IsNot Nothing, FIRMA.Firma_Bankverbindung1, "")) + If FIRMA.Firma_IBAN2 IsNot Nothing AndAlso FIRMA.Firma_BIC2 IsNot Nothing AndAlso FIRMA.Firma_Bankverbindung2 IsNot Nothing Then desc.AddCreditorFinancialAccount(IIf(FIRMA.Firma_IBAN2 IsNot Nothing, FIRMA.Firma_IBAN2.ToString.Replace("IBAN: ", ""), ""), IIf(FIRMA.Firma_BIC2 IsNot Nothing, FIRMA.Firma_BIC2.ToString.Replace("BIC: ", ""), ""),,, IIf(FIRMA.Firma_Bankverbindung2 IsNot Nothing, FIRMA.Firma_Bankverbindung2, "")) - End Select + End Select - Dim tmpPathZugpferd = VERAG_PROG_ALLGEMEIN.DATENVERVER_OPTIONS.getTMPPath("ZUGFeRD_Invoice_" & RECHNUNG.RechnungsNr, ".xml", True, False) + Dim tmpPathZugpferd = VERAG_PROG_ALLGEMEIN.DATENVERVER_OPTIONS.getTMPPath("ZUGFeRD_Invoice_" & RECHNUNG.RechnungsNr, ".xml", True, False) - Using stream As New FileStream(tmpPathZugpferd, FileMode.Create, FileAccess.Write, FileShare.None) - desc.Save(stream, ZUGFeRDVersion.Version20, Profile.Comfort) - End Using + Using stream As New FileStream(tmpPathZugpferd, FileMode.Create, FileAccess.Write, FileShare.None) + desc.Save(stream, ZUGFeRDVersion.Version20, Profile.Comfort) + End Using - Return tmpPathZugpferd + Return tmpPathZugpferd - 'Dim stream As FileStream = New FileStream(tmpPathZugpferd, FileMode.Create, FileAccess.Write) - 'desc.Save(stream, ZUGFeRDVersion.Version20, Profile.Comfort) + 'Dim stream As FileStream = New FileStream(tmpPathZugpferd, FileMode.Create, FileAccess.Write) + 'desc.Save(stream, ZUGFeRDVersion.Version20, Profile.Comfort) - 'stream.Flush() - 'stream.Close() - 'Return tmpPathZugpferd + 'stream.Flush() + 'stream.Close() + 'Return tmpPathZugpferd - ElseIf Not einzelrechnung AndAlso SR_DT IsNot Nothing Then + ElseIf Not einzelrechnung AndAlso SR_DT IsNot Nothing Then - '--------------------------------------------------------------------------------- - '--------------------------------SAMMELRECHNUNG----------------------------------- - '--------------------------------------------------------------------------------- + '--------------------------------------------------------------------------------- + '--------------------------------SAMMELRECHNUNG----------------------------------- + '--------------------------------------------------------------------------------- - Dim ROW As DataRow = SR_DT.Rows(0) + Dim ROW As DataRow = SR_DT.Rows(0) Dim FIRMA As New VERAG_PROG_ALLGEMEIN.cFirmen(ROW("Firma_ID")) Dim RECHNUNG_AD As New VERAG_PROG_ALLGEMEIN.cAdressen(ROW("RechnungsKundenNr")) @@ -3289,6 +3305,17 @@ Public Class cFakturierung End Select + If Not IsDBNull(ROW("FilialenNr")) AndAlso Not IsDBNull(ROW("AbfertigungsNr")) Then + + Dim filialenNr As String = ROW("FilialenNr").ToString().Trim() + Dim abfertigungsNr As String = ROW("AbfertigungsNr").ToString().Trim() + + If filialenNr <> String.Empty AndAlso abfertigungsNr <> String.Empty Then + Dim lrn As String = filialenNr & "/" & abfertigungsNr + desc.AddAdditionalReferencedDocument(lrn, AdditionalReferencedDocumentTypeCode.ReferenceDocument) + End If + End If + 'Die „Berechnung BT-10“ bezieht sich auf das Feld BT-10 „Buyer reference“ (Käuferreferenz) in der elektronischen Rechnung, speziell im XRechnung-Standard. Dieses Feld dient zur Angabe der Leitweg-ID 'für öffentliche Auftraggeber oder anderer Referenzinformationen für interne Zuordnungsprozesse. 'Die Leitweg-ID ist in Deutschland eine Pflichtangabe für elektronische Rechnungen an die Bundesverwaltung und muss vom Rechnungssteller vom Auftraggeber erhalten werden. @@ -4458,16 +4485,18 @@ Public Class cFakturierung End Function - Public Shared Function doSAMMELRechnungsDruck_Abschnitt(ByRef RechnungsNr As Integer, Firma_ID As Integer, Buchungsjahr As Integer, DruckdatumUhrzeit As DateTime, PrinterName As String, Optional AnlageEinzelRg As Boolean = True, Optional Sammelrechnungsbericht As Boolean = True, Optional RechnungsdruckArt As Integer = -1, Optional ByRef pathPDF As String = "", Optional SRDruckWiederholen As Boolean = False, Optional SB As String = "", Optional AnlageExcelEvolog As Boolean = False, Optional ByRef SonstAnlagen As List(Of String) = Nothing, Optional VorschauID As String = "", Optional AnlageExcelTransferry360 As Boolean = False, Optional FakturierungsGruppe As String = "", Optional Abfertigungsart As String = "", Optional mergePDF As Boolean = False, Optional RechnungsanhangPDF As Boolean = False, Optional RechnugnskopieMDMSammelrechnung As Boolean = False, Optional AnhList As List(Of String) = Nothing, Optional RechnungsanhangCSV As Boolean = False, Optional onlyAsfinagAnhang As Boolean = False, Optional saveInTherefore As Boolean = True) As Boolean + Public Shared Function doSAMMELRechnungsDruck_Abschnitt(ByRef RechnungsNr As Integer, Firma_ID As Integer, Buchungsjahr As Integer, DruckdatumUhrzeit As DateTime, PrinterName As String, Optional AnlageEinzelRg As Boolean = True, Optional Sammelrechnungsbericht As Boolean = True, Optional RechnungsdruckArt As Integer = -1, Optional ByRef pathPDF As String = "", Optional SRDruckWiederholen As Boolean = False, Optional SB As String = "", Optional AnlageExcelEvolog As Boolean = False, Optional ByRef SonstAnlagen As List(Of String) = Nothing, Optional VorschauID As String = "", Optional AnlageExcelTransferry360 As Boolean = False, Optional FakturierungsGruppe As String = "", Optional Abfertigungsart As String = "", Optional mergePDF As Boolean = False, Optional RechnungsanhangPDF As Boolean = False, Optional RechnugnskopieMDMSammelrechnung As Boolean = False, Optional AnhList As List(Of String) = Nothing, Optional RechnungsanhangCSV As Boolean = False, Optional onlyAsfinagAnhang As Boolean = False, Optional saveInTherefore As Boolean = True, Optional dt_temp As DataTable = Nothing) As Boolean 'SB Nicht mehr benötigt, da RG-Nr und DruckdatumUhrzeit Dim dt As DataTable If SRDruckWiederholen Then dt = getSAMMELRechnung_Dt(RechnungsNr, DruckdatumUhrzeit, "3,4,5", ) ' 3,4,5-_> irgendebbs + dt_temp = dt Else 'Dim RG_NR = New VERAG_PROG_ALLGEMEIN.cRechnungsnummern(Firma_ID, Buchungsjahr) 'RG_NR.INCREASE_RGNR() 'für die nächste Rechnung dt = getSAMMELRechnung_Dt(RechnungsNr, DruckdatumUhrzeit, IIf(RechnungsdruckArt = 7, "2", "2, 3, 4"), [VorschauID]) + dt_temp = dt End If ' 3-_> Anlagen gedruckt @@ -5581,6 +5610,7 @@ Public Class cFakturierung End If + AddHandler rpt.Detail.Format, Sub() ' rpt.lblVon.Text = CDate(rpt.Fields.Item("von").Value).ToShortDateString ' rpt.lblLKWNr.Text = CDate(rpt.Fields.Item("bis").Value).ToShortDateString @@ -5648,18 +5678,33 @@ Public Class cFakturierung Dim KUNDE_ERW As New VERAG_PROG_ALLGEMEIN.cKundenErweitert(RECHNUNG.RechnungsKundenNr) If KUNDE_ERW.kde_FakturierungSR_Details OrElse isMDMRechnungsdruck Then - Dim subRpt = New rptSammelRechnungAnlagenDruck_Leistungen(rpt._LAN, RECHNUNG, VorschauID) + Dim isZNB As Boolean = False + Dim Anzahl = 0 + Dim SteuerfreierBetrag As Double = 0 + Dim SteuerpflichtigerBetrag As Double = 0 + Dim LeistungsText As String = "" + If RECHNUNG.FilialenNr = 8001 AndAlso RECHNUNG.OffertenNr = 95 Then 'dann ist es eine Zinsnachberechnungs-Rechnung + isZNB = True + LeistungsText = "Nachberechnung von VZ " + 'LeistungsText = System.Text.RegularExpressions.Regex.Replace(LeistungsText, "\r\n|\r|\n", " ") + Anzahl = 1 + SteuerfreierBetrag = RECHNUNG.SteuerfreierGesamtbetrag + SteuerpflichtigerBetrag = RECHNUNG.SteuerpflichtigerGesamtbetrag + End If + + + Dim subRpt = New rptSammelRechnungAnlagenDruck_Leistungen(rpt._LAN, RECHNUNG, VorschauID, isZNB, LeistungsText, Anzahl, SteuerpflichtigerBetrag, SteuerfreierBetrag) rpt.SubReport.Report = subRpt - rpt.lblSteuerfrei.Font = New Font(rpt.lblSteuerfrei.Font, FontStyle.Bold) - rpt.lblSteuerpflichtig.Font = New Font(rpt.lblSteuerfrei.Font, FontStyle.Bold) + rpt.lblSteuerfrei.Font = New Font(rpt.lblSteuerfrei.Font, FontStyle.Bold) + rpt.lblSteuerpflichtig.Font = New Font(rpt.lblSteuerfrei.Font, FontStyle.Bold) - 'txtPackstuecke.Top += SubReport.Height - 'txtKdAuftragsnummer.Top += SubReport.Height - 'txtSendungsdetails.Top += SubReport.Height - Else - rpt.SubReport.Report = Nothing + 'txtPackstuecke.Top += SubReport.Height + 'txtKdAuftragsnummer.Top += SubReport.Height + 'txtSendungsdetails.Top += SubReport.Height + Else + rpt.SubReport.Report = Nothing End If ' rpt.Line10.AnchorBottom = True ' rpt.Line10.Height = rpt.Detail.Height @@ -6249,7 +6294,7 @@ Public Class cFakturierung Else - If RG_AH.Bezeichnung.ToUpper.Contains("MAUT") Or RG_AH.Bezeichnung.ToUpper.Contains("DIESEL") Or RG_AH.Bezeichnung.ToUpper.Contains("INVOICE") Then + If RG_AH.Bezeichnung.ToUpper.Contains("MAUT") Or RG_AH.Bezeichnung.ToUpper.Contains("DIESEL") Or RG_AH.Bezeichnung.ToUpper.Contains("INVOICE") Or RG_AH.Bezeichnung.ToUpper.Contains("VERZUGSZINSEN") Then Dim Path = VERAG_PROG_ALLGEMEIN.cDATENSERVER.GET_PDFPath_BY_DocID(RG_AH.dsId) If Not listAnh.Contains(Path) Then diff --git a/SDL/Fakturierung/frmAbrechnungHandling.Designer.vb b/SDL/Fakturierung/frmAbrechnungHandling.Designer.vb index 5edfdcf5..6b1a8a01 100644 --- a/SDL/Fakturierung/frmAbrechnungHandling.Designer.vb +++ b/SDL/Fakturierung/frmAbrechnungHandling.Designer.vb @@ -27,6 +27,7 @@ Me.Button2 = New System.Windows.Forms.Button() Me.dgvHandling = New VERAG_PROG_ALLGEMEIN.MyDatagridview(Me.components) Me.btnPreisliste = New System.Windows.Forms.Button() + Me.cbxDivers = New System.Windows.Forms.CheckBox() CType(Me.dgvHandling, System.ComponentModel.ISupportInitialize).BeginInit() Me.SuspendLayout() ' @@ -82,11 +83,23 @@ Me.btnPreisliste.Text = "Preisliste" Me.btnPreisliste.UseVisualStyleBackColor = True ' + 'cbxDivers + ' + Me.cbxDivers.AutoSize = True + Me.cbxDivers.Location = New System.Drawing.Point(134, 421) + Me.cbxDivers.Name = "cbxDivers" + Me.cbxDivers.Size = New System.Drawing.Size(81, 17) + Me.cbxDivers.TabIndex = 5 + Me.cbxDivers.Text = "CheckBox1" + Me.cbxDivers.UseVisualStyleBackColor = True + Me.cbxDivers.Visible = False + ' 'frmAbrechnungHandling ' Me.AutoScaleDimensions = New System.Drawing.SizeF(6.0!, 13.0!) Me.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font Me.ClientSize = New System.Drawing.Size(800, 450) + Me.Controls.Add(Me.cbxDivers) Me.Controls.Add(Me.btnPreisliste) Me.Controls.Add(Me.dgvHandling) Me.Controls.Add(Me.Button2) @@ -97,6 +110,7 @@ Me.Text = "Handling" CType(Me.dgvHandling, System.ComponentModel.ISupportInitialize).EndInit() Me.ResumeLayout(False) + Me.PerformLayout() End Sub @@ -104,4 +118,5 @@ Friend WithEvents Button2 As Button Friend WithEvents dgvHandling As VERAG_PROG_ALLGEMEIN.MyDatagridview Friend WithEvents btnPreisliste As Button + Friend WithEvents cbxDivers As CheckBox End Class diff --git a/SDL/Fakturierung/frmAbrechnungsMaske.Designer.vb b/SDL/Fakturierung/frmAbrechnungsMaske.Designer.vb index bda671a5..5b744c90 100644 --- a/SDL/Fakturierung/frmAbrechnungsMaske.Designer.vb +++ b/SDL/Fakturierung/frmAbrechnungsMaske.Designer.vb @@ -32,6 +32,8 @@ 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.txtMailanzeigen = New System.Windows.Forms.TextBox() + Me.cbxMailoeffnen = New System.Windows.Forms.CheckBox() Me.btn_doMailAutoversand = New System.Windows.Forms.Button() Me.Button11 = New System.Windows.Forms.Button() Me.cbxOriginalDrucken = New System.Windows.Forms.CheckBox() @@ -52,10 +54,12 @@ Partial Class frmAbrechnungsMaske Me.Label2 = New System.Windows.Forms.Label() Me.Label10 = New System.Windows.Forms.Label() Me.Panel1 = New System.Windows.Forms.Panel() + Me.txtRechnungsdatumAutomail = New VERAG_PROG_ALLGEMEIN.MyTextBox() + Me.dtp_RD_automail = New System.Windows.Forms.DateTimePicker() Me.KdSearchBox1 = New VERAG_PROG_ALLGEMEIN.KdSearchBox() + Me.lblRechnungsdatumAUTOMAIL = New System.Windows.Forms.Label() Me.lblKunde = New System.Windows.Forms.Label() Me.PictureBox5 = New System.Windows.Forms.PictureBox() - Me.cbxGutschriftenAnVerag = New System.Windows.Forms.CheckBox() Me.cboRechnungsdruck = New VERAG_PROG_ALLGEMEIN.MyComboBox() Me.Label14 = New System.Windows.Forms.Label() Me.cbx = New System.Windows.Forms.CheckBox() @@ -87,10 +91,9 @@ Partial Class frmAbrechnungsMaske Me.btnMonat = New System.Windows.Forms.Button() Me.btnBisJahr = New System.Windows.Forms.Button() Me.btnVonJahr = New System.Windows.Forms.Button() + Me.cbxGutschriftenAnVerag = New System.Windows.Forms.CheckBox() Me.UsrCntlFaktAbrechnung1 = New SDL.usrCntlFaktAbrechnung() Me.ContextMenuStrip1 = New System.Windows.Forms.ContextMenuStrip(Me.components) - Me.cbxMailoeffnen = New System.Windows.Forms.CheckBox() - Me.txtMailanzeigen = New System.Windows.Forms.TextBox() Me.pnl.SuspendLayout() CType(Me.SplitContainer, System.ComponentModel.ISupportInitialize).BeginInit() Me.SplitContainer.Panel1.SuspendLayout() @@ -111,7 +114,7 @@ Partial Class frmAbrechnungsMaske Me.pnl.Dock = System.Windows.Forms.DockStyle.Fill Me.pnl.Location = New System.Drawing.Point(0, 0) Me.pnl.Name = "pnl" - Me.pnl.Size = New System.Drawing.Size(1442, 615) + Me.pnl.Size = New System.Drawing.Size(1442, 646) Me.pnl.TabIndex = 0 ' 'SplitContainer @@ -130,7 +133,7 @@ Partial Class frmAbrechnungsMaske 'SplitContainer.Panel2 ' Me.SplitContainer.Panel2.Controls.Add(Me.UsrCntlFaktAbrechnung1) - Me.SplitContainer.Size = New System.Drawing.Size(1442, 615) + Me.SplitContainer.Size = New System.Drawing.Size(1442, 646) Me.SplitContainer.SplitterDistance = 575 Me.SplitContainer.TabIndex = 0 ' @@ -138,10 +141,10 @@ Partial Class frmAbrechnungsMaske ' Me.tbcntr.Controls.Add(Me.TabPage1) Me.tbcntr.Dock = System.Windows.Forms.DockStyle.Fill - Me.tbcntr.Location = New System.Drawing.Point(0, 170) + Me.tbcntr.Location = New System.Drawing.Point(0, 187) Me.tbcntr.Name = "tbcntr" Me.tbcntr.SelectedIndex = 0 - Me.tbcntr.Size = New System.Drawing.Size(575, 445) + Me.tbcntr.Size = New System.Drawing.Size(575, 459) Me.tbcntr.TabIndex = 3 ' 'TabPage1 @@ -153,7 +156,7 @@ Partial Class frmAbrechnungsMaske Me.TabPage1.Location = New System.Drawing.Point(4, 22) Me.TabPage1.Name = "TabPage1" Me.TabPage1.Padding = New System.Windows.Forms.Padding(3) - Me.TabPage1.Size = New System.Drawing.Size(567, 419) + Me.TabPage1.Size = New System.Drawing.Size(567, 433) Me.TabPage1.TabIndex = 0 Me.TabPage1.Text = "Rechnungen" Me.TabPage1.UseVisualStyleBackColor = True @@ -197,7 +200,7 @@ Partial Class frmAbrechnungsMaske Me.dgvRechnungen.RowHeadersVisible = False Me.dgvRechnungen.RowTemplate.Height = 28 Me.dgvRechnungen.SelectionMode = System.Windows.Forms.DataGridViewSelectionMode.FullRowSelect - Me.dgvRechnungen.Size = New System.Drawing.Size(561, 316) + Me.dgvRechnungen.Size = New System.Drawing.Size(561, 334) Me.dgvRechnungen.TabIndex = 1 ' 'Panel2 @@ -225,12 +228,34 @@ Partial Class frmAbrechnungsMaske Me.Panel2.Controls.Add(Me.Label2) Me.Panel2.Controls.Add(Me.Label10) Me.Panel2.Dock = System.Windows.Forms.DockStyle.Bottom - Me.Panel2.Location = New System.Drawing.Point(3, 319) + Me.Panel2.Location = New System.Drawing.Point(3, 337) Me.Panel2.Margin = New System.Windows.Forms.Padding(2) Me.Panel2.Name = "Panel2" - Me.Panel2.Size = New System.Drawing.Size(561, 97) + Me.Panel2.Size = New System.Drawing.Size(561, 93) Me.Panel2.TabIndex = 0 ' + 'txtMailanzeigen + ' + Me.txtMailanzeigen.BorderStyle = System.Windows.Forms.BorderStyle.None + Me.txtMailanzeigen.Location = New System.Drawing.Point(327, 51) + Me.txtMailanzeigen.Multiline = True + Me.txtMailanzeigen.Name = "txtMailanzeigen" + Me.txtMailanzeigen.Size = New System.Drawing.Size(57, 34) + Me.txtMailanzeigen.TabIndex = 33 + Me.txtMailanzeigen.Text = "Mail anzeigen" + ' + 'cbxMailoeffnen + ' + Me.cbxMailoeffnen.Anchor = CType((System.Windows.Forms.AnchorStyles.Bottom Or System.Windows.Forms.AnchorStyles.Left), System.Windows.Forms.AnchorStyles) + Me.cbxMailoeffnen.AutoSize = True + Me.cbxMailoeffnen.Checked = True + Me.cbxMailoeffnen.CheckState = System.Windows.Forms.CheckState.Checked + Me.cbxMailoeffnen.Location = New System.Drawing.Point(306, 54) + Me.cbxMailoeffnen.Name = "cbxMailoeffnen" + Me.cbxMailoeffnen.Size = New System.Drawing.Size(15, 14) + Me.cbxMailoeffnen.TabIndex = 32 + Me.cbxMailoeffnen.UseVisualStyleBackColor = True + ' 'btn_doMailAutoversand ' Me.btn_doMailAutoversand.BackgroundImage = Global.SDL.My.Resources.Resources.auto_mailversand_small @@ -463,10 +488,12 @@ Partial Class frmAbrechnungsMaske 'Panel1 ' Me.Panel1.BackColor = System.Drawing.Color.White + Me.Panel1.Controls.Add(Me.txtRechnungsdatumAutomail) + Me.Panel1.Controls.Add(Me.dtp_RD_automail) Me.Panel1.Controls.Add(Me.KdSearchBox1) + Me.Panel1.Controls.Add(Me.lblRechnungsdatumAUTOMAIL) Me.Panel1.Controls.Add(Me.lblKunde) Me.Panel1.Controls.Add(Me.PictureBox5) - Me.Panel1.Controls.Add(Me.cbxGutschriftenAnVerag) Me.Panel1.Controls.Add(Me.cboRechnungsdruck) Me.Panel1.Controls.Add(Me.Label14) Me.Panel1.Controls.Add(Me.cbx) @@ -477,13 +504,52 @@ Partial Class frmAbrechnungsMaske Me.Panel1.Controls.Add(Me.lblSachbearbeiter) Me.Panel1.Controls.Add(Me.cboFirma) Me.Panel1.Controls.Add(Me.MyPanel1) + Me.Panel1.Controls.Add(Me.cbxGutschriftenAnVerag) Me.Panel1.Dock = System.Windows.Forms.DockStyle.Top Me.Panel1.Location = New System.Drawing.Point(0, 0) Me.Panel1.Margin = New System.Windows.Forms.Padding(2) Me.Panel1.Name = "Panel1" - Me.Panel1.Size = New System.Drawing.Size(575, 170) + Me.Panel1.Size = New System.Drawing.Size(575, 187) Me.Panel1.TabIndex = 0 ' + 'txtRechnungsdatumAutomail + ' + Me.txtRechnungsdatumAutomail._DateTimeOnly = False + Me.txtRechnungsdatumAutomail._numbersOnly = False + Me.txtRechnungsdatumAutomail._numbersOnlyKommastellen = "" + Me.txtRechnungsdatumAutomail._numbersOnlyTrennzeichen = True + Me.txtRechnungsdatumAutomail._Prozent = False + Me.txtRechnungsdatumAutomail._ShortDateNew = True + Me.txtRechnungsdatumAutomail._ShortDateOnly = False + Me.txtRechnungsdatumAutomail._TimeOnly = False + Me.txtRechnungsdatumAutomail._TimeOnly_Seconds = False + Me.txtRechnungsdatumAutomail._value = "" + Me.txtRechnungsdatumAutomail._Waehrung = False + Me.txtRechnungsdatumAutomail._WaehrungZeichen = True + Me.txtRechnungsdatumAutomail.Font = New System.Drawing.Font("Microsoft Sans Serif", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.txtRechnungsdatumAutomail.ForeColor = System.Drawing.Color.Black + Me.txtRechnungsdatumAutomail.Location = New System.Drawing.Point(442, 42) + Me.txtRechnungsdatumAutomail.MaxLength = 10 + Me.txtRechnungsdatumAutomail.MaxLineLength = -1 + Me.txtRechnungsdatumAutomail.MaxLines_Warning = "" + Me.txtRechnungsdatumAutomail.MaxLines_Warning_Label = Nothing + Me.txtRechnungsdatumAutomail.Name = "txtRechnungsdatumAutomail" + Me.txtRechnungsdatumAutomail.Size = New System.Drawing.Size(73, 20) + Me.txtRechnungsdatumAutomail.TabIndex = 58 + Me.txtRechnungsdatumAutomail.Visible = False + ' + 'dtp_RD_automail + ' + Me.dtp_RD_automail.CustomFormat = "''" + Me.dtp_RD_automail.Format = System.Windows.Forms.DateTimePickerFormat.Custom + Me.dtp_RD_automail.Location = New System.Drawing.Point(442, 42) + Me.dtp_RD_automail.Margin = New System.Windows.Forms.Padding(0) + Me.dtp_RD_automail.Name = "dtp_RD_automail" + Me.dtp_RD_automail.RightToLeft = System.Windows.Forms.RightToLeft.No + Me.dtp_RD_automail.Size = New System.Drawing.Size(106, 20) + Me.dtp_RD_automail.TabIndex = 59 + Me.dtp_RD_automail.Visible = False + ' 'KdSearchBox1 ' Me.KdSearchBox1._AlleFirmenCLUSTER = False @@ -512,6 +578,16 @@ Partial Class frmAbrechnungsMaske Me.KdSearchBox1.TIMER_SEARCH = True Me.KdSearchBox1.usrcntl = Nothing ' + 'lblRechnungsdatumAUTOMAIL + ' + Me.lblRechnungsdatumAUTOMAIL.AutoSize = True + Me.lblRechnungsdatumAUTOMAIL.Location = New System.Drawing.Point(331, 45) + Me.lblRechnungsdatumAUTOMAIL.Name = "lblRechnungsdatumAUTOMAIL" + Me.lblRechnungsdatumAUTOMAIL.Size = New System.Drawing.Size(74, 13) + Me.lblRechnungsdatumAUTOMAIL.TabIndex = 60 + Me.lblRechnungsdatumAUTOMAIL.Text = "ReDat.-AUTO" + Me.lblRechnungsdatumAUTOMAIL.Visible = False + ' 'lblKunde ' Me.lblKunde.AutoSize = True @@ -531,16 +607,6 @@ Partial Class frmAbrechnungsMaske Me.PictureBox5.TabIndex = 133 Me.PictureBox5.TabStop = False ' - 'cbxGutschriftenAnVerag - ' - Me.cbxGutschriftenAnVerag.AutoSize = True - Me.cbxGutschriftenAnVerag.Location = New System.Drawing.Point(332, 44) - Me.cbxGutschriftenAnVerag.Name = "cbxGutschriftenAnVerag" - Me.cbxGutschriftenAnVerag.Size = New System.Drawing.Size(128, 17) - Me.cbxGutschriftenAnVerag.TabIndex = 54 - Me.cbxGutschriftenAnVerag.Text = "nicht an Verag abger." - Me.cbxGutschriftenAnVerag.UseVisualStyleBackColor = True - ' 'cboRechnungsdruck ' Me.cboRechnungsdruck._allowedValuesFreiText = Nothing @@ -568,11 +634,11 @@ Partial Class frmAbrechnungsMaske Me.cbx.AutoSize = True Me.cbx.Checked = True Me.cbx.CheckState = System.Windows.Forms.CheckState.Checked - Me.cbx.Location = New System.Drawing.Point(332, 61) + Me.cbx.Location = New System.Drawing.Point(313, 65) Me.cbx.Name = "cbx" - Me.cbx.Size = New System.Drawing.Size(181, 17) + Me.cbx.Size = New System.Drawing.Size(139, 17) Me.cbx.TabIndex = 34 - Me.cbx.Text = "Gedruckte Rechnugen anzeigen" + Me.cbx.Text = "gedruckte Rechnungen" Me.cbx.UseVisualStyleBackColor = True ' 'cboER_SR @@ -662,9 +728,9 @@ Partial Class frmAbrechnungsMaske Me.MyPanel1.Controls.Add(Me.btnBisJahr) Me.MyPanel1.Controls.Add(Me.btnVonJahr) Me.MyPanel1.Dock = System.Windows.Forms.DockStyle.Bottom - Me.MyPanel1.Location = New System.Drawing.Point(0, 80) + Me.MyPanel1.Location = New System.Drawing.Point(0, 100) Me.MyPanel1.Name = "MyPanel1" - Me.MyPanel1.Size = New System.Drawing.Size(575, 90) + Me.MyPanel1.Size = New System.Drawing.Size(575, 87) Me.MyPanel1.TabIndex = 51 Me.MyPanel1.Visible = False ' @@ -979,6 +1045,16 @@ Partial Class frmAbrechnungsMaske Me.btnVonJahr.TextAlign = System.Drawing.ContentAlignment.MiddleLeft Me.btnVonJahr.UseVisualStyleBackColor = True ' + 'cbxGutschriftenAnVerag + ' + Me.cbxGutschriftenAnVerag.AutoSize = True + Me.cbxGutschriftenAnVerag.Location = New System.Drawing.Point(454, 65) + Me.cbxGutschriftenAnVerag.Name = "cbxGutschriftenAnVerag" + Me.cbxGutschriftenAnVerag.Size = New System.Drawing.Size(118, 17) + Me.cbxGutschriftenAnVerag.TabIndex = 54 + Me.cbxGutschriftenAnVerag.Text = "offene VERAG-Abr." + Me.cbxGutschriftenAnVerag.UseVisualStyleBackColor = True + ' 'UsrCntlFaktAbrechnung1 ' Me.UsrCntlFaktAbrechnung1.BackColor = System.Drawing.Color.White @@ -988,7 +1064,7 @@ Partial Class frmAbrechnungsMaske Me.UsrCntlFaktAbrechnung1.Location = New System.Drawing.Point(0, 0) Me.UsrCntlFaktAbrechnung1.Margin = New System.Windows.Forms.Padding(4, 5, 4, 5) Me.UsrCntlFaktAbrechnung1.Name = "UsrCntlFaktAbrechnung1" - Me.UsrCntlFaktAbrechnung1.Size = New System.Drawing.Size(863, 615) + Me.UsrCntlFaktAbrechnung1.Size = New System.Drawing.Size(863, 646) Me.UsrCntlFaktAbrechnung1.TabIndex = 0 ' 'ContextMenuStrip1 @@ -996,33 +1072,11 @@ Partial Class frmAbrechnungsMaske Me.ContextMenuStrip1.Name = "ContextMenuStrip1" Me.ContextMenuStrip1.Size = New System.Drawing.Size(61, 4) ' - 'cbxMailoeffnen - ' - Me.cbxMailoeffnen.Anchor = CType((System.Windows.Forms.AnchorStyles.Bottom Or System.Windows.Forms.AnchorStyles.Left), System.Windows.Forms.AnchorStyles) - Me.cbxMailoeffnen.AutoSize = True - Me.cbxMailoeffnen.Checked = True - Me.cbxMailoeffnen.CheckState = System.Windows.Forms.CheckState.Checked - Me.cbxMailoeffnen.Location = New System.Drawing.Point(306, 58) - Me.cbxMailoeffnen.Name = "cbxMailoeffnen" - Me.cbxMailoeffnen.Size = New System.Drawing.Size(15, 14) - Me.cbxMailoeffnen.TabIndex = 32 - Me.cbxMailoeffnen.UseVisualStyleBackColor = True - ' - 'txtMailanzeigen - ' - Me.txtMailanzeigen.BorderStyle = System.Windows.Forms.BorderStyle.None - Me.txtMailanzeigen.Location = New System.Drawing.Point(327, 51) - Me.txtMailanzeigen.Multiline = True - Me.txtMailanzeigen.Name = "txtMailanzeigen" - Me.txtMailanzeigen.Size = New System.Drawing.Size(57, 34) - Me.txtMailanzeigen.TabIndex = 33 - Me.txtMailanzeigen.Text = "Mail anzeigen" - ' 'frmAbrechnungsMaske ' Me.AutoScaleDimensions = New System.Drawing.SizeF(6.0!, 13.0!) Me.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font - Me.ClientSize = New System.Drawing.Size(1442, 615) + Me.ClientSize = New System.Drawing.Size(1442, 646) Me.Controls.Add(Me.pnl) Me.Icon = CType(resources.GetObject("$this.Icon"), System.Drawing.Icon) Me.KeyPreview = True @@ -1114,4 +1168,7 @@ Partial Class frmAbrechnungsMaske Friend WithEvents btn_doMailAutoversand As Button Friend WithEvents txtMailanzeigen As TextBox Friend WithEvents cbxMailoeffnen As CheckBox + Friend WithEvents txtRechnungsdatumAutomail As VERAG_PROG_ALLGEMEIN.MyTextBox + Friend WithEvents dtp_RD_automail As DateTimePicker + Friend WithEvents lblRechnungsdatumAUTOMAIL As Label End Class diff --git a/SDL/Fakturierung/frmAbrechnungsMaske.vb b/SDL/Fakturierung/frmAbrechnungsMaske.vb index e5ccdcaf..e15174be 100644 --- a/SDL/Fakturierung/frmAbrechnungsMaske.vb +++ b/SDL/Fakturierung/frmAbrechnungsMaske.vb @@ -1,6 +1,8 @@ Imports System.IO Imports GrapeCity.ActiveReports.PageReportModel +Imports iText.IO.Util Imports Microsoft.Office.Interop +Imports sun.net.www.protocol Imports VERAG_PROG_ALLGEMEIN Public Class frmAbrechnungsMaske @@ -12,6 +14,8 @@ Public Class frmAbrechnungsMaske Dim FilialNrRestriction As Integer = -1 + Dim setDefaultAutoMailversand As Boolean = VERAG_PROG_ALLGEMEIN.cBerechtignunen.CHECK_BERECHTIGUNG_bool("AUTOMAILVERSAND", "SDL") + Private Sub frmAbrechnungsMaske_Load(sender As Object, e As EventArgs) Handles Me.Load 'Größe anpassen: @@ -49,6 +53,8 @@ Public Class frmAbrechnungsMaske cboSort.Items.Add(New VERAG_PROG_ALLGEMEIN.MyListItem("Pos.Nr", "POS")) cboSort.changeItem("EZ") + + txtRechnungsdatumAutomail.Text = Today.ToShortDateString 'BERECHTIGUNG 90 = FAKTURIERUNG!!! Dim FirmaTmp = VERAG_PROG_ALLGEMEIN.cAllgemein.FIRMA @@ -56,6 +62,12 @@ Public Class frmAbrechnungsMaske FirmaTmp = "VERAGIMEX" End If + + txtRechnungsdatumAutomail.Visible = setDefaultAutoMailversand + dtp_RD_automail.Visible = setDefaultAutoMailversand + lblRechnungsdatumAUTOMAIL.Visible = setDefaultAutoMailversand + + 'FirmaTmp = "AMBAR" cboSachbearbeiter.Items.Clear() @@ -357,7 +369,6 @@ Public Class frmAbrechnungsMaske Button8.Visible = Not (enableAUTOMAIL_BTN AndAlso enableAUTOMAIL) Button9.Visible = Not (enableAUTOMAIL_BTN AndAlso enableAUTOMAIL) - ' sqlstr &= " AND (SteuerpflichtigerGesamtbetrag<>0 OR SteuerfreierGesamtbetrag<>0)" Return sqlstr End Function @@ -909,15 +920,17 @@ Public Class frmAbrechnungsMaske If IsNumeric(RK_ID) Then Dim RG_TMP As New VERAG_PROG_ALLGEMEIN.cRechnungsausgang(RK_ID) Dim sammelrechnungskopieMDM As Boolean = False - Dim sammelrechnungMDMmitAnhang As Boolean = False + Dim sammelrechnungmitAnhang As Boolean = False If RG_TMP IsNot Nothing Then - 'id mitübergeben (1_> drucken, 2 Email, 3 PDF) + + Dim tempPDF As String = "" + Dim listOfCSV As New List(Of String) + If RG_TMP.Sammelrechnung = 6 Then If RG_TMP.Status = 4 Then sammelrechnungskopieMDM = True - Dim tempPDF As String = "" - Dim listOfCSV As New List(Of String) - sammelrechnungMDMmitAnhang = MsgBox("Soll die MDM Sammelrechnung mit Anhang angezeigt werden?", vbYesNoCancel) - cFakturierung.doSAMMELRechnungsDruck_Abschnitt(RG_TMP.RechnungsNr, -1, -1, RG_TMP.DruckDatumZeit, "", False, True, 8, tempPDF, True,,,,,,,,, sammelrechnungMDMmitAnhang, sammelrechnungskopieMDM, listOfCSV, True) + + sammelrechnungmitAnhang = MsgBox("Soll die MDM Sammelrechnung mit Anhang angezeigt werden?", vbYesNo) + cFakturierung.doSAMMELRechnungsDruck_Abschnitt(RG_TMP.RechnungsNr, -1, -1, RG_TMP.DruckDatumZeit, "", False, True, 8, tempPDF, True,,,,,,,,, sammelrechnungmitAnhang, sammelrechnungskopieMDM, listOfCSV, True) Select Case id Case 1 @@ -948,16 +961,246 @@ Public Class frmAbrechnungsMaske Else - cFakturierung.doSAMMELRechnungsDruck_Abschnitt(RG_TMP.RechnungsNr, -1, -1, RG_TMP.DruckDatumZeit, "", False, True, id,, True,,,,,,,,,) + + 'sammelrechnungmitAnhang = MsgBox("Soll die Sammelrechnung mit Anhang angezeigt werden?", vbYesNo) + + + Select Case id + Case 1 + cFakturierung.doSAMMELRechnungsDruck_Abschnitt(RG_TMP.RechnungsNr, -1, -1, RG_TMP.DruckDatumZeit, "", False, True, 3, tempPDF, True,,,,,,,, True, sammelrechnungmitAnhang,,) + Case 2 + Try + Dim dt_temp As New DataTable + cFakturierung.doSAMMELRechnungsDruck_Abschnitt(RG_TMP.RechnungsNr, -1, -1, RG_TMP.DruckDatumZeit, "", False, True, 4, tempPDF, True,,,,,,,, True, sammelrechnungmitAnhang,, listOfCSV,,,, dt_temp) + + + Dim AD = New VERAG_PROG_ALLGEMEIN.cAdressen(RG_TMP.RechnungsKundenNr) + + Dim outl As New Outlook.Application + Dim Mail As Microsoft.Office.Interop.Outlook.MailItem + Mail = outl.CreateItem(0) + Dim auto As New cAutomailversand + Dim oAccount As Outlook.Account + Dim accountToSent = "" + + accountToSent = auto.setAccountToSend(RG_TMP.Firma_ID) + + If accountToSent <> "" Then + If outl.Session.Accounts.Count > 0 Then + For Each oAccount In outl.Session.Accounts + If oAccount.SmtpAddress.ToLower = accountToSent.ToLower Then + Mail.SendUsingAccount = oAccount + Exit For + End If + Next + End If + End If + + setEmailText(RG_TMP.RechnungsLandKz, RG_TMP.Firma_ID, RG_TMP.RechnungsNr, Mail.Subject, Mail.HTMLBody, RG_TMP.Sammelrechnung, RG_TMP.BelegartenNr) + setandcheckEmpfaengerMail_SR(dt_temp, AD, Mail.To, Mail.CC, Mail.BCC, RG_TMP.Firma_ID, RG_TMP.Sammelrechnung) + Dim anhangbezeichnung = getAnhangbezeichnung(AD.LandKz, RG_TMP, RG_TMP.BelegartenNr) + Mail.Attachments.Add(tempPDF, Microsoft.Office.Interop.Outlook.OlAttachmentType.olByValue, , RG_TMP.RechnungsNr & "_" & anhangbezeichnung) + If listOfCSV.Count > 0 Then + For Each r In listOfCSV + Dim file As New FileInfo(r) + Mail.Attachments.Add(r, Microsoft.Office.Interop.Outlook.OlAttachmentType.olByValue, , file.Name) + Next + End If + Mail.Display() + + Catch ex As Exception + MsgBox("Fehler bim Öffnen des Mail-Programmes. PDF wird geladen!") + Process.Start(tempPDF) + End Try + + Case 3 'PDF + öffnen + cFakturierung.doSAMMELRechnungsDruck_Abschnitt(RG_TMP.RechnungsNr, -1, -1, RG_TMP.DruckDatumZeit, "", False, True, 4, tempPDF, True,,,,,,,, True, sammelrechnungmitAnhang,,) + Process.Start(tempPDF) + + End Select + + + + + End If End If + Else + + MsgBox("Bei " & cboFirma.SelectedItem.Text & " existiert keine Sammelrechnung mit der Nr: " & SR_RechnungsNr & "") + End If + + + End If End Sub + + + + Private Sub setEmailText(RechnungsLandKz As String, Firma_ID As Integer, RechnungsNr As Integer, ByRef Subject As String, ByRef TextHTML As String, ByRef SammelrechungArt As Integer, ByRef BelegartenNr As Integer) + + Dim txtRgNr As String = IIf(RechnungsNr < 0, -1, RechnungsNr) + Dim Mailtext As String + + Dim SQL As New VERAG_PROG_ALLGEMEIN.SQL + Dim listOfTextconserven As cTextkonserve_LIST = New cTextkonserve_LIST(4, "", Firma_ID) + + Dim spracheRechnung As String = "EN" 'Defaultsprache + + Dim belegtyp As String = If(BelegartenNr = 71, "credit note", "invoice") + + + + Select Case RechnungsLandKz + Case "TR" : spracheRechnung = "TR" : spracheRechnung = RechnungsLandKz : belegtyp = If(BelegartenNr = 71, "Kredi", "Fatura") + Case "RO" + If Firma_ID = 19 Then + spracheRechnung = "RO" : spracheRechnung = RechnungsLandKz : belegtyp = If(BelegartenNr = 71, "nota de credit", "factura") + End If + + Case "DE", "A", "AT", "D", "CH" : spracheRechnung = "DE" : belegtyp = If(BelegartenNr = 71, "Gutschrift", "Rechnung") + + Case "SRB", "HR", "SLO", "BIH", "MNE", "MK", "MO" + If Firma_ID = 19 Then + spracheRechnung = "SRB" : belegtyp = If(BelegartenNr = 71, "credit note", "invoice") 'Belegarten auf Englisch! + End If + + End Select + + + + If listOfTextconserven.LIST.Any(Function(c) c.txt_sprache = spracheRechnung) Then + + + Dim r As cTextkonserve = listOfTextconserven.LIST.Find(Function(c) c.txt_sprache = spracheRechnung) + If r IsNot Nothing Then + Subject = r.txt_betreff + Subject = Subject.Replace("%BelegNr%", txtRgNr) + Subject = Subject.Replace("%Belegtyp%", belegtyp) + TextHTML &= r.txt_text + If Mailtext <> "" Then TextHTML &= Mailtext + TextHTML &= vbNewLine & vbNewLine + + TextHTML = TextHTML.Replace("%Belegtyp%", belegtyp) + + + + End If + End If + + TextHTML &= "
" + TextHTML &= "
" + + Select Case RechnungsLandKz + Case "TR" + TextHTML &= "Saygilarimizla
" + Case "A", "AT", "D", "DE", "CH" + TextHTML &= "Mit freundlichen Grüßen
" + Case Else + TextHTML &= "Best regards
" + End Select + + + + TextHTML &= VERAG_PROG_ALLGEMEIN.cAllgemein.USRNAME & "

" + TextHTML &= cFakturierung.getSignature(RechnungsLandKz, Firma_ID, True, True,,,,,, True) + + + + + + End Sub + + Private Function getAnhangbezeichnung(sprache As String, RECHNUNG As cRechnungsausgang, BelegartenNr As Integer, Optional onlyBelegsuebersetzung As Boolean = False) + + Dim Anhangsbez = "" + If RECHNUNG IsNot Nothing Then + + Select Case sprache + Case "A", "AT", "D", "DE", "CH" + + If BelegartenNr = 71 Then + If onlyBelegsuebersetzung Then + Anhangsbez = "Gutschrift.pdf" + Else + Anhangsbez = "Gutschriftsanhaenge.pdf" + End If + Else + If onlyBelegsuebersetzung Then + Anhangsbez = "Rechnung.pdf" + Else + Anhangsbez = "Rechnungsanhaenge.pdf" + End If + End If + + Case "TR" : If BelegartenNr = 71 Then Anhangsbez = "Kredi.pdf" Else Anhangsbez = "Fatura.pdf" + Case Else : If BelegartenNr = 71 Then Anhangsbez = "Creditnote.pdf" Else Anhangsbez = "Invoice.pdf" + End Select + + Else + + + Select Case sprache + Case "A", "AT", "D", "DE", "CH" : If BelegartenNr = 71 Then Anhangsbez = "Sammelgutschrift.pdf" Else Anhangsbez = "Sammelrechnung.pdf" + Case "TR" : If BelegartenNr = 71 Then Anhangsbez = "Toplukredi.pdf" Else Anhangsbez = "Toplufatura.pdf" + Case Else : If BelegartenNr = 71 Then Anhangsbez = "Collectivecreditnote.pdf" Else Anhangsbez = "Collectiveinvoice.pdf" + End Select + + End If + + Return Anhangsbez + + + End Function + + Public Shared Function setandcheckEmpfaengerMail_SR(ByRef SR_DT As DataTable, ByRef AD As cAdressen, ByRef EMAILTMP As String, ByRef EMAILTMPCC As String, ByRef EMAILTMPBCC As String, ByRef FirmaID As Integer, ByRef SammelrechungArt As String) As String + + If SammelrechungArt <> 6 Then + + + Dim email_receipt As String = "" + + Dim allAtilla = IIf(FirmaID = 7, True, False) + If SR_DT IsNot Nothing AndAlso SR_DT.Rows.Count > 0 Then + For Each r In SR_DT.Rows + If "4801" <> r("FilialenNr") And "4802" <> r("FilialenNr") Then + allAtilla = False + Exit For + End If + Next + End If + + email_receipt = IIf(allAtilla, VERAG_PROG_ALLGEMEIN.cKundenKontakte.getMailAdress(AD.AdressenNr, "Rechnung an (ATILLA)"), "") + + EMAILTMP = IIf(email_receipt = "", VERAG_PROG_ALLGEMEIN.cKundenKontakte.getMailAdress(AD.AdressenNr, "Rechnung an"), email_receipt) 'VERAG_PROG_ALLGEMEIN.cKundenKontakte.getMailAdress(AD.AdressenNr, "Rechnung an") + EMAILTMPCC = IIf(email_receipt = "", VERAG_PROG_ALLGEMEIN.cKundenKontakte.getMailAdressCC(AD.AdressenNr, "Rechnung an"), VERAG_PROG_ALLGEMEIN.cKundenKontakte.getMailAdressCC(AD.AdressenNr, "Rechnung an (ATILLA)")) + EMAILTMPBCC = IIf(email_receipt = "", VERAG_PROG_ALLGEMEIN.cKundenKontakte.getMailAdressBCC(AD.AdressenNr, "Rechnung an"), VERAG_PROG_ALLGEMEIN.cKundenKontakte.getMailAdressBCC(AD.AdressenNr, "Rechnung an (ATILLA)")) + + Else + + If AD.E_Mail IsNot Nothing AndAlso AD.E_Mail <> "" Then EMAILTMP &= AD.E_Mail & ";" + If AD.E_Mail2 IsNot Nothing AndAlso AD.E_Mail2 <> "" Then EMAILTMP &= AD.E_Mail2 & ";" + + + End If + + If EMAILTMP = "" And EMAILTMPCC = "" And EMAILTMPBCC = "" Then + + If AD.E_Mail IsNot Nothing AndAlso AD.E_Mail <> "" Then EMAILTMP &= AD.E_Mail & ";" + If AD.E_Mail2 IsNot Nothing AndAlso AD.E_Mail2 <> "" Then EMAILTMP &= AD.E_Mail2 & ";" + + End If + + + Return EMAILTMP & EMAILTMPCC + + End Function + Private Sub Button3_Click(sender As Object, e As EventArgs) Handles Button3.Click Dim f As New frmFaktAufschubSuche(False) f.Show(Me) @@ -1059,5 +1302,31 @@ Public Class frmAbrechnungsMaske End If + End Sub + + Private Sub txtRechnungsdatumAutomail_TextChanged(sender As Object, e As EventArgs) Handles txtRechnungsdatumAutomail.TextChanged + If txtRechnungsdatumAutomail._value <> "" AndAlso IsDate(txtRechnungsdatumAutomail._value) Then + + + UsrCntlFaktAbrechnung1.automail_rechnungsdatum = CDate(txtRechnungsdatumAutomail._value) + + + + End If + End Sub + + Private Sub dtp_RD_automail_ValueChanged(sender As Object, e As EventArgs) Handles dtp_RD_automail.ValueChanged + + If CDate(sender.value).AddDays(-4) > Today() Then + MsgBox("Rechnungen können max. 4 Tage vordatiert werden!") + txtRechnungsdatumAutomail._value = Today + Else + + txtRechnungsdatumAutomail._value = CDate(sender.value).ToShortDateString + + End If + + + End Sub End Class \ No newline at end of file diff --git a/SDL/Fakturierung/frmFaktEmail.vb b/SDL/Fakturierung/frmFaktEmail.vb index 3f14e874..bc8046d9 100644 --- a/SDL/Fakturierung/frmFaktEmail.vb +++ b/SDL/Fakturierung/frmFaktEmail.vb @@ -1,5 +1,4 @@ -Imports GrapeCity.DataVisualization.TypeScript -Imports Microsoft.Office.Interop +Imports Microsoft.Office.Interop Imports VERAG_PROG_ALLGEMEIN Public Class frmFaktEmail @@ -196,7 +195,9 @@ Public Class frmFaktEmail If RECHNUNG.FilialenNr = "4801" Or RECHNUNG.FilialenNr = "4802" Then email_receipt = VERAG_PROG_ALLGEMEIN.cKundenKontakte.getMailAdress(AD.AdressenNr, "Rechnung an (ATILLA)") End If - + If Firma_ID = 24 Then + cbxMergeRg.Checked = False + End If Dim EMAILTMP = "" Dim EMAILTMPCC = "" @@ -575,85 +576,85 @@ Public Class frmFaktEmail 'Mail-Adressen eintragen '----------------------------------------------------------------- For Each r In dgvEmail.Rows - If r.cells(0).value <> "" Then Mail.To &= r.cells(0).value & ";" - Next - For Each r In dgvEmailCC.Rows - If r.cells(0).value <> "" Then Mail.CC &= r.cells(0).value & ";" - Next - For Each r In dgvEmailBCC.Rows - If r.cells(0).value <> "" Then Mail.BCC &= r.cells(0).value & ";" - Next + If r.cells(0).value <> "" Then Mail.To &= r.cells(0).value & ";" + Next + For Each r In dgvEmailCC.Rows + If r.cells(0).value <> "" Then Mail.CC &= r.cells(0).value & ";" + Next + For Each r In dgvEmailBCC.Rows + If r.cells(0).value <> "" Then Mail.BCC &= r.cells(0).value & ";" + Next - RichTextBox.Text = RichTextBox.Text.Replace("%RgNr%", lastAktuelle_RgNr) - txtSubject.Text = txtSubject.Text.Replace("%RgNr%", lastAktuelle_RgNr) + RichTextBox.Text = RichTextBox.Text.Replace("%RgNr%", lastAktuelle_RgNr) + txtSubject.Text = txtSubject.Text.Replace("%RgNr%", lastAktuelle_RgNr) - Dim TextHTML = "
" & RichTextBox.Text.Replace(ControlChars.Lf, "
") & cFakturierung.getSignature(AD.LandKz, Firma_ID,,,, additionalLine,, IIf(Firma_ID = "24", True, False)) & "
" + Dim TextHTML = "
" & RichTextBox.Text.Replace(ControlChars.Lf, "
") & cFakturierung.getSignature(AD.LandKz, Firma_ID,,,, additionalLine,, IIf(Firma_ID = "24", True, False)) & "
" - Mail.HTMLBody = TextHTML - Mail.Subject = txtSubject.Text + Mail.HTMLBody = TextHTML + Mail.Subject = txtSubject.Text - ATTACHMENTS.Clear() - '----------------------------------------------------------------- - 'Rechnungen anfügen - '----------------------------------------------------------------- - For Each l In listPDFs - ' Mail.Attachments.Add(l, Microsoft.Office.Interop.Outlook.OlAttachmentType.olByValue) + ATTACHMENTS.Clear() + '----------------------------------------------------------------- + 'Rechnungen anfügen + '----------------------------------------------------------------- + For Each l In listPDFs + ' Mail.Attachments.Add(l, Microsoft.Office.Interop.Outlook.OlAttachmentType.olByValue) - ATTACHMENTS.Add(New cFakt_MailATTach(l, "")) + ATTACHMENTS.Add(New cFakt_MailATTach(l, "")) - Next - For Each l In SonstAnlagen - ' Mail.Attachments.Add(l, Microsoft.Office.Interop.Outlook.OlAttachmentType.olByValue) + Next + For Each l In SonstAnlagen + ' Mail.Attachments.Add(l, Microsoft.Office.Interop.Outlook.OlAttachmentType.olByValue) - ATTACHMENTS.Add(New cFakt_MailATTach(l, "")) + ATTACHMENTS.Add(New cFakt_MailATTach(l, "")) - Next - addAttachments(Mail, lastAktuelle_RgNr, cbxMergeRg.Checked) + Next + addAttachments(Mail, lastAktuelle_RgNr, cbxMergeRg.Checked) - '----------------------------------------------------------------- - 'Steuerbescheid/VDB anfügen - '----------------------------------------------------------------- - getAnhaenge() - 'For Each l In listPDFs - ' ' Mail.Attachments.Add(l, Microsoft.Office.Interop.Outlook.OlAttachmentType.olByValue) - ' ATTACHMENTS.Add(New cFakt_MailATTach(l, "")) - 'Next + '----------------------------------------------------------------- + 'Steuerbescheid/VDB anfügen + '----------------------------------------------------------------- + getAnhaenge() + 'For Each l In listPDFs + ' ' Mail.Attachments.Add(l, Microsoft.Office.Interop.Outlook.OlAttachmentType.olByValue) + ' ATTACHMENTS.Add(New cFakt_MailATTach(l, "")) + 'Next - 'Rechnungsanhänge anfügen - '----------------------------------------------------------------- - If SR_DT IsNot Nothing AndAlso SR_DT.Rows.Count > 0 Then - For Each r In SR_DT.Rows - Dim RG_ANH = VERAG_PROG_ALLGEMEIN.cRechnungsausgang.LOAD_ANHAENGE_LIST(r("RK_ID")) - If RG_ANH IsNot Nothing Then - For Each ANH In RG_ANH - ATTACHMENTS.Add(New cFakt_MailATTach(VERAG_PROG_ALLGEMEIN.cDATENSERVER.GET_PDFPath_BY_DocID(ANH.dsId), ANH.Bezeichnung)) - Next - End If + 'Rechnungsanhänge anfügen + '----------------------------------------------------------------- + If SR_DT IsNot Nothing AndAlso SR_DT.Rows.Count > 0 Then + For Each r In SR_DT.Rows + Dim RG_ANH = VERAG_PROG_ALLGEMEIN.cRechnungsausgang.LOAD_ANHAENGE_LIST(r("RK_ID")) + If RG_ANH IsNot Nothing Then + For Each ANH In RG_ANH + ATTACHMENTS.Add(New cFakt_MailATTach(VERAG_PROG_ALLGEMEIN.cDATENSERVER.GET_PDFPath_BY_DocID(ANH.dsId), ANH.Bezeichnung)) Next End If - '----------------------------------------------------------------- + Next + End If + '----------------------------------------------------------------- - addAttachments(Mail, lastAktuelle_RgNr, cbxMergePDF.Checked) + addAttachments(Mail, lastAktuelle_RgNr, cbxMergePDF.Checked) - If VERAG_PROG_ALLGEMEIN.cAllgemein.FIRMA = "AMBAR" Then - Try - Mail.SentOnBehalfOfName = "buchhaltung@ambarlog.com" - Catch ex2 As Exception - MsgBox(ex2.Message) - End Try - End If + If VERAG_PROG_ALLGEMEIN.cAllgemein.FIRMA = "AMBAR" Then + Try + Mail.SentOnBehalfOfName = "buchhaltung@ambarlog.com" + Catch ex2 As Exception + MsgBox(ex2.Message) + End Try + End If - Mail.Display() - '------------------------------------------------------------------------------------------ - ' STB /FA SR: ABFRAGE FISKAL-VZ - If isFiskal Then - send_StbFAMail(AD.AdressenNr, " Rg-Nr.: " & lastAktuelle_RgNr, lastAktuelle_RgNr) - End If + Mail.Display() + '------------------------------------------------------------------------------------------ + ' STB /FA SR: ABFRAGE FISKAL-VZ + If isFiskal Then + send_StbFAMail(AD.AdressenNr, " Rg-Nr.: " & lastAktuelle_RgNr, lastAktuelle_RgNr) + End If '------------------------------------------------------------------------------------------ End If @@ -793,65 +794,87 @@ Public Class frmFaktEmail If Firma_ID = 19 AndAlso RECHNUNG IsNot Nothing AndAlso RECHNUNG.FilialenNr = 4817 AndAlso RECHNUNG.DruckDatumZeit IsNot Nothing Then - Dim SPEDBUCH = New VERAG_PROG_ALLGEMEIN.cSpeditionsbuch(RECHNUNG.FilialenNr, RECHNUNG.AbfertigungsNr, RECHNUNG.UnterNr) + Dim SPEDBUCH = New VERAG_PROG_ALLGEMEIN.cSpeditionsbuch(RECHNUNG.FilialenNr, RECHNUNG.AbfertigungsNr, 0) If SPEDBUCH.hasEntry AndAlso (SPEDBUCH.Abfertigungsart = 114 Or SPEDBUCH.Abfertigungsart = 115) Then Dim USTV_ANTRAG As New cUSTVAntrag(RECHNUNG.ErfassungsNr) - Dim bearbGeb As Double = 0 - Dim hasVZ As Boolean = False + Dim GUBetrag_ohneBearbeitung As Double = 0 + Dim hatNichtAbgerechneteVZ As Boolean = False + Dim durchREWurdeVZAbgerechnet As Boolean = False - 'todo_Prüfung ist zu spät -> früher (vor dem eintragen in die DB)!!!! For Each pos In USTV_ANTRAG.POSITIONEN If pos.UStVPo_VZ AndAlso (IsDBNull(pos.UStVPo_VZ_RKID) OrElse pos.UStVPo_VZ_RKID Is Nothing) Then 'VZ die noch nicht abgerechnet wurde! - hasVZ = True + hatNichtAbgerechneteVZ = True + Exit For + End If + Next + + For Each pos In USTV_ANTRAG.POSITIONEN + If pos.UStVPo_VZ AndAlso pos.UStVPo_VZ_RKID = RECHNUNG.RK_ID Then 'VZ wurde durch diese RE abgerechnet + durchREWurdeVZAbgerechnet = True Exit For End If Next For Each r As cRechnungsausgangPositionen In RECHNUNG.POSITIONEN - If r.BerechnungsartNr = 8 AndAlso (r.LeistungsBez.ToLower.Contains("mwst") Or r.LeistungsBez.ToLower.Contains("moest") Or r.LeistungsBez.ToLower.Contains("vat") Or r.LeistungsBez.ToLower.Contains("excise duty") Or r.LeistungsBez.ToLower.Contains("tva")) Then bearbGeb += r.Preis + If r.BerechnungsartNr = 8 AndAlso (r.LeistungsBez.ToLower.Contains("mwst") Or r.LeistungsBez.ToLower.Contains("moest") Or r.LeistungsBez.ToLower.Contains("vat") Or r.LeistungsBez.ToLower.Contains("excise duty") Or r.LeistungsBez.ToLower.Contains("tva")) Then GUBetrag_ohneBearbeitung += r.Preis Next - 'nur bei NICHT VZ! - If Not hasVZ Then - 'Dim ANTR_ERSTATTUNG As New VERAG_PROG_ALLGEMEIN.cUStVErstattungPositionen(USTV_ANTRAG.UStVAn_ID, RECHNUNG.UnterNr + 1) - 'If Not ANTR_ERSTATTUNG.hasEntry Then - ' ANTR_ERSTATTUNG.GutschriftsDatum = RECHNUNG.RechnungsDatum - ' ANTR_ERSTATTUNG.GutschriftsNr = RECHNUNG.RechnungsNr - ' ANTR_ERSTATTUNG.UStVEr_Umrechnungskurs = 1 - ' ANTR_ERSTATTUNG.UStVEr_USteuerbetrag = bearbGeb - ' ANTR_ERSTATTUNG.UStVEr_USteuerbetragEUR = bearbGeb - ' ANTR_ERSTATTUNG.SAVE() - 'End If + Dim SQL As New SQL + If Not hatNichtAbgerechneteVZ Then + Dim count_offene_importierteErstattungen As Integer = -1 + count_offene_importierteErstattungen = CInt(SQL.getValueTxtBySql("SELECT COUNT(*) FROM [tblUStVErstattung] WHERE [UStVAn_ID] = " & USTV_ANTRAG.UStVAn_ID & " and [UStVEr_Importfilename] is not null and [GutschriftsNr] is null and [GutschriftsDatum] is null ", "FMZOLL")) - If IsDBNull(USTV_ANTRAG.UStVAn_VZBetrag) AndAlso IsDBNull(USTV_ANTRAG.UStVAn_VZDatum) Then + If count_offene_importierteErstattungen > 0 Then + SQL.doSQL("UPDATE [tblUStVErstattung] SET GutschriftsNr = " & RECHNUNG.RechnungsNr & ",GutschriftsDatum = '" & CDate(RECHNUNG.RechnungsDatum).ToShortDateString & "', UStVEr_RK_ID = " & RECHNUNG.RK_ID & " WHERE [UStVAn_ID] = " & USTV_ANTRAG.UStVAn_ID & " and [UStVEr_Importfilename] is not null and [GutschriftsNr] is null and [GutschriftsDatum] is null ", "FMZOLL") - USTV_ANTRAG.UStVAn_VZBetrag = bearbGeb - USTV_ANTRAG.UStVAn_VZDatum = RECHNUNG.RechnungsDatum - USTV_ANTRAG.SAVE() + Else + insertNewErstattungsPos(USTV_ANTRAG) End If + + + If durchREWurdeVZAbgerechnet Then + + USTV_ANTRAG.UStVAn_VZDatum = RECHNUNG.RechnungsDatum + + If IsDBNull(USTV_ANTRAG.UStVAn_VZBetrag) OrElse USTV_ANTRAG.UStVAn_VZBetrag Is Nothing Then + + USTV_ANTRAG.UStVAn_VZBetrag = GUBetrag_ohneBearbeitung + + ElseIf IsNumeric(USTV_ANTRAG.UStVAn_VZBetrag) Then + + USTV_ANTRAG.UStVAn_VZBetrag += GUBetrag_ohneBearbeitung + + End If + + USTV_ANTRAG.SAVE() + End If + + Else + insertNewErstattungsPos(USTV_ANTRAG) + End If - If hasVZ Then - Dim SQL As New SQL + If hatNichtAbgerechneteVZ Then - For Each pos As cUStVPositionen In USTV_ANTRAG.POSITIONEN - If Not IsDBNull(pos.UStVPo_VZ) AndAlso pos.UStVPo_VZ AndAlso (IsDBNull(pos.UStVPo_VZ_RKID) Or pos.UStVPo_VZ_RKID Is Nothing) Then - pos.UStVPo_VZ_RKID = RECHNUNG.RK_ID - pos.SAVE() - End If + For Each pos As cUStVPositionen In USTV_ANTRAG.POSITIONEN - Next + If Not IsDBNull(pos.UStVPo_VZ) AndAlso pos.UStVPo_VZ AndAlso (IsDBNull(pos.UStVPo_VZ_RKID) Or pos.UStVPo_VZ_RKID Is Nothing) Then + pos.UStVPo_VZ_RKID = RECHNUNG.RK_ID + pos.SAVE() + End If - Dim count_nichtAbgerVZ As Integer = -1 - count_nichtAbgerVZ = CInt(SQL.getValueTxtBySql("SELECT COUNT(*) FROM [tblUStVPositionen] WHERE [UStVAn_ID] = " & USTV_ANTRAG.UStVAn_ID & " and [UStVPo_VZ] = 1 and isnull(UStVPo_VZ_RKID,0) = 0", "FMZOLL")) - If count_nichtAbgerVZ = 0 Then + Next + + Dim count_nichtAbgerVZ As Integer = -1 + count_nichtAbgerVZ = CInt(SQL.getValueTxtBySql("SELECT COUNT(*) FROM [tblUStVPositionen] WHERE [UStVAn_ID] = " & USTV_ANTRAG.UStVAn_ID & " and [UStVPo_VZ] = 1 and isnull(UStVPo_VZ_RKID,0) = 0", "FMZOLL")) + If count_nichtAbgerVZ = 0 Then SQL.doSQL("UPDATE [tblUStVAntrag] SET UStVAn_VZoffen = 0 WHERE [UStVAn_ID] IN (SELECT [UStVAn_ID] FROM [tblUStVPositionen] WHERE isnull([UStVPo_VZ],0) = 1 AND [UStVAn_ID] = " & USTV_ANTRAG.UStVAn_ID & " )", "FMZOLL") End If @@ -859,11 +882,11 @@ Public Class frmFaktEmail End If - End If - - End If + + End If + '------------------------------------------------------------------------------------------ ' STB /FA send_StbFAMail(RECHNUNG.RechnungsKundenNr, " Rg-Nr.: " & RechnungsNr & abfNr, RECHNUNG.RechnungsNr) @@ -883,6 +906,21 @@ Public Class frmFaktEmail End Sub + Private Sub insertNewErstattungsPos(USTV_ANTRAG As cUSTVAntrag) + + + Dim ANTR_ERSTATTUNG As New VERAG_PROG_ALLGEMEIN.cUStVErstattungPositionen(USTV_ANTRAG.UStVAn_ID, RECHNUNG.RechnungsNr, CDate(RECHNUNG.RechnungsDatum)) + If Not ANTR_ERSTATTUNG.hasEntry Then + ANTR_ERSTATTUNG.UStVEr_ID = ANTR_ERSTATTUNG.getMaxPosNr() + ANTR_ERSTATTUNG.GutschriftsDatum = RECHNUNG.RechnungsDatum + ANTR_ERSTATTUNG.GutschriftsNr = RECHNUNG.RechnungsNr + ANTR_ERSTATTUNG.UStVEr_RK_ID = RECHNUNG.RK_ID + ANTR_ERSTATTUNG.UStVEr_USteuerbetrag = 0 + ANTR_ERSTATTUNG.UStVEr_USteuerbetragEUR = 0 + ANTR_ERSTATTUNG.SAVE() + End If + End Sub + Function addRgData_ZF_Passau(RechnungsLandKz) As String addRgData_ZF_Passau = vbNewLine & vbNewLine @@ -1194,7 +1232,7 @@ Public Class frmFaktEmail If cbxMDMAnh.Checked Then Mail.Attachments.Add(a.Pfad, Microsoft.Office.Interop.Outlook.OlAttachmentType.olByValue, , a.MailName) Else - If a.Pfad.ToString.toLowerCase.EndsWith("maut_at.pdf") Or a.Pfad.ToString.toLowerCase.EndsWith("maut_uta.pdf") Or a.Pfad.ToString.toLowerCase.EndsWith("maut_mse.pdf") Then + If a.Pfad.ToString.ToLower.EndsWith("maut_at.pdf") Or a.Pfad.ToString.ToLower.EndsWith("maut_uta.pdf") Or a.Pfad.ToString.ToLower.EndsWith("maut_mse.pdf") Then 'NICHT ANFÜGEN! Else Mail.Attachments.Add(a.Pfad, Microsoft.Office.Interop.Outlook.OlAttachmentType.olByValue, , a.MailName) diff --git a/SDL/Fakturierung/frmFaktSammelRgDrucken.vb b/SDL/Fakturierung/frmFaktSammelRgDrucken.vb index 949cf579..57b04f5d 100644 --- a/SDL/Fakturierung/frmFaktSammelRgDrucken.vb +++ b/SDL/Fakturierung/frmFaktSammelRgDrucken.vb @@ -660,7 +660,11 @@ Public Class frmFaktSammelRgDrucken Private Sub Button3_Click(sender As Object, e As EventArgs) Handles Button3.Click If MyDatagridview1.SelectedRows.Count > 0 Then - If cAutomailversand.automRechnungsversand_aktivieren(True) Then + If txtRechnungsdatum.Text = "" Then MsgBox("Bitte Rechnungsdatum angeben!") : Exit Sub + + If CDate(txtRechnungsdatum.Text).AddDays(-4) > Today() Then MsgBox("Rechnungen können max. 4 Tage vordatiert werden!") : Exit Sub + + If cAutomailversand.automRechnungsversand_aktivieren(True, CDate(txtRechnungsdatum.Text).ToShortDateString) Then Dim onlyEMAIL As Boolean = True @@ -670,7 +674,7 @@ Public Class frmFaktSammelRgDrucken If cboFirma._value = "" Then MsgBox("Bitte Firma angeben!") : Exit Sub If txtZeitraumBis.Text = "" Then MsgBox("Bitte Zeitraum-Bis angeben!") : Exit Sub - If txtRechnungsdatum.Text = "" Then MsgBox("Bitte Rechnungsdatum angeben!") : Exit Sub + If Not onlyEMAIL Then MsgBox("Sammelrechnungen die per POST/FAX verschickt werden, können nicht gesetzt werden!") : Exit Sub If vbYes = MsgBox("Es wird eine Beleg-NR vergeben, die Belege gelten somit als gedruckt und können nicht mehr bearbeitet werden.", vbYesNoCancel) Then diff --git a/SDL/Fakturierung/rptSammelRechnungAnlagenDruck_Leistungen.vb b/SDL/Fakturierung/rptSammelRechnungAnlagenDruck_Leistungen.vb index c98b0ada..ce9c3f2c 100644 --- a/SDL/Fakturierung/rptSammelRechnungAnlagenDruck_Leistungen.vb +++ b/SDL/Fakturierung/rptSammelRechnungAnlagenDruck_Leistungen.vb @@ -6,12 +6,23 @@ Public Class rptSammelRechnungAnlagenDruck_Leistungen Dim _LAN = "" Dim RECHNUNG As VERAG_PROG_ALLGEMEIN.cRechnungsausgang = Nothing Dim SQL As New VERAG_PROG_ALLGEMEIN.SQL - Sub New(_LAN As String, RECHNUNG As VERAG_PROG_ALLGEMEIN.cRechnungsausgang, VorschauID As String) + Dim isZNB As Boolean + Dim LeistungsText As String + Dim Anzahl As Integer + Dim SteuerpflichtigerBetrag As Double + Dim SteuerfreierBetrag As Double + + Sub New(_LAN As String, RECHNUNG As VERAG_PROG_ALLGEMEIN.cRechnungsausgang, VorschauID As String, Optional isZNB As Boolean = False, Optional LeistungsText As String = "", Optional Anzahl As Integer = 0, Optional SteuerpflichtigerBetrag As Double = 0, Optional SteuerfreierBetrag As Double = 0) ' Dieser Aufruf ist für den Designer erforderlich. InitializeComponent() Me._LAN = _LAN Me.RECHNUNG = RECHNUNG Me.VorschauID = VorschauID + Me.isZNB = isZNB + Me.LeistungsText = LeistungsText + Me.Anzahl = Anzahl + Me.SteuerpflichtigerBetrag = SteuerpflichtigerBetrag + Me.SteuerfreierBetrag = SteuerfreierBetrag ' Fügen Sie Initialisierungen nach dem InitializeComponent()-Aufruf hinzu. End Sub Private Sub rptRechnungDruck_ReportStart(sender As Object, e As EventArgs) Handles MyBase.ReportStart @@ -52,16 +63,22 @@ Public Class rptSammelRechnungAnlagenDruck_Leistungen dt.Columns.Add("clmnLeistungsNr") RECHNUNG.ORDER_POSITIONEN() - - For Each POS In RECHNUNG.POSITIONEN - If VorschauID = "PROVISIONSABRECHNUNG" Then - If CBool(SQL.DLookup("Abfertigungskosten", "Leistungen", "LeistungsNr='" & POS.LeistungsNr & "'", "FMZOLL")) Then + If Not isZNB Then + For Each POS In RECHNUNG.POSITIONEN + If VorschauID = "PROVISIONSABRECHNUNG" Then + If CBool(SQL.DLookup("Abfertigungskosten", "Leistungen", "LeistungsNr='" & POS.LeistungsNr & "'", "FMZOLL")) Then + dt.Rows.Add(POS.LeistungsBez, POS.SteuerfreierBetrag, POS.SteuerpflichtigerBetrag, POS.Anzahl, POS.LeistungsNr) + End If + Else dt.Rows.Add(POS.LeistungsBez, POS.SteuerfreierBetrag, POS.SteuerpflichtigerBetrag, POS.Anzahl, POS.LeistungsNr) End If - Else - dt.Rows.Add(POS.LeistungsBez, POS.SteuerfreierBetrag, POS.SteuerpflichtigerBetrag, POS.Anzahl, POS.LeistungsNr) - End If - Next + Next + + Else + + dt.Rows.Add(LeistungsText, SteuerfreierBetrag, SteuerpflichtigerBetrag, Anzahl, 950) + End If + Me.DataSource = dt diff --git a/SDL/Fakturierung/usrCntlFaktAbrechnung.vb b/SDL/Fakturierung/usrCntlFaktAbrechnung.vb index 75a47310..31ec40fc 100644 --- a/SDL/Fakturierung/usrCntlFaktAbrechnung.vb +++ b/SDL/Fakturierung/usrCntlFaktAbrechnung.vb @@ -21,6 +21,8 @@ Public Class usrCntlFaktAbrechnung Public Event EVENT_DELETED() Public Event SOMETHING_CHANGED(RK_ID) + Public automail_rechnungsdatum As Date = Today() + Dim vorherige_RK_ID = 0 Dim nachstehende_RK_ID = 0 Dim veragKunde As Integer = -1 @@ -39,7 +41,7 @@ Public Class usrCntlFaktAbrechnung End Sub - Sub New(RK_ID) + Sub New(RK_ID As Integer) ' Dieser Aufruf ist für den Designer erforderlich. InitializeComponent() @@ -49,6 +51,7 @@ Public Class usrCntlFaktAbrechnung End Sub + Public Sub newRECHNUNG(Optional Firma = Nothing) RECHNUNG = Nothing @@ -3512,7 +3515,7 @@ Public Class usrCntlFaktAbrechnung If RECHNUNG IsNot Nothing AndAlso RECHNUNG.Sammelrechnung = 0 Then 'nur bei ER If cbxAUTOMailversand.Checked AndAlso (Not RECHNUNG.Automailversand Or RECHNUNG.RechnungsDatum Is Nothing) Then - If cAutomailversand.automRechnungsversand_aktivieren(showMessageBox, RECHNUNG.Sammelrechnung = 0) Then + If cAutomailversand.automRechnungsversand_aktivieren(showMessageBox, automail_rechnungsdatum, RECHNUNG.Sammelrechnung = 0) Then Dim fun As New cAutomailversand Dim AD As VERAG_PROG_ALLGEMEIN.cAdressen = kdFirmaRechnungAn.KdData_ADRESSEN @@ -3522,8 +3525,8 @@ Public Class usrCntlFaktAbrechnung If RECHNUNG.RechnungsDatum Is Nothing Then - 'LAUT AUSSAGE VON VERR. IMMER HEUTIGES DATUM! - RECHNUNG.RechnungsDatum = Today() + 'LAUT AUSSAGE VON VERR. IMMER HEUTIGES DATUM! - NUN DOCH WIEDER NICHT!!!!!!!!!!!!!!!!! + RECHNUNG.RechnungsDatum = automail_rechnungsdatum 'If Not cFakturierung.getRgDatInput("", RECHNUNG.[RechnungsDatum]) Then 'Now.ToShortDateString ' cbxAUTOMailversand.Checked = False ' Exit Sub @@ -5258,13 +5261,19 @@ mwst: r.Cells("Preis").Value = sumVZAntrag Else - Dim GesamtUSteuerEUR As Double = SQL.DLookup("isnull(sum(UStVPo_USteuerbetragEUR),0)", "tblUStVPositionen", "UStVAn_ID='" & antrag.UStVAn_ID & "'", "FMZOLL", "0") - Dim GesamtErstattungEUR As Double = SQL.DLookup("isnull(sum(UStVEr_USteuerbetragEUR),0)", "tblUStVErstattung", "UStVAn_ID='" & antrag.UStVAn_ID & "'", "FMZOLL", "0") - Dim DiffernezbetragEUR As Double = GesamtUSteuerEUR - GesamtErstattungEUR + 'vorher wurde der Differenzbetrag zuerst verrechnet und dann erst ausgetragen, nun umgekehrt! + 'Dim GesamtUSteuerEUR As Double = SQL.DLookup("isnull(sum(UStVPo_USteuerbetragEUR),0)", "tblUStVPositionen", "UStVAn_ID='" & antrag.UStVAn_ID & "'", "FMZOLL", "0") + 'Dim GesamtErstattungEUR As Double = SQL.DLookup("isnull(sum(UStVEr_USteuerbetragEUR),0)", "tblUStVErstattung", "UStVAn_ID='" & antrag.UStVAn_ID & "'", "FMZOLL", "0") + 'Dim DiffernezbetragEUR As Double = GesamtUSteuerEUR - GesamtErstattungEUR + + 'If DiffernezbetragEUR <> 0 Then + ' r.Cells("Preis").Value = DiffernezbetragEUR + 'Else + ' r.Cells("Preis").Value = 0 + 'End If + 'quickfix! + r.Cells("Preis").Value = sumFremdAntrag + sumRMCAntrag - If DiffernezbetragEUR <> 0 Then - r.Cells("Preis").Value = DiffernezbetragEUR - End If End If @@ -5283,6 +5292,8 @@ mwst: If Not IsDBNull(r.Cells("Preis").Value) Then Dim OFFERTE As New VERAG_PROG_ALLGEMEIN.cOfferte(IIf(RECHNUNG.RechnungsKundenNr > 0, RECHNUNG.RechnungsKundenNr, kdFirmaRechnungAn.KdNr), OffertNr, True) Call prBearbGeb_NEW(r, OFFERTE, RECHNUNG, r.Cells("BGebLeistungsNr").Value, r.Cells("BGebProzent").Value, IIf(Not IsDBNull(r.Cells("BGebMinBetrag").Value), r.Cells("BGebMinBetrag").Value, 0), r.Cells("Preis").Value * If(RECHNUNG.Vorzeichen = "-", -1, 1), summeRMC, summeFremd, OFFERT_RMC, OFFERT_FREMD, FremdUndRMC, changed, sumRMCAntrag, sumOffertRMC, sumFremdAntrag, sumOffertFremd, sumVZAntrag, POSChanged) + Else + 'MsgBox("kein Preis im Offert hinterlegt!") End If End If @@ -5683,7 +5694,6 @@ mwst: ' 'Button16.Enabled = Not enableAUTOMAIL 'End If - Return enableAUTOMAIL diff --git a/SDL/Formulare/KDFormulare/FormulareBaukasten/rptPreislisten.Designer.vb b/SDL/Formulare/KDFormulare/FormulareBaukasten/rptPreislisten.Designer.vb index 985cd7b3..a8092587 100644 --- a/SDL/Formulare/KDFormulare/FormulareBaukasten/rptPreislisten.Designer.vb +++ b/SDL/Formulare/KDFormulare/FormulareBaukasten/rptPreislisten.Designer.vb @@ -33,6 +33,7 @@ Partial Public Class rptPreislisten Me.lblAGB = New GrapeCity.ActiveReports.SectionReportModel.Label() Me.lblDetails = New GrapeCity.ActiveReports.SectionReportModel.Label() Me.Line2 = New GrapeCity.ActiveReports.SectionReportModel.Line() + Me.Label1 = New GrapeCity.ActiveReports.SectionReportModel.Label() Me.ReportHeader1 = New GrapeCity.ActiveReports.SectionReportModel.ReportHeader() Me.txtFirmaInfo_IMEX = New GrapeCity.ActiveReports.SectionReportModel.TextBox() Me.txtFirmaInfo_ATILLA = New GrapeCity.ActiveReports.SectionReportModel.TextBox() @@ -60,13 +61,14 @@ Partial Public Class rptPreislisten Me.txtFirmenkennung = New GrapeCity.ActiveReports.SectionReportModel.TextBox() Me.SubReport = New GrapeCity.ActiveReports.SectionReportModel.SubReport() Me.SubReport2 = New GrapeCity.ActiveReports.SectionReportModel.SubReport() - Me.Label1 = New GrapeCity.ActiveReports.SectionReportModel.Label() + Me.txtHinweis = New GrapeCity.ActiveReports.SectionReportModel.TextBox() CType(Me.txtLeistung, System.ComponentModel.ISupportInitialize).BeginInit() CType(Me.TextBox3, System.ComponentModel.ISupportInitialize).BeginInit() CType(Me.txtNr, System.ComponentModel.ISupportInitialize).BeginInit() CType(Me.txtPreis, System.ComponentModel.ISupportInitialize).BeginInit() CType(Me.lblAGB, System.ComponentModel.ISupportInitialize).BeginInit() CType(Me.lblDetails, System.ComponentModel.ISupportInitialize).BeginInit() + CType(Me.Label1, System.ComponentModel.ISupportInitialize).BeginInit() CType(Me.txtFirmaInfo_IMEX, System.ComponentModel.ISupportInitialize).BeginInit() CType(Me.txtFirmaInfo_ATILLA, System.ComponentModel.ISupportInitialize).BeginInit() CType(Me.txtFirmaInfo_VERAG, System.ComponentModel.ISupportInitialize).BeginInit() @@ -86,7 +88,7 @@ Partial Public Class rptPreislisten CType(Me.txtClearing, System.ComponentModel.ISupportInitialize).BeginInit() CType(Me.txtEnding, System.ComponentModel.ISupportInitialize).BeginInit() CType(Me.txtFirmenkennung, System.ComponentModel.ISupportInitialize).BeginInit() - CType(Me.Label1, System.ComponentModel.ISupportInitialize).BeginInit() + CType(Me.txtHinweis, System.ComponentModel.ISupportInitialize).BeginInit() CType(Me, System.ComponentModel.ISupportInitialize).BeginInit() ' 'PageHeader @@ -266,6 +268,17 @@ Partial Public Class rptPreislisten Me.Line2.Y1 = 0.02519685! Me.Line2.Y2 = 0.02527889! ' + 'Label1 + ' + Me.Label1.Height = 0.2! + Me.Label1.HyperLink = Nothing + Me.Label1.Left = 0.005488008! + Me.Label1.Name = "Label1" + Me.Label1.Style = "font-size: 8pt" + Me.Label1.Text = "" + Me.Label1.Top = 0.01250004! + Me.Label1.Width = 3.120079! + ' 'ReportHeader1 ' Me.ReportHeader1.Controls.AddRange(New GrapeCity.ActiveReports.SectionReportModel.ARControl() {Me.txtFirmaInfo_IMEX, Me.txtFirmaInfo_ATILLA, Me.txtFirmaInfo_VERAG, Me.picVERAG, Me.Shape8, Me.txtHeader1, Me.txtHeader2, Me.txtLeistungUeberschrift, Me.txtPosUeberschrift, Me.txtPreisUeberschrift, Me.Line9, Me.TextBox6, Me.TextBox7}) @@ -426,8 +439,8 @@ Partial Public Class rptPreislisten 'ReportFooter1 ' Me.ReportFooter1.CanShrink = True - Me.ReportFooter1.Controls.AddRange(New GrapeCity.ActiveReports.SectionReportModel.ARControl() {Me.txtOrtDatum, Me.Line, Me.txtUnterschrift, Me.Line1, Me.txtVorlageKredit, Me.txtZahlungsziel, Me.txtZahlungsziel2, Me.txtClearing, Me.txtEnding, Me.txtFirmenkennung, Me.SubReport, Me.SubReport2}) - Me.ReportFooter1.Height = 4.128265! + Me.ReportFooter1.Controls.AddRange(New GrapeCity.ActiveReports.SectionReportModel.ARControl() {Me.txtOrtDatum, Me.Line, Me.txtUnterschrift, Me.Line1, Me.txtVorlageKredit, Me.txtZahlungsziel, Me.txtZahlungsziel2, Me.txtClearing, Me.txtEnding, Me.txtFirmenkennung, Me.SubReport, Me.SubReport2, Me.txtHinweis}) + Me.ReportFooter1.Height = 4.128347! Me.ReportFooter1.KeepTogether = True Me.ReportFooter1.Name = "ReportFooter1" ' @@ -494,20 +507,19 @@ Partial Public Class rptPreislisten Me.txtZahlungsziel.Height = 0.2720473! Me.txtZahlungsziel.Left = 0.01102362! Me.txtZahlungsziel.Name = "txtZahlungsziel" - Me.txtZahlungsziel.Style = "font-size: 14pt; font-weight: bold; text-align: left; ddo-char-set: 1" - Me.txtZahlungsziel.Text = "Wir haben %ZAHLUNGSZIEL% Tage Zahlungsziel" + Me.txtZahlungsziel.Style = "font-size: 12pt; font-weight: bold; text-align: left; ddo-char-set: 1" + Me.txtZahlungsziel.Text = "Wir haben %ZAHLUNGSZIEL% Tage Zahlungsziel*" Me.txtZahlungsziel.Top = 0.6728347! - Me.txtZahlungsziel.Width = 4.88189! + Me.txtZahlungsziel.Width = 6.68189! ' 'txtZahlungsziel2 ' - Me.txtZahlungsziel2.Height = 0.8244092! + Me.txtZahlungsziel2.Height = 0.3972438! Me.txtZahlungsziel2.Left = 0.01102362! Me.txtZahlungsziel2.Name = "txtZahlungsziel2" Me.txtZahlungsziel2.Style = "font-size: 10pt; font-weight: normal; text-align: left; ddo-char-set: 1" Me.txtZahlungsziel2.Text = "Bei Zahlung innerhalb %ZAHLUNGSZIEL% Tagen kann die Kreditaufwendung (%POSKREDIT%" & - ") in Abzug gebracht werden (ausgenommen bei Vorkassenberechnungen)." & Global.Microsoft.VisualBasic.ChrW(13) & Global.Microsoft.VisualBasic.ChrW(10) & Global.Microsoft.VisualBasic.ChrW(13) & Global.Microsoft.VisualBasic.ChrW(10) & "Wir behal" & - "ten uns Preisanpassungen vor." + ") in Abzug gebracht werden.* " & Global.Microsoft.VisualBasic.ChrW(13) & Global.Microsoft.VisualBasic.ChrW(10) Me.txtZahlungsziel2.Top = 1.011024! Me.txtZahlungsziel2.Width = 6.68189! ' @@ -526,12 +538,12 @@ Partial Public Class rptPreislisten 'txtEnding ' Me.txtEnding.Height = 0.9830709! - Me.txtEnding.Left = 0! + Me.txtEnding.Left = 0.01102362! Me.txtEnding.Name = "txtEnding" Me.txtEnding.Style = "font-size: 10pt; font-weight: normal; text-align: left; ddo-char-set: 1" Me.txtEnding.Text = "Wir bedanken uns für Ihren Auftrag und freuen uns auf eine gute Zusammenarbeit." & Global.Microsoft.VisualBasic.ChrW(13) & Global.Microsoft.VisualBasic.ChrW(10) & "" & Global.Microsoft.VisualBasic.ChrW(13) & Global.Microsoft.VisualBasic.ChrW(10) & Global.Microsoft.VisualBasic.ChrW(13) & Global.Microsoft.VisualBasic.ChrW(10) & Global.Microsoft.VisualBasic.ChrW(13) & Global.Microsoft.VisualBasic.ChrW(10) & "Mit freundlichen Grüßen" - Me.txtEnding.Top = 1.835433! + Me.txtEnding.Top = 1.814567! Me.txtEnding.Width = 6.692914! ' 'txtFirmenkennung @@ -566,16 +578,20 @@ Partial Public Class rptPreislisten Me.SubReport2.Top = 0.5192913! Me.SubReport2.Width = 6.722048! ' - 'Label1 + 'txtHinweis ' - Me.Label1.Height = 0.2! - Me.Label1.HyperLink = Nothing - Me.Label1.Left = 0.005488008! - Me.Label1.Name = "Label1" - Me.Label1.Style = "font-size: 8pt" - Me.Label1.Text = "" - Me.Label1.Top = 0.01250004! - Me.Label1.Width = 3.120079! + Me.txtHinweis.DataField = "" + Me.txtHinweis.DistinctField = "" + Me.txtHinweis.Height = 0.7035433! + Me.txtHinweis.Left = 0.01102362! + Me.txtHinweis.Name = "txtHinweis" + Me.txtHinweis.Style = "color: Black; font-size: 10pt; font-weight: normal; text-align: left; ddo-char-se" & + "t: 1" + Me.txtHinweis.SummaryGroup = "" + Me.txtHinweis.Text = "*ausgenommen bei Vorkassenberechnungen " & Global.Microsoft.VisualBasic.ChrW(10) & Global.Microsoft.VisualBasic.ChrW(13) & Global.Microsoft.VisualBasic.ChrW(10) & "Wir behalten uns Preisanpassungen vor. " & + "" + Me.txtHinweis.Top = 1.314567! + Me.txtHinweis.Width = 6.68189! ' 'rptPreislisten ' @@ -588,7 +604,7 @@ Partial Public Class rptPreislisten Me.PageSettings.PaperHeight = 11.69291! Me.PageSettings.PaperKind = GrapeCity.ActiveReports.Printing.PaperKind.A4 Me.PageSettings.PaperWidth = 8.267716! - Me.PrintWidth = 6.733071! + Me.PrintWidth = 6.775591! Me.Sections.Add(Me.ReportHeader1) Me.Sections.Add(Me.PageHeader) Me.Sections.Add(Me.Detail) @@ -606,6 +622,7 @@ Partial Public Class rptPreislisten CType(Me.txtPreis, System.ComponentModel.ISupportInitialize).EndInit() CType(Me.lblAGB, System.ComponentModel.ISupportInitialize).EndInit() CType(Me.lblDetails, System.ComponentModel.ISupportInitialize).EndInit() + CType(Me.Label1, System.ComponentModel.ISupportInitialize).EndInit() CType(Me.txtFirmaInfo_IMEX, System.ComponentModel.ISupportInitialize).EndInit() CType(Me.txtFirmaInfo_ATILLA, System.ComponentModel.ISupportInitialize).EndInit() CType(Me.txtFirmaInfo_VERAG, System.ComponentModel.ISupportInitialize).EndInit() @@ -625,7 +642,7 @@ Partial Public Class rptPreislisten CType(Me.txtClearing, System.ComponentModel.ISupportInitialize).EndInit() CType(Me.txtEnding, System.ComponentModel.ISupportInitialize).EndInit() CType(Me.txtFirmenkennung, System.ComponentModel.ISupportInitialize).EndInit() - CType(Me.Label1, System.ComponentModel.ISupportInitialize).EndInit() + CType(Me.txtHinweis, System.ComponentModel.ISupportInitialize).EndInit() CType(Me, System.ComponentModel.ISupportInitialize).EndInit() End Sub @@ -671,4 +688,5 @@ Partial Public Class rptPreislisten Public WithEvents TextBox6 As GrapeCity.ActiveReports.SectionReportModel.TextBox Public WithEvents TextBox7 As GrapeCity.ActiveReports.SectionReportModel.TextBox Private WithEvents Label1 As GrapeCity.ActiveReports.SectionReportModel.Label + Public WithEvents txtHinweis As GrapeCity.ActiveReports.SectionReportModel.TextBox End Class diff --git a/SDL/Formulare/KDFormulare/FormulareBaukasten/rptPreislisten.resx b/SDL/Formulare/KDFormulare/FormulareBaukasten/rptPreislisten.resx index 2821a777..ce843a33 100644 --- a/SDL/Formulare/KDFormulare/FormulareBaukasten/rptPreislisten.resx +++ b/SDL/Formulare/KDFormulare/FormulareBaukasten/rptPreislisten.resx @@ -124,9 +124,6 @@ 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 - 0, 0 diff --git a/SDL/Formulare/KDFormulare/frmFormulare.vb b/SDL/Formulare/KDFormulare/frmFormulare.vb index 573396c6..ee05eec8 100644 --- a/SDL/Formulare/KDFormulare/frmFormulare.vb +++ b/SDL/Formulare/KDFormulare/frmFormulare.vb @@ -5,7 +5,9 @@ Imports System.Reflection Imports System.Text.RegularExpressions Imports System.Windows.Documents Imports com.sun.tools.internal.ws.wsdl.document.mime +Imports DAKOSY_Worker.Abgabenbescheid_008 Imports GrapeCity.ActiveReports +Imports GrapeCity.DataVisualization.TypeScript Imports itextsharp.text.pdf Imports Microsoft.Office.Interop Imports VERAG_PROG_ALLGEMEIN @@ -1135,6 +1137,8 @@ Public Class frmFormulare Dim listMail As New List(Of FormMangagerEmail) + Dim listofFormulare As New List(Of String) + Dim attachmentName As String = "" Try @@ -1143,7 +1147,7 @@ Public Class frmFormulare Dim hassValidErr = False For Each c In MyFlowLayoutPanel1.Controls Dim err = "" - If Not FormularManagerNEU.validFormulare(c, err) Then + If Not FormularManagerNEU.validFormulare(c, err, listofFormulare) Then txtErr.Text &= err hassValidErr = True End If @@ -1154,6 +1158,11 @@ Public Class frmFormulare Exit Sub End If + attachmentName = createAttachmentName(listofFormulare, KdNr) + + If attachmentName = "" Then + attachmentName = "_Formular" + End If If isSingleForm And sender Is btnPrint Then 'Sofortdruck --> wir bei ActiveRepots benötigt --> schneller, als zuerst pdf.... If Not MyFlowLayoutPanel1.Controls.Count = 1 Then Me.Cursor = Cursors.Default : Exit Sub 'funkt. nur bei genau 1 Control @@ -1162,6 +1171,7 @@ Public Class frmFormulare Dim list As New List(Of String) ' Sammlung PDFs + For Each c In MyFlowLayoutPanel1.Controls Dim pfadList As List(Of String) = FormularManagerNEU.genPDF(c,,,,, listMail) For Each pfad In pfadList @@ -1176,7 +1186,7 @@ Public Class frmFormulare If list.Count = 1 Then dest_path = list(0) Else - dest_path = VERAG_PROG_ALLGEMEIN.DATENVERVER_OPTIONS.getTMPPath(VERAG_PROG_ALLGEMEIN.cAllgemein.FIRMA & "_Formular.pdf", ".pdf", False, False) + dest_path = VERAG_PROG_ALLGEMEIN.DATENVERVER_OPTIONS.getTMPPath(VERAG_PROG_ALLGEMEIN.cAllgemein.FIRMA & attachmentName & ".pdf", ".pdf", False, False) If Not FormularManagerNEU.MergePdfFiles(list, dest_path) Then dest_path = "" : MsgBox("Fehler PDF") End If @@ -1189,98 +1199,6 @@ Public Class frmFormulare 'System.Diagnostics.Process.Start("mailto:" & "" & "?subject=" & "?" & "&body=" & "?" & "&attachment=" & dest_path) Try - - - - 'Dim Mail As New MailMessage - - 'Try - ' Dim SMTP As New SmtpClient("smtp.gmail.com") - ' SMTP.EnableSsl = True - ' SMTP.Credentials = New System.Net.NetworkCredential("[your gmail address@gmail.com]", "[the associated password]") - ' SMTP.Port = 587 - - ' Mail.From = New MailAddress("""[Friendly Name]"" <[your gmail address@gmail.com>") - - - ' Mail.Subject = "" - ' Mail.Body = "" - ' If dest_path <> "" Then Mail.Attachments.Add(New Mail.Attachment(dest_path)) - ' Mail.IsBodyHtml = True - - ' ' SMTP.Send(Mail) - - ' 'Clear Mail Object - ' Mail.Dispose() - - ' 'Function Return - ' Return True - - 'Catch ex As Exception - - ' 'Function Return - ' Return False - - 'End Try - - - - If False Then - Dim mapi As New VERAG_PROG_ALLGEMEIN.SendFileTo.MAPI - - mapi.AddAttachment(dest_path) - mapi.SendMailPopup("testing", "body text") - Exit Sub - End If - - If False Then - - - - - Call ShellExecute(Me.Handle, "open", "mailto:" & "" & "?subject=" & "?" & "&body=" & "?" & "&Attach=""" & dest_path & """", vbNullString, vbNullString, SW_SHOW) - ' Call ShellExecute(Me.Handle, "open", "mailto:" & "" & "?subject=" & "?" & "&body=" & "?", "", "", SW_SHOW) - - - Exit Sub - - - Dim MailMessage As New System.Net.Mail.MailMessage() - ' MailMessage.From = New MailAddress("someone@yourdomain.com") - MailMessage.Subject = "" ' "Your subject here" - MailMessage.IsBodyHtml = True - ' MailMessage.Body = MailHTMLText '"My HTML formatted body" - - MailMessage.Attachments.Add(New Attachment(dest_path)) - - Dim filename = "C://Temp/mymessage.eml" - - 'save the MailMessage to the filesystem - ' MailMessage.save(filename) - Save(MailMessage, filename) - 'Open the file with the default associated application registered on the local machine - - - - - Process.Start(filename) - - 'Dim mapi As New VERAG_PROG_ALLGEMEIN.SendFileTo.cSendMailAttach - - 'mapi.AddAttachment(dest_path) - ''mapi.AddRecipientTo("person1@somewhere.com") - ''mapi.AddRecipientTo("person2@somewhere.com") - 'mapi.SendMailPopup("", "") - Exit Sub - End If - - 'Dim Mail As Outlook.MailItem = CType(Application.CreateItem(Outlook.OlItemType.olMailItem), Outlook.MailItem) - - ' If VERAG_PROG_ALLGEMEIN.cAllgemein.FIRMA = "IMEX" Then - ' Else - ' Dim outl = CreateObject("Outlook.Application") - ' Dim Mail = CreateObject("Microsoft.Office.Interop.Outlook.MailItem") - If listMail IsNot Nothing AndAlso listMail.Count > 0 Then For Each l In listMail Dim outl As New Outlook.Application @@ -1306,7 +1224,7 @@ Public Class frmFormulare End Try End If - Mail.Attachments.Add(dest_path, Microsoft.Office.Interop.Outlook.OlAttachmentType.olByValue, , VERAG_PROG_ALLGEMEIN.cAllgemein.FIRMA & "_Formular.pdf") + Mail.Attachments.Add(dest_path, Microsoft.Office.Interop.Outlook.OlAttachmentType.olByValue, , VERAG_PROG_ALLGEMEIN.cAllgemein.FIRMA & attachmentName & ".pdf") Mail.Display() Next @@ -1359,7 +1277,7 @@ Public Class frmFormulare - Mail.Attachments.Add(dest_path, Microsoft.Office.Interop.Outlook.OlAttachmentType.olByValue, , VERAG_PROG_ALLGEMEIN.cAllgemein.FIRMA & "_Formular.pdf") + Mail.Attachments.Add(dest_path, Microsoft.Office.Interop.Outlook.OlAttachmentType.olByValue, , VERAG_PROG_ALLGEMEIN.cAllgemein.FIRMA & attachmentName & ".pdf") Mail.Display() End If @@ -1393,6 +1311,43 @@ Public Class frmFormulare ' If list.Count > 0 Then End Sub + Private Function createAttachmentName(listOfFormular As List(Of String), KundenNr As Integer) As String + + Dim Bez As String = "" + If KundenNr > 0 Then + Dim ADR As New cAdressen(KundenNr) + + If ADR.Name_1 IsNot Nothing AndAlso ADR.Name_1 <> "" Then + + Bez = "_" & ADR.Name_1.ToString + Bez = VERAG_PROG_ALLGEMEIN.cDATENSERVER.replaceInvalidCahr(Bez) + Bez = Regex.Replace(Bez, "[" & Regex.Escape(New String(System.IO.Path.GetInvalidFileNameChars())) & "]", "_") + End If + + + End If + + If listOfFormular.Count = 1 Then + + Bez &= "_" & listOfFormular(0).ToString.Replace("SDL.usrcntl", "") + + Return Bez + + ElseIf listOfFormular.Count > 1 Then + + For Each r In listOfFormular + Bez &= "_" & r.ToString.Replace("SDL.usrcntl", "") + + Next + + Return Bez + + Else + Return "" + End If + + End Function + Const SW_SHOW = 5 Declare Function ShellExecute Lib "shell32.dll" _ Alias "ShellExecuteA" ( @@ -1684,52 +1639,61 @@ Public Class FormularManagerNEU Return striList End Function - Shared Function validFormulare(c As Control, ByRef err As String) As Boolean + Shared Function validFormulare(c As Control, ByRef err As String, listOfFormulare As List(Of String)) As Boolean validFormulare = True Dim striList As New List(Of String) Select Case c.GetType.ToString Case GetType(usrcntlVollmacht_DE).ToString - ' retStr = FormularManagerNEU.VM_De(c) + listOfFormulare.Add(GetType(usrcntlVollmacht_DE).ToString()) + Case GetType(usrcntlVollmacht_GB_IE).ToString + listOfFormulare.Add(GetType(usrcntlVollmacht_GB_IE).ToString()) + Case GetType(usrcntlVollmacht_GB_indirekt).ToString + listOfFormulare.Add(GetType(usrcntlVollmacht_GB_indirekt).ToString()) Case GetType(usrcntlVollmacht_DE_indirekt).ToString - ' retStr = FormularManagerNEU.VM_De(c) + listOfFormulare.Add(GetType(usrcntlVollmacht_DE_indirekt).ToString) Case GetType(usrcntlVollmacht_AT).ToString - ' retStr = FormularManagerNEU.VM_AT(c) + listOfFormulare.Add(GetType(usrcntlVollmacht_AT).ToString) Case GetType(usrcntlFormOhneFelder).ToString - ' retStr = FormularManagerNEU.SimplePDF(c) Case GetType(usrcntlVollmacht_DE_Fiskal).ToString - ' retStr = FormularManagerNEU.VM_DE_Fiskal(c) + listOfFormulare.Add(GetType(usrcntlVollmacht_DE_Fiskal).ToString) Case GetType(usrcntlVollmacht_AT_EV).ToString - ' retStr = FormularManagerNEU.VM_AT_EV(c) + listOfFormulare.Add(GetType(usrcntlVollmacht_AT_EV).ToString) Case GetType(usrcntlVollmacht_AT_Fiskal).ToString - ' retStr = FormularManagerNEU.VM_AT_Fiskal(c) + listOfFormulare.Add(GetType(usrcntlVollmacht_AT_EV).ToString) Case GetType(usrcntlVollmacht_ATILLA_EXPORT).ToString - ' retStr = FormularManagerNEU.VM_ATILLA_EXPORT(c) + listOfFormulare.Add(GetType(usrcntlVollmacht_AT_EV).ToString) Case GetType(usrcntlVollmacht_VERAG_EXPORT).ToString - ' retStr = FormularManagerNEU.VM_VERAG_EXPORT(c) + listOfFormulare.Add(GetType(usrcntlVollmacht_VERAG_EXPORT).ToString) Case GetType(usrcntlVorauskasse).ToString + listOfFormulare.Add(GetType(usrcntlVorauskasse).ToString) If Not DirectCast(c, usrcntlVorauskasse).ValidValues(err) Then validFormulare = False Case GetType(usrcntlGestellungsgarantie).ToString - ' retStr = FormularManagerNEU.Gestellungsgarantie(c) + listOfFormulare.Add(GetType(usrcntlGestellungsgarantie).ToString) + Case GetType(usrcntlVerzollungspreise).ToString - ' retStr = FormularManagerNEU.Verzollungspreise(c) + listOfFormulare.Add(GetType(usrcntlVerzollungspreise).ToString) Case GetType(usrcntlCreditreformBoniAuskunft).ToString - 'retStr = FormularManagerNEU.Bonitaetsauskunft(c) + listOfFormulare.Add(GetType(usrcntlCreditreformBoniAuskunft).ToString) Case GetType(usrcntlSonstigesPDF).ToString - ' retStr = FormularManagerNEU.SonstPDF(c) + listOfFormulare.Add(GetType(usrcntlSonstigesPDF).ToString) Case GetType(usrCntlDispoliste).ToString - 'retStr = FormularManagerNEU.DispoListe(c) + listOfFormulare.Add(GetType(usrCntlDispoliste).ToString) Case GetType(usrCntlVerpflichtungserklärungFahrer).ToString - ' striList = FormularManagerNEU.VerpflichtungserklärungFahrer(c) + listOfFormulare.Add(GetType(usrCntlVerpflichtungserklärungFahrer).ToString) Case GetType(usrcntlFiskalInfoschreiben).ToString - ' retStr = FormularManagerNEU.FiskalInfoschreiben(c) + listOfFormulare.Add(GetType(usrcntlFiskalInfoschreiben).ToString) Case GetType(usrcntlVerzollungsunterlagen).ToString + listOfFormulare.Add(GetType(usrcntlVerzollungsunterlagen).ToString) If Not DirectCast(c, usrcntlVerzollungsunterlagen).ValidValues(err) Then validFormulare = False Case GetType(usrcntlVUB).ToString - ' retStr = FormularManagerNEU.VUB(c) + listOfFormulare.Add(GetType(usrcntlVUB).ToString) + + Case GetType(usrcntlImportaviso).ToString + listOfFormulare.Add(GetType(usrcntlImportaviso).ToString) End Select @@ -1907,7 +1871,7 @@ Public Class FormularManagerNEU listTowrite.Add(New VERAG_PROG_ALLGEMEIN.cPDFWriteValues(formatAmountEUR(usrCntl.txtCBAM_jeZertBest_Paket_1._value, True), 168, Top + 114.5, 25, 6, "bold", 10, , iTextSharp.text.Element.ALIGN_RIGHT, 2)) - + 'Dim ohneOnboarding As String = IIf(usrCntl.cbxOnboardingVerrechnen.Checked, "", "ohne_Onboarding_") ' Dim firma=getUO2() Select Case usrCntl.cboSprache._value Case "TR", "EN" diff --git a/SDL/My Project/AssemblyInfo.vb b/SDL/My Project/AssemblyInfo.vb index 873308bc..0049ddf9 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/My Project/Resources.Designer.vb b/SDL/My Project/Resources.Designer.vb index 067d6a67..5873bba6 100644 --- a/SDL/My Project/Resources.Designer.vb +++ b/SDL/My Project/Resources.Designer.vb @@ -1104,6 +1104,16 @@ Namespace My.Resources End Get End Property + ''' + ''' Sucht eine lokalisierte Ressource vom Typ System.Drawing.Bitmap. + ''' + Friend ReadOnly Property Klipphausen_Logo() As System.Drawing.Bitmap + Get + Dim obj As Object = ResourceManager.GetObject("Klipphausen_Logo", resourceCulture) + Return CType(obj,System.Drawing.Bitmap) + End Get + End Property + ''' ''' Sucht eine lokalisierte Ressource vom Typ System.Byte[]. ''' diff --git a/SDL/My Project/Resources.resx b/SDL/My Project/Resources.resx index acabd60d..83fe8fd8 100644 --- a/SDL/My Project/Resources.resx +++ b/SDL/My Project/Resources.resx @@ -997,4 +997,7 @@ ..\Resources\Ustveu_Rechnungsanlagen_BE.xlsx;System.Byte[], mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + ..\Resources\Klipphausen_Logo.jpg;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + \ No newline at end of file diff --git a/SDL/Resources/Klipphausen_Logo.jpg b/SDL/Resources/Klipphausen_Logo.jpg new file mode 100644 index 00000000..aacb8048 Binary files /dev/null and b/SDL/Resources/Klipphausen_Logo.jpg differ diff --git a/SDL/SDL.vbproj b/SDL/SDL.vbproj index b1be67fd..337ae810 100644 --- a/SDL/SDL.vbproj +++ b/SDL/SDL.vbproj @@ -449,8 +449,10 @@ True ..\..\..\..\..\..\..\Windows\assembly\GAC_MSIL\Microsoft.Office.Interop.Excel\15.0.0.0__71e9bce111e9429c\Microsoft.Office.Interop.Excel.dll - + + False True + ..\..\..\..\..\..\..\Program Files (x86)\Microsoft Visual Studio\Shared\Visual Studio Tools for Office\PIA\Office15\Microsoft.Office.Interop.Outlook.dll True @@ -1253,6 +1255,12 @@ Component + + rptPOS_ZNB.vb + + + Component + usrcntlFremdrechnungen.vb @@ -3881,6 +3889,9 @@ rptIDS_Anhang.vb + + rptPOS_ZNB.vb + rptPLOSE_CustomerConsortio.vb @@ -5519,6 +5530,7 @@ Always + Always diff --git a/SDL/SMS/frmSendSMS.vb b/SDL/SMS/frmSendSMS.vb index 73aadd78..24fe5528 100644 --- a/SDL/SMS/frmSendSMS.vb +++ b/SDL/SMS/frmSendSMS.vb @@ -226,7 +226,7 @@ Public Class frmSendSMS End Try End Sub - Sub fillTXT(s, Sprache, Optional lkwTxt = "LKW/TIR: ", Optional templateID = "", Optional template_ParamMFGAdditional = "", Optional useNewTemplate = False) + Sub fillTXT(s, Sprache, Optional lkwTxt = "LKW/TIR: ", Optional templateID = "", Optional template_ParamMFGAdditional = "") Dim FirmaTmp = cboFirma._value If FirmaTmp <> "VERAG" Then txtNachricht.Text = s.ToString.Replace("VERAG", FirmaTmp.Replace("FRONTOFFICE", "FRONT-OFFICE SUBEN")) @@ -245,7 +245,7 @@ Public Class frmSendSMS 'WENN WHATSAPP Me.templateID = getTemplateID(templateID, Sprache) - If useNewTemplate Then + If useNewTemplates Then template_ParamMFGAdditional = "" End If Me.template_ParamMFGAdditional = template_ParamMFGAdditional @@ -374,55 +374,55 @@ Public Class frmSendSMS End Sub Private Sub Button16_Click(sender As Object, e As EventArgs) Handles Button16.Click - fillTXT("Va rog sa va prezentati la sediul firmei VERAG!", "TRUCK: ", template_RO, "") + fillTXT("Va rog sa va prezentati la sediul firmei VERAG!", "RO", "TRUCK: ", template_RO, "") End Sub Private Sub Button15_Click(sender As Object, e As EventArgs) Handles Button15.Click - fillTXT("Va rog sa va prezentati la sediul firmei VERAG cu Buletin/ Pasaport!", "TRUCK: ", template_RO, " cu Buletin/ Pasaport") + fillTXT("Va rog sa va prezentati la sediul firmei VERAG cu Buletin/ Pasaport!", "RO", "TRUCK: ", template_RO, " cu Buletin/ Pasaport") End Sub Private Sub Button14_Click(sender As Object, e As EventArgs) Handles Button14.Click - fillTXT("Va rog sa va prezentati la sediul firmei VERAG cu Stampila firmei!", "TRUCK: ", template_RO, " cu Stampila firmei") + fillTXT("Va rog sa va prezentati la sediul firmei VERAG cu Stampila firmei!", "RO", "TRUCK: ", template_RO, " cu Stampila firmei") End Sub Private Sub Button13_Click(sender As Object, e As EventArgs) Handles Button13.Click - fillTXT("Va rog sa va prezentati la sediul firmei VERAG cu suma in Cash: € ", "TRUCK: ", template_RO, " cu suma in Cash: € ") + fillTXT("Va rog sa va prezentati la sediul firmei VERAG cu suma in Cash: € ", "RO", "TRUCK: ", template_RO, " cu suma in Cash: € ") End Sub Private Sub Button20_Click(sender As Object, e As EventArgs) Handles Button20.Click - fillTXT("Моля, елате във VERAG!", "TRUCK: ", template_BG) + fillTXT("Моля, елате във VERAG!", "BG", "TRUCK: ", template_BG) End Sub Private Sub Button19_Click(sender As Object, e As EventArgs) Handles Button19.Click - fillTXT("Моля, елате във VERAG и вземете паспорта си!", "TRUCK: ", template_BG, " и вземете паспорта си") + fillTXT("Моля, елате във VERAG и вземете паспорта си!", "BG", "TRUCK: ", template_BG, " и вземете паспорта си") End Sub Private Sub Button18_Click(sender As Object, e As EventArgs) Handles Button18.Click - fillTXT("Моля, елате във VERAG и вземете печата си!", "TRUCK: ", template_BG, " и вземете печата си") + fillTXT("Моля, елате във VERAG и вземете печата си!", "BG", "TRUCK: ", template_BG, " и вземете печата си") End Sub Private Sub Button17_Click(sender As Object, e As EventArgs) Handles Button17.Click - fillTXT("Моля, елате във VERAG и вземете пари в борй в размер на: € ", "TRUCK: ", template_BG, " и вземете пари в борй в размер на: € ") + fillTXT("Моля, елате във VERAG и вземете пари в борй в размер на: € ", "BG", "TRUCK: ", template_BG, " и вземете пари в борй в размер на: € ") End Sub Private Sub Button25_Click(sender As Object, e As EventArgs) Handles Button25.Click - fillTXT("Bitte Kuvert beim Zoll holen und zu VERAG kommen!", "LKW: ", template_DE, "Bitte Kuvert beim Zoll holen!") + fillTXT("Bitte Kuvert beim Zoll holen und zu VERAG kommen!", "DE", "LKW: ", template_DE, "Bitte Kuvert beim Zoll holen!") End Sub Private Sub Button24_Click(sender As Object, e As EventArgs) Handles Button24.Click - fillTXT("Gümrükten zarfini al VERAG'a gel lütfen", "TIR: ", template_TR, "Gümrükten zarfini al gel lütfen") + fillTXT("Gümrükten zarfini al VERAG'a gel lütfen", "TR", "TIR: ", template_TR, "Gümrükten zarfini al gel lütfen") End Sub Private Sub Button23_Click(sender As Object, e As EventArgs) Handles Button23.Click - fillTXT("Idi na carinu, uzmi kovertu, i dodji u verag", "TRUCK: ", template_YU, "Idi na carinu, uzmi kovertu") + fillTXT("Idi na carinu, uzmi kovertu, i dodji u verag", "YU", "TRUCK: ", template_YU, "Idi na carinu, uzmi kovertu") End Sub Private Sub Button22_Click(sender As Object, e As EventArgs) Handles Button22.Click - fillTXT("Vă rugăm să ridicați plicul de la vamă și să veniți la VERAG", "TRUCK: ", template_RO, "Vă rugăm să ridicați plicul de la vamă și să veniți la ") + fillTXT("Vă rugăm să ridicați plicul de la vamă și să veniți la VERAG", "RO", "TRUCK: ", template_RO, "Vă rugăm să ridicați plicul de la vamă și să veniți la ") End Sub Private Sub Button21_Click(sender As Object, e As EventArgs) Handles Button21.Click - fillTXT("Molya, vzemete plika ot mitnitsata i elate vŭv VERAG", "TRUCK: ", template_BG, "Molya, vzemete plika ot mitnitsata i elate vŭv") + fillTXT("Molya, vzemete plika ot mitnitsata i elate vŭv VERAG", "BG", "TRUCK: ", template_BG, "Molya, vzemete plika ot mitnitsata i elate vŭv") End Sub Private Sub btnSndWhatsApp_Click(sender As Object, e As EventArgs) Handles btnSndWhatsApp.Click @@ -458,128 +458,128 @@ Public Class frmSendSMS End Sub Private Sub Button31_Click(sender As Object, e As EventArgs) Handles Button31.Click - If MyRichTextBox1.Text <> "" Then fillTXT("Bitte zu VERAG kommen " & MyRichTextBox1.Text, "", template_DE, MyRichTextBox1.Text) + If MyRichTextBox1.Text <> "" Then fillTXT("Bitte zu VERAG kommen " & MyRichTextBox1.Text, "DE", "", template_DE, MyRichTextBox1.Text) End Sub Private Sub Button30_Click(sender As Object, e As EventArgs) Handles Button30.Click - If MyRichTextBox1.Text <> "" Then fillTXT("VERAG ofise geliniz " & MyRichTextBox1.Text, "", template_TR, MyRichTextBox1.Text) + If MyRichTextBox1.Text <> "" Then fillTXT("VERAG ofise geliniz " & MyRichTextBox1.Text, "TR", "", template_TR, MyRichTextBox1.Text) End Sub Private Sub Button29_Click(sender As Object, e As EventArgs) Handles Button29.Click - If MyRichTextBox1.Text <> "" Then fillTXT("BMolim Vas dođite u VERAG " & MyRichTextBox1.Text, "", template_YU, MyRichTextBox1.Text) + If MyRichTextBox1.Text <> "" Then fillTXT("Molim Vas dođite u VERAG " & MyRichTextBox1.Text, "YU", "", template_YU, MyRichTextBox1.Text) End Sub Private Sub Button28_Click(sender As Object, e As EventArgs) Handles Button28.Click - If MyRichTextBox1.Text <> "" Then fillTXT("Va rog sa va prezentati la sediul firmei VERAG " & MyRichTextBox1.Text, "", template_RO, MyRichTextBox1.Text) + If MyRichTextBox1.Text <> "" Then fillTXT("Va rog sa va prezentati la sediul firmei VERAG " & MyRichTextBox1.Text, "RO", "", template_RO, MyRichTextBox1.Text) End Sub Private Sub Button27_Click(sender As Object, e As EventArgs) Handles Button27.Click - If MyRichTextBox1.Text <> "" Then fillTXT("Моля, елате във VERAG " & MyRichTextBox1.Text, "", template_BG, MyRichTextBox1.Text) + If MyRichTextBox1.Text <> "" Then fillTXT("Моля, елате във VERAG " & MyRichTextBox1.Text, "BG", "", template_BG, MyRichTextBox1.Text) End Sub Private Sub Button35_Click(sender As Object, e As EventArgs) Handles Button35.Click - fillTXT("Lütfen Mühür/Mühürleri söküp VERAG ofise getiriniz!", "TIR: ", template_TR, "Lütfen Mühür/Mühürleri söküp VERAG ofise getiriniz!") + fillTXT("Lütfen Mühür/Mühürleri söküp VERAG ofise getiriniz!", "TR", "TIR: ", template_TR, "Lütfen Mühür/Mühürleri söküp VERAG ofise getiriniz!") End Sub Private Sub Button36_Click(sender As Object, e As EventArgs) Handles Button36.Click - fillTXT("Bitte entfernen Sie das Siegel bzw. die Siegel und bringen Sie sie zum VERAG-Büro!", "LKW: ", template_DE, "Bitte entfernen Sie das Siegel bzw. die Siegel und bringen Sie sie zum VERAG-Büro!") + fillTXT("Bitte entfernen Sie das Siegel bzw. die Siegel und bringen Sie sie zum VERAG-Büro!", "DE", "LKW: ", template_DE, "Bitte entfernen Sie das Siegel bzw. die Siegel und bringen Sie sie zum VERAG-Büro!") End Sub Private Sub Button34_Click(sender As Object, e As EventArgs) Handles Button34.Click - fillTXT("Molimo uklonite pečat i odnesite ga u VERAG!", "TIR: ", template_YU, "Molimo uklonite pečat i odnesite ga u VERAG!") + fillTXT("Molimo uklonite pečat i odnesite ga u VERAG!", "YU", "TIR: ", template_YU, "Molimo uklonite pečat i odnesite ga u VERAG!") End Sub Private Sub Button33_Click(sender As Object, e As EventArgs) Handles Button33.Click - fillTXT("Vă rugăm să îndepărtați sigiliul și să îl duceți la VERAG!", "TIR: ", template_RO, "Vă rugăm să îndepărtați sigiliul și să îl duceți la VERAG!") + fillTXT("Vă rugăm să îndepărtați sigiliul și să îl duceți la VERAG!", "RO", "TIR: ", template_RO, "Vă rugăm să îndepărtați sigiliul și să îl duceți la VERAG!") End Sub Private Sub Button32_Click(sender As Object, e As EventArgs) Handles Button32.Click - fillTXT("Моля, махнете печата и го занесете в VERAG!", "TIR: ", template_BG, "Моля, махнете печата и го занесете в VERAG!") + fillTXT("Моля, махнете печата и го занесете в VERAG!", "BG", "TIR: ", template_BG, "Моля, махнете печата и го занесете в VERAG!") End Sub Private Sub Button37_Click(sender As Object, e As EventArgs) Handles Button37.Click - fillTXT("Ве молиме дојдете во VERAG!", "LKW: ", template_MK) + fillTXT("Ве молиме дојдете во VERAG!", "MK", "LKW: ", template_MK) End Sub Private Sub Button38_Click(sender As Object, e As EventArgs) Handles Button38.Click - fillTXT("Ве молиме дојдете во VERAG и понесете го вашиот пасош!", "LKW: ", template_MK) + fillTXT("Ве молиме дојдете во VERAG и понесете го вашиот пасош!", "MK", "LKW: ", template_MK) End Sub Private Sub Button39_Click(sender As Object, e As EventArgs) Handles Button39.Click - fillTXT("Ве молиме дојдете во VERAG и подигнете го печатот!", "LKW: ", template_MK, " и земи го печатот со себе!") + fillTXT("Ве молиме дојдете во VERAG и подигнете го печатот!", "MK", "LKW: ", template_MK, " и земи го печатот со себе!") End Sub Private Sub Button40_Click(sender As Object, e As EventArgs) Handles Button40.Click - fillTXT("ВВе молиме дојдете во VERAG и понесете готовина со себе: € ", "LKW: ", template_MK, " и понесете готовина со себе: € ") + fillTXT("Ве молиме дојдете во VERAG и понесете готовина со себе: € ", "MK", "LKW: ", template_MK, " и понесете готовина со себе: € ") End Sub Private Sub Button41_Click(sender As Object, e As EventArgs) Handles Button41.Click - fillTXT("Ве молиме подигнете го пликот од царината и дојдете во VERAG!", "LKW: ", template_MK, "Ве молиме подигнете го пликот од царината!") + fillTXT("Ве молиме подигнете го пликот од царината и дојдете во VERAG!", "MK", "LKW: ", template_MK, "Ве молиме подигнете го пликот од царината!") End Sub Private Sub Button42_Click(sender As Object, e As EventArgs) Handles Button42.Click - fillTXT("Ве молиме отстранете ги пломбите и однесете ги во канцеларијата на VERAG!", "LKW: ", template_MK, "Ве молиме отстранете ги пломбите и однесете ги во канцеларијата на VERAG.") + fillTXT("Ве молиме отстранете ги пломбите и однесете ги во канцеларијата на VERAG!", "MK", "LKW: ", template_MK, "Ве молиме отстранете ги пломбите и однесете ги во канцеларијата на VERAG.") End Sub Private Sub Button43_Click(sender As Object, e As EventArgs) Handles Button43.Click - If MyRichTextBox1.Text <> "" Then fillTXT("Ве молиме дојдете во VERAG " & MyRichTextBox1.Text, "", template_DE, MyRichTextBox1.Text) + If MyRichTextBox1.Text <> "" Then fillTXT("Ве молиме дојдете во VERAG " & MyRichTextBox1.Text, "MK", "", template_MK, MyRichTextBox1.Text) End Sub Private Sub Button44_Click(sender As Object, e As EventArgs) Handles Button44.Click - fillTXT("Please come to VERAG!", "LKW: ", template_EN) + fillTXT("Please come to VERAG!", "EN", "LKW: ", template_EN) End Sub Private Sub Button47_Click(sender As Object, e As EventArgs) Handles Button47.Click - fillTXT("Please come to VERAG and bring your passport!", "LKW: ", template_EN, " and bring your passport!") + fillTXT("Please come to VERAG and bring your passport!", "EN", "LKW: ", template_EN, " and bring your passport!") End Sub Private Sub Button49_Click(sender As Object, e As EventArgs) Handles Button49.Click - fillTXT("Please come to VERAG and collect the STAMP!", "LKW: ", template_EN, " and collect the STAMP!") + fillTXT("Please come to VERAG and collect the STAMP!", "EN", "LKW: ", template_EN, " and collect the STAMP!") End Sub Private Sub Button51_Click(sender As Object, e As EventArgs) Handles Button51.Click - fillTXT("Please come to VERAG and bring cash with you: € ", "LKW: ", template_EN, " and bring cash with you: € ") + fillTXT("Please come to VERAG and bring cash with you: € ", "EN", "LKW: ", template_EN, " and bring cash with you: € ") End Sub Private Sub Button53_Click(sender As Object, e As EventArgs) Handles Button53.Click - fillTXT("Please collect the envelope from customs and come to VERAG!", "LKW: ", template_EN, "Please collect the envelope from customs!") + fillTXT("Please collect the envelope from customs and come to VERAG!", "EN", "LKW: ", template_EN, "Please collect the envelope from customs!") End Sub Private Sub Button55_Click(sender As Object, e As EventArgs) Handles Button55.Click - fillTXT("Please remove the seal(s) and take them to the VERAG office!", "LKW: ", template_EN, "Please remove the seal(s) and take them to the VERAG office!") + fillTXT("Please remove the seal(s) and take them to the VERAG office!", "EN", "LKW: ", template_EN, "Please remove the seal(s) and take them to the VERAG office!") End Sub Private Sub Button56_Click(sender As Object, e As EventArgs) Handles Button56.Click - If MyRichTextBox1.Text <> "" Then fillTXT("Please come to VERAG " & MyRichTextBox1.Text, "", template_EN, MyRichTextBox1.Text) + If MyRichTextBox1.Text <> "" Then fillTXT("Please come to VERAG " & MyRichTextBox1.Text, "EN", "", template_EN, MyRichTextBox1.Text) End Sub Private Sub Button57_Click(sender As Object, e As EventArgs) Handles Button57.Click - If MyRichTextBox1.Text <> "" Then fillTXT("Si prega di recarsi presso VERAG " & MyRichTextBox1.Text, "", template_EN, MyRichTextBox1.Text) + If MyRichTextBox1.Text <> "" Then fillTXT("Si prega di recarsi presso VERAG " & MyRichTextBox1.Text, "IT", "", template_IT, MyRichTextBox1.Text) End Sub Private Sub Button45_Click(sender As Object, e As EventArgs) Handles Button45.Click - fillTXT("Si prega di recarsi presso VERAG!", "LKW: ", template_IT) + fillTXT("Si prega di recarsi presso VERAG!", "IT", "LKW: ", template_IT) End Sub Private Sub Button46_Click(sender As Object, e As EventArgs) Handles Button46.Click - fillTXT("Ti preghiamo di recarti presso VERAG e di portare con te il passaporto!", "LKW: ", template_IT, " e porta con te il passaporto!") + fillTXT("Ti preghiamo di recarti presso VERAG e di portare con te il passaporto!", "IT", "LKW: ", template_IT, " e porta con te il passaporto!") End Sub Private Sub Button48_Click(sender As Object, e As EventArgs) Handles Button48.Click - fillTXT("Ti preghiamo di recarti presso VERAG e ritirare il TIMBRO!", "LKW: ", template_IT, " e ritira il TIMBRO!") + fillTXT("Ti preghiamo di recarti presso VERAG e ritirare il TIMBRO!", "IT", "LKW: ", template_IT, " e ritira il TIMBRO!") End Sub Private Sub Button50_Click(sender As Object, e As EventArgs) Handles Button50.Click - fillTXT("Ti preghiamo di venire da VERAG e di portare con te dei contanti: € ", "LKW: ", template_IT, " e portate con voi dei contanti: € ") + fillTXT("Ti preghiamo di venire da VERAG e di portare con te dei contanti: € ", "IT", "LKW: ", template_IT, " e portate con voi dei contanti: € ") End Sub Private Sub Button52_Click(sender As Object, e As EventArgs) Handles Button52.Click - fillTXT("Ti preghiamo di ritirare la busta presso la dogana e di recarti presso VERAG!", "LKW: ", template_IT, "Si prega di ritirare la busta presso la dogana!") + fillTXT("Ti preghiamo di ritirare la busta presso la dogana e di recarti presso VERAG!", "IT", "LKW: ", template_IT, "Si prega di ritirare la busta presso la dogana!") End Sub Private Sub Button54_Click(sender As Object, e As EventArgs) Handles Button54.Click - fillTXT("Si prega di rimuovere i sigilli e di consegnarli all'ufficio VERAG!", "LKW: ", template_IT, "Si prega di rimuovere i sigilli e di consegnarli all'ufficio VERAG!") + fillTXT("Si prega di rimuovere i sigilli e di consegnarli all'ufficio VERAG!", "IT", "LKW: ", template_IT, "Si prega di rimuovere i sigilli e di consegnarli all'ufficio VERAG!") End Sub End Class diff --git a/SDL/SMS/usrCntlSMS.Designer.vb b/SDL/SMS/usrCntlSMS.Designer.vb index 7a1bbe55..e498600d 100644 --- a/SDL/SMS/usrCntlSMS.Designer.vb +++ b/SDL/SMS/usrCntlSMS.Designer.vb @@ -33,6 +33,7 @@ Partial Class usrCntlSMS Me.Button6 = New System.Windows.Forms.Button() Me.Button5 = New System.Windows.Forms.Button() Me.pnloptions = New System.Windows.Forms.Panel() + Me.Button3 = New System.Windows.Forms.Button() Me.Button1 = New System.Windows.Forms.Button() Me.Button2 = New System.Windows.Forms.Button() Me.FlatButton7 = New System.Windows.Forms.Button() @@ -56,13 +57,16 @@ Partial Class usrCntlSMS Me.Label12 = New System.Windows.Forms.Label() Me.DateTimePicker1 = New System.Windows.Forms.DateTimePicker() Me.pnl = New System.Windows.Forms.Panel() + Me.Label5 = New System.Windows.Forms.Label() + Me.lblgesendetOK = New System.Windows.Forms.Label() + Me.Label3 = New System.Windows.Forms.Label() Me.cboAbsedner = New VERAG_PROG_ALLGEMEIN.MyComboBox() Me.Label1 = New System.Windows.Forms.Label() Me.Label8 = New System.Windows.Forms.Label() Me.cntxtOptionen = New System.Windows.Forms.ContextMenuStrip(Me.components) Me.AbgeholtToolStripMenuItem = New System.Windows.Forms.ToolStripMenuItem() Me.StornoToolStripMenuItem = New System.Windows.Forms.ToolStripMenuItem() - Me.Button3 = New System.Windows.Forms.Button() + Me.lblFehlerhaft = New System.Windows.Forms.Label() Me.pnloptions.SuspendLayout() Me.pnlTop.SuspendLayout() Me.Panel1.SuspendLayout() @@ -80,7 +84,7 @@ Partial Class usrCntlSMS Me.cboSachbearbeiter.AutoCompleteSource = System.Windows.Forms.AutoCompleteSource.ListItems Me.cboSachbearbeiter.Font = New System.Drawing.Font("Microsoft Sans Serif", 10.0!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) Me.cboSachbearbeiter.FormattingEnabled = True - Me.cboSachbearbeiter.Location = New System.Drawing.Point(435, 78) + Me.cboSachbearbeiter.Location = New System.Drawing.Point(444, 77) Me.cboSachbearbeiter.Name = "cboSachbearbeiter" Me.cboSachbearbeiter.Size = New System.Drawing.Size(168, 24) Me.cboSachbearbeiter.TabIndex = 21 @@ -90,10 +94,12 @@ Partial Class usrCntlSMS Me.txtAbfertDatBis._DateTimeOnly = False Me.txtAbfertDatBis._numbersOnly = False Me.txtAbfertDatBis._numbersOnlyKommastellen = "" + Me.txtAbfertDatBis._numbersOnlyTrennzeichen = True Me.txtAbfertDatBis._Prozent = False Me.txtAbfertDatBis._ShortDateNew = True Me.txtAbfertDatBis._ShortDateOnly = False Me.txtAbfertDatBis._TimeOnly = False + Me.txtAbfertDatBis._TimeOnly_Seconds = False Me.txtAbfertDatBis._value = "" Me.txtAbfertDatBis._Waehrung = False Me.txtAbfertDatBis._WaehrungZeichen = True @@ -113,10 +119,12 @@ Partial Class usrCntlSMS Me.txtAbfertDat._DateTimeOnly = False Me.txtAbfertDat._numbersOnly = False Me.txtAbfertDat._numbersOnlyKommastellen = "" + Me.txtAbfertDat._numbersOnlyTrennzeichen = True Me.txtAbfertDat._Prozent = False Me.txtAbfertDat._ShortDateNew = True Me.txtAbfertDat._ShortDateOnly = False Me.txtAbfertDat._TimeOnly = False + Me.txtAbfertDat._TimeOnly_Seconds = False Me.txtAbfertDat._value = "" Me.txtAbfertDat._Waehrung = False Me.txtAbfertDat._WaehrungZeichen = True @@ -148,16 +156,18 @@ Partial Class usrCntlSMS Me.txtHandyNr._DateTimeOnly = False Me.txtHandyNr._numbersOnly = False Me.txtHandyNr._numbersOnlyKommastellen = "" + Me.txtHandyNr._numbersOnlyTrennzeichen = True Me.txtHandyNr._Prozent = False Me.txtHandyNr._ShortDateNew = False Me.txtHandyNr._ShortDateOnly = False Me.txtHandyNr._TimeOnly = False + Me.txtHandyNr._TimeOnly_Seconds = False Me.txtHandyNr._value = "" Me.txtHandyNr._Waehrung = False Me.txtHandyNr._WaehrungZeichen = True Me.txtHandyNr.Font = New System.Drawing.Font("Microsoft Sans Serif", 10.0!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) Me.txtHandyNr.ForeColor = System.Drawing.Color.Black - Me.txtHandyNr.Location = New System.Drawing.Point(435, 57) + Me.txtHandyNr.Location = New System.Drawing.Point(444, 52) Me.txtHandyNr.MaxLineLength = -1 Me.txtHandyNr.MaxLines_Warning = "" Me.txtHandyNr.MaxLines_Warning_Label = Nothing @@ -225,6 +235,19 @@ Partial Class usrCntlSMS Me.pnloptions.Size = New System.Drawing.Size(1111, 59) Me.pnloptions.TabIndex = 2 ' + 'Button3 + ' + Me.Button3.Anchor = CType((System.Windows.Forms.AnchorStyles.Bottom Or System.Windows.Forms.AnchorStyles.Left), System.Windows.Forms.AnchorStyles) + Me.Button3.FlatStyle = System.Windows.Forms.FlatStyle.Flat + Me.Button3.ImageAlign = System.Drawing.ContentAlignment.MiddleLeft + Me.Button3.Location = New System.Drawing.Point(226, 5) + Me.Button3.Margin = New System.Windows.Forms.Padding(0) + Me.Button3.Name = "Button3" + Me.Button3.Size = New System.Drawing.Size(104, 45) + Me.Button3.TabIndex = 10 + Me.Button3.Text = "Status Link" + Me.Button3.UseVisualStyleBackColor = True + ' 'Button1 ' Me.Button1.Anchor = CType((System.Windows.Forms.AnchorStyles.Bottom Or System.Windows.Forms.AnchorStyles.Left), System.Windows.Forms.AnchorStyles) @@ -284,10 +307,12 @@ Partial Class usrCntlSMS Me.txtMaxSrch._DateTimeOnly = False Me.txtMaxSrch._numbersOnly = True Me.txtMaxSrch._numbersOnlyKommastellen = "" + Me.txtMaxSrch._numbersOnlyTrennzeichen = True Me.txtMaxSrch._Prozent = False Me.txtMaxSrch._ShortDateNew = False Me.txtMaxSrch._ShortDateOnly = False Me.txtMaxSrch._TimeOnly = False + Me.txtMaxSrch._TimeOnly_Seconds = False Me.txtMaxSrch._value = "" Me.txtMaxSrch._Waehrung = False Me.txtMaxSrch._WaehrungZeichen = True @@ -523,6 +548,10 @@ Partial Class usrCntlSMS ' Me.pnl.BackColor = System.Drawing.Color.WhiteSmoke Me.pnl.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle + Me.pnl.Controls.Add(Me.lblFehlerhaft) + Me.pnl.Controls.Add(Me.Label5) + Me.pnl.Controls.Add(Me.lblgesendetOK) + Me.pnl.Controls.Add(Me.Label3) Me.pnl.Controls.Add(Me.cboAbsedner) Me.pnl.Controls.Add(Me.Label1) Me.pnl.Controls.Add(Me.Label8) @@ -553,6 +582,36 @@ Partial Class usrCntlSMS Me.pnl.Size = New System.Drawing.Size(1111, 140) Me.pnl.TabIndex = 0 ' + 'Label5 + ' + Me.Label5.AutoSize = True + Me.Label5.Font = New System.Drawing.Font("Microsoft Sans Serif", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.Label5.Location = New System.Drawing.Point(631, 109) + Me.Label5.Name = "Label5" + Me.Label5.Size = New System.Drawing.Size(61, 13) + Me.Label5.TabIndex = 39 + Me.Label5.Text = "fehlerhaft" + ' + 'lblgesendetOK + ' + Me.lblgesendetOK.AutoSize = True + Me.lblgesendetOK.Font = New System.Drawing.Font("Microsoft Sans Serif", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.lblgesendetOK.Location = New System.Drawing.Point(787, 92) + Me.lblgesendetOK.Name = "lblgesendetOK" + Me.lblgesendetOK.Size = New System.Drawing.Size(11, 13) + Me.lblgesendetOK.TabIndex = 38 + Me.lblgesendetOK.Text = "." + ' + 'Label3 + ' + Me.Label3.AutoSize = True + Me.Label3.Font = New System.Drawing.Font("Microsoft Sans Serif", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.Label3.Location = New System.Drawing.Point(631, 87) + Me.Label3.Name = "Label3" + Me.Label3.Size = New System.Drawing.Size(95, 13) + Me.Label3.TabIndex = 37 + Me.Label3.Text = "erfolgreich ges." + ' 'cboAbsedner ' Me.cboAbsedner._allowedValuesFreiText = Nothing @@ -607,18 +666,15 @@ Partial Class usrCntlSMS Me.StornoToolStripMenuItem.Size = New System.Drawing.Size(123, 22) Me.StornoToolStripMenuItem.Text = "Storno" ' - 'Button3 + 'lblFehlerhaft ' - Me.Button3.Anchor = CType((System.Windows.Forms.AnchorStyles.Bottom Or System.Windows.Forms.AnchorStyles.Left), System.Windows.Forms.AnchorStyles) - Me.Button3.FlatStyle = System.Windows.Forms.FlatStyle.Flat - Me.Button3.ImageAlign = System.Drawing.ContentAlignment.MiddleLeft - Me.Button3.Location = New System.Drawing.Point(226, 5) - Me.Button3.Margin = New System.Windows.Forms.Padding(0) - Me.Button3.Name = "Button3" - Me.Button3.Size = New System.Drawing.Size(104, 45) - Me.Button3.TabIndex = 10 - Me.Button3.Text = "Status Link" - Me.Button3.UseVisualStyleBackColor = True + Me.lblFehlerhaft.AutoSize = True + Me.lblFehlerhaft.Font = New System.Drawing.Font("Microsoft Sans Serif", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.lblFehlerhaft.Location = New System.Drawing.Point(787, 113) + Me.lblFehlerhaft.Name = "lblFehlerhaft" + Me.lblFehlerhaft.Size = New System.Drawing.Size(11, 13) + Me.lblFehlerhaft.TabIndex = 42 + Me.lblFehlerhaft.Text = "." ' 'usrCntlSMS ' @@ -680,4 +736,8 @@ Partial Class usrCntlSMS Friend WithEvents Label1 As System.Windows.Forms.Label Friend WithEvents Button1 As Button Friend WithEvents Button3 As Button + Friend WithEvents lblgesendetOK As Label + Friend WithEvents Label3 As Label + Friend WithEvents Label5 As Label + Friend WithEvents lblFehlerhaft As Label End Class diff --git a/SDL/SMS/usrCntlSMS.vb b/SDL/SMS/usrCntlSMS.vb index 9d08e644..660d4e8b 100644 --- a/SDL/SMS/usrCntlSMS.vb +++ b/SDL/SMS/usrCntlSMS.vb @@ -1,4 +1,5 @@ Imports com.esendex.sdk.sent +Imports java.rmi.dgc Public Class usrCntlSMS @@ -175,6 +176,19 @@ Public Class usrCntlSMS End With showDGV() + Dim OK As Integer = 0 + Dim failed As Integer = 0 + For Each r As DataGridViewRow In MyDatagridview1.Rows + If r.Cells("Status").Value = "OK" Then + OK += 1 + ElseIf r.Cells("Status").Value = "FEHLER" Then + failed += 1 + End If + Next + + lblgesendetOK.Text = OK & " / " & MyDatagridview1.Rows.Count + lblFehlerhaft.Text = failed & " / " & MyDatagridview1.Rows.Count + Me.Cursor = Cursors.Default End Sub @@ -399,5 +413,7 @@ Public Class usrCntlSMS End If End Sub + + End Class diff --git a/SDL/Speditionsbuch/usrCntlSpeditionsBuchSuche.Designer.vb b/SDL/Speditionsbuch/usrCntlSpeditionsBuchSuche.Designer.vb index 62637f16..1a20f447 100644 --- a/SDL/Speditionsbuch/usrCntlSpeditionsBuchSuche.Designer.vb +++ b/SDL/Speditionsbuch/usrCntlSpeditionsBuchSuche.Designer.vb @@ -23,12 +23,12 @@ Partial Class usrCntlSpeditionsBuchSuche Private Sub InitializeComponent() Me.components = New System.ComponentModel.Container() + Dim DataGridViewCellStyle4 As System.Windows.Forms.DataGridViewCellStyle = New System.Windows.Forms.DataGridViewCellStyle() + 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 DataGridViewCellStyle7 As System.Windows.Forms.DataGridViewCellStyle = New System.Windows.Forms.DataGridViewCellStyle() Dim DataGridViewCellStyle8 As System.Windows.Forms.DataGridViewCellStyle = New System.Windows.Forms.DataGridViewCellStyle() Dim DataGridViewCellStyle9 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() - Dim DataGridViewCellStyle3 As System.Windows.Forms.DataGridViewCellStyle = New System.Windows.Forms.DataGridViewCellStyle() Dim resources As System.ComponentModel.ComponentResourceManager = New System.ComponentModel.ComponentResourceManager(GetType(usrCntlSpeditionsBuchSuche)) Me.TabPage1 = New System.Windows.Forms.TabPage() Me.cntxtCntxtSpeditionsbuch = New System.Windows.Forms.ContextMenuStrip(Me.components) @@ -48,6 +48,10 @@ Partial Class usrCntlSpeditionsBuchSuche Me.lblAbfertigungsarten = New System.Windows.Forms.Label() Me.Label17 = New System.Windows.Forms.Label() Me.pnlAnzeige = New System.Windows.Forms.Panel() + Me.btnHandling = New System.Windows.Forms.Button() + Me.cboHandlingssatz = New VERAG_PROG_ALLGEMEIN.MyComboBox() + Me.cboHandlingssatz_AMBAR = New VERAG_PROG_ALLGEMEIN.MyComboBox() + Me.btnHandling_AMBAR = New System.Windows.Forms.Button() Me.txtFiskalEndempfaenger = New VERAG_PROG_ALLGEMEIN.MyTextBox() Me.DataGridView = New VERAG_PROG_ALLGEMEIN.MyDatagridview(Me.components) Me.dgvLKW = New VERAG_PROG_ALLGEMEIN.MyDatagridview(Me.components) @@ -76,11 +80,6 @@ Partial Class usrCntlSpeditionsBuchSuche Me.btnSpedBuchEinnahmen = New System.Windows.Forms.Button() Me.pnlBerichte = New System.Windows.Forms.Panel() Me.CheckBox5 = New System.Windows.Forms.CheckBox() - Me.FlowLayoutPanel1 = New System.Windows.Forms.FlowLayoutPanel() - Me.btnHandling = New System.Windows.Forms.Button() - Me.cboHandlingssatz = New VERAG_PROG_ALLGEMEIN.MyComboBox() - Me.btnHandling_AMBAR = New System.Windows.Forms.Button() - Me.cboHandlingssatz_AMBAR = New VERAG_PROG_ALLGEMEIN.MyComboBox() Me.cbxHandlingAbrechnen = New System.Windows.Forms.CheckBox() Me.cbxDetailbericht = New System.Windows.Forms.CheckBox() Me.Button24 = New System.Windows.Forms.Button() @@ -218,6 +217,8 @@ Partial Class usrCntlSpeditionsBuchSuche Me.Label45 = New System.Windows.Forms.Label() Me.cboFilialeHandling = New VERAG_PROG_ALLGEMEIN.MyComboBox() Me.SplitContainer = New System.Windows.Forms.SplitContainer() + Me.pnlHandling = New System.Windows.Forms.Panel() + Me.pnlHandlingAmbar = New System.Windows.Forms.Panel() Me.cntxtCntxtSpeditionsbuch.SuspendLayout() Me.pnlRechts.SuspendLayout() Me.pnlAnzeige.SuspendLayout() @@ -227,7 +228,6 @@ Partial Class usrCntlSpeditionsBuchSuche Me.Panel3.SuspendLayout() Me.Panel1.SuspendLayout() Me.pnlBerichte.SuspendLayout() - Me.FlowLayoutPanel1.SuspendLayout() Me.MenuStrip1.SuspendLayout() Me.pnl.SuspendLayout() Me.MenuStrip2.SuspendLayout() @@ -243,6 +243,8 @@ Partial Class usrCntlSpeditionsBuchSuche Me.SplitContainer.Panel1.SuspendLayout() Me.SplitContainer.Panel2.SuspendLayout() Me.SplitContainer.SuspendLayout() + Me.pnlHandling.SuspendLayout() + Me.pnlHandlingAmbar.SuspendLayout() Me.SuspendLayout() ' 'TabPage1 @@ -428,6 +430,59 @@ Partial Class usrCntlSpeditionsBuchSuche Me.pnlAnzeige.Size = New System.Drawing.Size(1239, 452) Me.pnlAnzeige.TabIndex = 0 ' + 'btnHandling + ' + Me.btnHandling.FlatStyle = System.Windows.Forms.FlatStyle.Flat + Me.btnHandling.Image = Global.SDL.My.Resources.Resources.statistik_small + Me.btnHandling.ImageAlign = System.Drawing.ContentAlignment.MiddleLeft + Me.btnHandling.Location = New System.Drawing.Point(1, 2) + Me.btnHandling.Margin = New System.Windows.Forms.Padding(0) + Me.btnHandling.Name = "btnHandling" + Me.btnHandling.Size = New System.Drawing.Size(159, 28) + Me.btnHandling.TabIndex = 59 + Me.btnHandling.Text = "Handling an Außenstellen" + Me.btnHandling.TextAlign = System.Drawing.ContentAlignment.MiddleRight + Me.btnHandling.UseVisualStyleBackColor = True + ' + 'cboHandlingssatz + ' + Me.cboHandlingssatz._allowedValuesFreiText = Nothing + Me.cboHandlingssatz._allowFreiText = False + Me.cboHandlingssatz._value = "" + Me.cboHandlingssatz.DropDownWidth = 300 + Me.cboHandlingssatz.FormattingEnabled = True + Me.cboHandlingssatz.Location = New System.Drawing.Point(1, 32) + Me.cboHandlingssatz.Name = "cboHandlingssatz" + Me.cboHandlingssatz.Size = New System.Drawing.Size(159, 21) + Me.cboHandlingssatz.TabIndex = 60 + ' + 'cboHandlingssatz_AMBAR + ' + Me.cboHandlingssatz_AMBAR._allowedValuesFreiText = Nothing + Me.cboHandlingssatz_AMBAR._allowFreiText = False + Me.cboHandlingssatz_AMBAR._value = "" + Me.cboHandlingssatz_AMBAR.DropDownWidth = 250 + Me.cboHandlingssatz_AMBAR.Font = New System.Drawing.Font("Microsoft Tai Le", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.cboHandlingssatz_AMBAR.FormattingEnabled = True + Me.cboHandlingssatz_AMBAR.Location = New System.Drawing.Point(10, 38) + Me.cboHandlingssatz_AMBAR.Name = "cboHandlingssatz_AMBAR" + Me.cboHandlingssatz_AMBAR.Size = New System.Drawing.Size(128, 22) + Me.cboHandlingssatz_AMBAR.TabIndex = 53 + ' + 'btnHandling_AMBAR + ' + Me.btnHandling_AMBAR.FlatStyle = System.Windows.Forms.FlatStyle.Flat + Me.btnHandling_AMBAR.Image = Global.SDL.My.Resources.Resources.statistik_small + Me.btnHandling_AMBAR.ImageAlign = System.Drawing.ContentAlignment.MiddleLeft + Me.btnHandling_AMBAR.Location = New System.Drawing.Point(10, 9) + Me.btnHandling_AMBAR.Margin = New System.Windows.Forms.Padding(0) + Me.btnHandling_AMBAR.Name = "btnHandling_AMBAR" + Me.btnHandling_AMBAR.Size = New System.Drawing.Size(128, 28) + Me.btnHandling_AMBAR.TabIndex = 94 + Me.btnHandling_AMBAR.Text = "Handling (AMBAR)" + Me.btnHandling_AMBAR.TextAlign = System.Drawing.ContentAlignment.MiddleRight + Me.btnHandling_AMBAR.UseVisualStyleBackColor = True + ' 'txtFiskalEndempfaenger ' Me.txtFiskalEndempfaenger._DateTimeOnly = False @@ -462,35 +517,35 @@ Partial Class usrCntlSpeditionsBuchSuche Me.DataGridView.AllowUserToDeleteRows = False Me.DataGridView.AllowUserToOrderColumns = True Me.DataGridView.AllowUserToResizeRows = False - DataGridViewCellStyle7.Alignment = System.Windows.Forms.DataGridViewContentAlignment.MiddleLeft - DataGridViewCellStyle7.BackColor = System.Drawing.SystemColors.Control - DataGridViewCellStyle7.Font = New System.Drawing.Font("Microsoft Sans Serif", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) - DataGridViewCellStyle7.ForeColor = System.Drawing.SystemColors.WindowText - DataGridViewCellStyle7.SelectionBackColor = System.Drawing.SystemColors.Highlight - DataGridViewCellStyle7.SelectionForeColor = System.Drawing.SystemColors.HighlightText - DataGridViewCellStyle7.WrapMode = System.Windows.Forms.DataGridViewTriState.[True] - Me.DataGridView.ColumnHeadersDefaultCellStyle = DataGridViewCellStyle7 + DataGridViewCellStyle4.Alignment = System.Windows.Forms.DataGridViewContentAlignment.MiddleLeft + DataGridViewCellStyle4.BackColor = System.Drawing.SystemColors.Control + DataGridViewCellStyle4.Font = New System.Drawing.Font("Microsoft Sans Serif", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + DataGridViewCellStyle4.ForeColor = System.Drawing.SystemColors.WindowText + DataGridViewCellStyle4.SelectionBackColor = System.Drawing.SystemColors.Highlight + DataGridViewCellStyle4.SelectionForeColor = System.Drawing.SystemColors.HighlightText + DataGridViewCellStyle4.WrapMode = System.Windows.Forms.DataGridViewTriState.[True] + Me.DataGridView.ColumnHeadersDefaultCellStyle = DataGridViewCellStyle4 Me.DataGridView.ColumnHeadersHeightSizeMode = System.Windows.Forms.DataGridViewColumnHeadersHeightSizeMode.AutoSize Me.DataGridView.ContextMenuStrip = Me.cntxtCntxtSpeditionsbuch - DataGridViewCellStyle8.Alignment = System.Windows.Forms.DataGridViewContentAlignment.MiddleLeft - DataGridViewCellStyle8.BackColor = System.Drawing.SystemColors.Window - DataGridViewCellStyle8.Font = New System.Drawing.Font("Microsoft Sans Serif", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) - DataGridViewCellStyle8.ForeColor = System.Drawing.SystemColors.ControlText - DataGridViewCellStyle8.SelectionBackColor = System.Drawing.SystemColors.Highlight - DataGridViewCellStyle8.SelectionForeColor = System.Drawing.SystemColors.HighlightText - DataGridViewCellStyle8.WrapMode = System.Windows.Forms.DataGridViewTriState.[False] - Me.DataGridView.DefaultCellStyle = DataGridViewCellStyle8 + DataGridViewCellStyle5.Alignment = System.Windows.Forms.DataGridViewContentAlignment.MiddleLeft + DataGridViewCellStyle5.BackColor = System.Drawing.SystemColors.Window + DataGridViewCellStyle5.Font = New System.Drawing.Font("Microsoft Sans Serif", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + DataGridViewCellStyle5.ForeColor = System.Drawing.SystemColors.ControlText + DataGridViewCellStyle5.SelectionBackColor = System.Drawing.SystemColors.Highlight + DataGridViewCellStyle5.SelectionForeColor = System.Drawing.SystemColors.HighlightText + DataGridViewCellStyle5.WrapMode = System.Windows.Forms.DataGridViewTriState.[False] + Me.DataGridView.DefaultCellStyle = DataGridViewCellStyle5 Me.DataGridView.Dock = System.Windows.Forms.DockStyle.Fill Me.DataGridView.Location = New System.Drawing.Point(450, 0) Me.DataGridView.Name = "DataGridView" - DataGridViewCellStyle9.Alignment = System.Windows.Forms.DataGridViewContentAlignment.MiddleLeft - DataGridViewCellStyle9.BackColor = System.Drawing.SystemColors.Control - DataGridViewCellStyle9.Font = New System.Drawing.Font("Microsoft Sans Serif", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) - DataGridViewCellStyle9.ForeColor = System.Drawing.SystemColors.WindowText - DataGridViewCellStyle9.SelectionBackColor = System.Drawing.SystemColors.Highlight - DataGridViewCellStyle9.SelectionForeColor = System.Drawing.SystemColors.HighlightText - DataGridViewCellStyle9.WrapMode = System.Windows.Forms.DataGridViewTriState.[True] - Me.DataGridView.RowHeadersDefaultCellStyle = DataGridViewCellStyle9 + DataGridViewCellStyle6.Alignment = System.Windows.Forms.DataGridViewContentAlignment.MiddleLeft + DataGridViewCellStyle6.BackColor = System.Drawing.SystemColors.Control + DataGridViewCellStyle6.Font = New System.Drawing.Font("Microsoft Sans Serif", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + DataGridViewCellStyle6.ForeColor = System.Drawing.SystemColors.WindowText + DataGridViewCellStyle6.SelectionBackColor = System.Drawing.SystemColors.Highlight + DataGridViewCellStyle6.SelectionForeColor = System.Drawing.SystemColors.HighlightText + DataGridViewCellStyle6.WrapMode = System.Windows.Forms.DataGridViewTriState.[True] + Me.DataGridView.RowHeadersDefaultCellStyle = DataGridViewCellStyle6 Me.DataGridView.Size = New System.Drawing.Size(789, 262) Me.DataGridView.TabIndex = 0 ' @@ -502,35 +557,35 @@ Partial Class usrCntlSpeditionsBuchSuche Me.dgvLKW.AllowUserToOrderColumns = True Me.dgvLKW.AllowUserToResizeRows = False Me.dgvLKW.BackgroundColor = System.Drawing.Color.WhiteSmoke - DataGridViewCellStyle1.Alignment = System.Windows.Forms.DataGridViewContentAlignment.MiddleLeft - DataGridViewCellStyle1.BackColor = System.Drawing.SystemColors.Control - DataGridViewCellStyle1.Font = New System.Drawing.Font("Microsoft Sans Serif", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) - DataGridViewCellStyle1.ForeColor = System.Drawing.SystemColors.WindowText - DataGridViewCellStyle1.SelectionBackColor = System.Drawing.SystemColors.Highlight - DataGridViewCellStyle1.SelectionForeColor = System.Drawing.SystemColors.HighlightText - DataGridViewCellStyle1.WrapMode = System.Windows.Forms.DataGridViewTriState.[True] - Me.dgvLKW.ColumnHeadersDefaultCellStyle = DataGridViewCellStyle1 + DataGridViewCellStyle7.Alignment = System.Windows.Forms.DataGridViewContentAlignment.MiddleLeft + DataGridViewCellStyle7.BackColor = System.Drawing.SystemColors.Control + DataGridViewCellStyle7.Font = New System.Drawing.Font("Microsoft Sans Serif", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + DataGridViewCellStyle7.ForeColor = System.Drawing.SystemColors.WindowText + DataGridViewCellStyle7.SelectionBackColor = System.Drawing.SystemColors.Highlight + DataGridViewCellStyle7.SelectionForeColor = System.Drawing.SystemColors.HighlightText + DataGridViewCellStyle7.WrapMode = System.Windows.Forms.DataGridViewTriState.[True] + Me.dgvLKW.ColumnHeadersDefaultCellStyle = DataGridViewCellStyle7 Me.dgvLKW.ColumnHeadersHeightSizeMode = System.Windows.Forms.DataGridViewColumnHeadersHeightSizeMode.AutoSize Me.dgvLKW.ContextMenuStrip = Me.cntxtCntxtSpeditionsbuch - DataGridViewCellStyle2.Alignment = System.Windows.Forms.DataGridViewContentAlignment.MiddleLeft - DataGridViewCellStyle2.BackColor = System.Drawing.SystemColors.Window - DataGridViewCellStyle2.Font = New System.Drawing.Font("Microsoft Sans Serif", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) - DataGridViewCellStyle2.ForeColor = System.Drawing.SystemColors.ControlText - DataGridViewCellStyle2.SelectionBackColor = System.Drawing.SystemColors.Highlight - DataGridViewCellStyle2.SelectionForeColor = System.Drawing.SystemColors.HighlightText - DataGridViewCellStyle2.WrapMode = System.Windows.Forms.DataGridViewTriState.[False] - Me.dgvLKW.DefaultCellStyle = DataGridViewCellStyle2 + DataGridViewCellStyle8.Alignment = System.Windows.Forms.DataGridViewContentAlignment.MiddleLeft + DataGridViewCellStyle8.BackColor = System.Drawing.SystemColors.Window + DataGridViewCellStyle8.Font = New System.Drawing.Font("Microsoft Sans Serif", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + DataGridViewCellStyle8.ForeColor = System.Drawing.SystemColors.ControlText + DataGridViewCellStyle8.SelectionBackColor = System.Drawing.SystemColors.Highlight + DataGridViewCellStyle8.SelectionForeColor = System.Drawing.SystemColors.HighlightText + DataGridViewCellStyle8.WrapMode = System.Windows.Forms.DataGridViewTriState.[False] + Me.dgvLKW.DefaultCellStyle = DataGridViewCellStyle8 Me.dgvLKW.Dock = System.Windows.Forms.DockStyle.Left Me.dgvLKW.Location = New System.Drawing.Point(0, 0) Me.dgvLKW.Name = "dgvLKW" - DataGridViewCellStyle3.Alignment = System.Windows.Forms.DataGridViewContentAlignment.MiddleLeft - DataGridViewCellStyle3.BackColor = System.Drawing.SystemColors.Control - DataGridViewCellStyle3.Font = New System.Drawing.Font("Microsoft Sans Serif", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) - DataGridViewCellStyle3.ForeColor = System.Drawing.SystemColors.WindowText - DataGridViewCellStyle3.SelectionBackColor = System.Drawing.SystemColors.Highlight - DataGridViewCellStyle3.SelectionForeColor = System.Drawing.SystemColors.HighlightText - DataGridViewCellStyle3.WrapMode = System.Windows.Forms.DataGridViewTriState.[True] - Me.dgvLKW.RowHeadersDefaultCellStyle = DataGridViewCellStyle3 + DataGridViewCellStyle9.Alignment = System.Windows.Forms.DataGridViewContentAlignment.MiddleLeft + DataGridViewCellStyle9.BackColor = System.Drawing.SystemColors.Control + DataGridViewCellStyle9.Font = New System.Drawing.Font("Microsoft Sans Serif", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + DataGridViewCellStyle9.ForeColor = System.Drawing.SystemColors.WindowText + DataGridViewCellStyle9.SelectionBackColor = System.Drawing.SystemColors.Highlight + DataGridViewCellStyle9.SelectionForeColor = System.Drawing.SystemColors.HighlightText + DataGridViewCellStyle9.WrapMode = System.Windows.Forms.DataGridViewTriState.[True] + Me.dgvLKW.RowHeadersDefaultCellStyle = DataGridViewCellStyle9 Me.dgvLKW.Size = New System.Drawing.Size(450, 262) Me.dgvLKW.TabIndex = 35 Me.dgvLKW.Visible = False @@ -851,8 +906,9 @@ Partial Class usrCntlSpeditionsBuchSuche ' Me.pnlBerichte.Anchor = CType(((System.Windows.Forms.AnchorStyles.Top Or System.Windows.Forms.AnchorStyles.Bottom) _ Or System.Windows.Forms.AnchorStyles.Left), System.Windows.Forms.AnchorStyles) + Me.pnlBerichte.Controls.Add(Me.pnlHandlingAmbar) + Me.pnlBerichte.Controls.Add(Me.pnlHandling) Me.pnlBerichte.Controls.Add(Me.CheckBox5) - Me.pnlBerichte.Controls.Add(Me.FlowLayoutPanel1) Me.pnlBerichte.Controls.Add(Me.cbxHandlingAbrechnen) Me.pnlBerichte.Controls.Add(Me.cbxDetailbericht) Me.pnlBerichte.Controls.Add(Me.Button24) @@ -890,76 +946,12 @@ Partial Class usrCntlSpeditionsBuchSuche Me.CheckBox5.Text = "mit DL-Kosten" Me.CheckBox5.UseVisualStyleBackColor = False ' - 'FlowLayoutPanel1 - ' - Me.FlowLayoutPanel1.Controls.Add(Me.btnHandling) - Me.FlowLayoutPanel1.Controls.Add(Me.cboHandlingssatz) - Me.FlowLayoutPanel1.Controls.Add(Me.btnHandling_AMBAR) - Me.FlowLayoutPanel1.Controls.Add(Me.cboHandlingssatz_AMBAR) - Me.FlowLayoutPanel1.Location = New System.Drawing.Point(3, 123) - Me.FlowLayoutPanel1.Name = "FlowLayoutPanel1" - Me.FlowLayoutPanel1.Size = New System.Drawing.Size(319, 60) - Me.FlowLayoutPanel1.TabIndex = 97 - ' - 'btnHandling - ' - Me.btnHandling.FlatStyle = System.Windows.Forms.FlatStyle.Flat - Me.btnHandling.Image = Global.SDL.My.Resources.Resources.statistik_small - Me.btnHandling.ImageAlign = System.Drawing.ContentAlignment.MiddleLeft - Me.btnHandling.Location = New System.Drawing.Point(0, 0) - Me.btnHandling.Margin = New System.Windows.Forms.Padding(0) - Me.btnHandling.Name = "btnHandling" - Me.btnHandling.Size = New System.Drawing.Size(159, 28) - Me.btnHandling.TabIndex = 59 - Me.btnHandling.Text = "Handling an Außenstellen" - Me.btnHandling.TextAlign = System.Drawing.ContentAlignment.MiddleRight - Me.btnHandling.UseVisualStyleBackColor = True - ' - 'cboHandlingssatz - ' - Me.cboHandlingssatz._allowedValuesFreiText = Nothing - Me.cboHandlingssatz._allowFreiText = False - Me.cboHandlingssatz._value = "" - Me.cboHandlingssatz.DropDownWidth = 300 - Me.cboHandlingssatz.FormattingEnabled = True - Me.cboHandlingssatz.Location = New System.Drawing.Point(3, 31) - Me.cboHandlingssatz.Name = "cboHandlingssatz" - Me.cboHandlingssatz.Size = New System.Drawing.Size(159, 21) - Me.cboHandlingssatz.TabIndex = 60 - ' - 'btnHandling_AMBAR - ' - Me.btnHandling_AMBAR.FlatStyle = System.Windows.Forms.FlatStyle.Flat - Me.btnHandling_AMBAR.Image = Global.SDL.My.Resources.Resources.statistik_small - Me.btnHandling_AMBAR.ImageAlign = System.Drawing.ContentAlignment.MiddleLeft - Me.btnHandling_AMBAR.Location = New System.Drawing.Point(165, 28) - Me.btnHandling_AMBAR.Margin = New System.Windows.Forms.Padding(0) - Me.btnHandling_AMBAR.Name = "btnHandling_AMBAR" - Me.btnHandling_AMBAR.Size = New System.Drawing.Size(128, 28) - Me.btnHandling_AMBAR.TabIndex = 94 - Me.btnHandling_AMBAR.Text = "Handling (AMBAR)" - Me.btnHandling_AMBAR.TextAlign = System.Drawing.ContentAlignment.MiddleRight - Me.btnHandling_AMBAR.UseVisualStyleBackColor = True - ' - 'cboHandlingssatz_AMBAR - ' - Me.cboHandlingssatz_AMBAR._allowedValuesFreiText = Nothing - Me.cboHandlingssatz_AMBAR._allowFreiText = False - Me.cboHandlingssatz_AMBAR._value = "" - Me.cboHandlingssatz_AMBAR.DropDownWidth = 250 - Me.cboHandlingssatz_AMBAR.Font = New System.Drawing.Font("Microsoft Tai Le", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) - Me.cboHandlingssatz_AMBAR.FormattingEnabled = True - Me.cboHandlingssatz_AMBAR.Location = New System.Drawing.Point(3, 59) - Me.cboHandlingssatz_AMBAR.Name = "cboHandlingssatz_AMBAR" - Me.cboHandlingssatz_AMBAR.Size = New System.Drawing.Size(128, 22) - Me.cboHandlingssatz_AMBAR.TabIndex = 53 - ' 'cbxHandlingAbrechnen ' Me.cbxHandlingAbrechnen.AutoSize = True Me.cbxHandlingAbrechnen.BackColor = System.Drawing.Color.WhiteSmoke Me.cbxHandlingAbrechnen.Font = New System.Drawing.Font("Microsoft Sans Serif", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) - Me.cbxHandlingAbrechnen.Location = New System.Drawing.Point(4, 107) + Me.cbxHandlingAbrechnen.Location = New System.Drawing.Point(4, 102) Me.cbxHandlingAbrechnen.Name = "cbxHandlingAbrechnen" Me.cbxHandlingAbrechnen.Size = New System.Drawing.Size(140, 17) Me.cbxHandlingAbrechnen.TabIndex = 96 @@ -3017,6 +3009,25 @@ Partial Class usrCntlSpeditionsBuchSuche Me.SplitContainer.SplitterWidth = 2 Me.SplitContainer.TabIndex = 3 ' + 'pnlHandling + ' + Me.pnlHandling.Controls.Add(Me.cboHandlingssatz) + Me.pnlHandling.Controls.Add(Me.btnHandling) + Me.pnlHandling.Location = New System.Drawing.Point(3, 126) + Me.pnlHandling.Name = "pnlHandling" + Me.pnlHandling.Size = New System.Drawing.Size(163, 58) + Me.pnlHandling.TabIndex = 99 + ' + 'pnlHandlingAmbar + ' + Me.pnlHandlingAmbar.Controls.Add(Me.cboHandlingssatz_AMBAR) + Me.pnlHandlingAmbar.Controls.Add(Me.btnHandling_AMBAR) + Me.pnlHandlingAmbar.Location = New System.Drawing.Point(3, 122) + Me.pnlHandlingAmbar.Name = "pnlHandlingAmbar" + Me.pnlHandlingAmbar.Size = New System.Drawing.Size(159, 62) + Me.pnlHandlingAmbar.TabIndex = 36 + Me.pnlHandlingAmbar.Visible = False + ' 'usrCntlSpeditionsBuchSuche ' Me.AutoScaleMode = System.Windows.Forms.AutoScaleMode.None @@ -3040,7 +3051,6 @@ Partial Class usrCntlSpeditionsBuchSuche Me.Panel1.PerformLayout() Me.pnlBerichte.ResumeLayout(False) Me.pnlBerichte.PerformLayout() - Me.FlowLayoutPanel1.ResumeLayout(False) Me.MenuStrip1.ResumeLayout(False) Me.MenuStrip1.PerformLayout() Me.pnl.ResumeLayout(False) @@ -3063,6 +3073,8 @@ Partial Class usrCntlSpeditionsBuchSuche Me.SplitContainer.Panel2.ResumeLayout(False) CType(Me.SplitContainer, System.ComponentModel.ISupportInitialize).EndInit() Me.SplitContainer.ResumeLayout(False) + Me.pnlHandling.ResumeLayout(False) + Me.pnlHandlingAmbar.ResumeLayout(False) Me.ResumeLayout(False) End Sub @@ -3250,8 +3262,9 @@ Partial Class usrCntlSpeditionsBuchSuche Friend WithEvents cbxfehlZahlung_AVISOID As CheckBox Friend WithEvents cbxfehlZahlung_SENDUNG As CheckBox Friend WithEvents cbxHandlingAbrechnen As CheckBox - Friend WithEvents FlowLayoutPanel1 As FlowLayoutPanel Friend WithEvents CheckBox5 As CheckBox Friend WithEvents ToolStripMenuItem3 As ToolStripMenuItem Friend WithEvents btnnachLeistungsNr As Button + Friend WithEvents pnlHandling As Panel + Friend WithEvents pnlHandlingAmbar As Panel End Class diff --git a/SDL/Speditionsbuch/usrCntlSpeditionsBuchSuche.resx b/SDL/Speditionsbuch/usrCntlSpeditionsBuchSuche.resx index b5d92bf9..3a799283 100644 --- a/SDL/Speditionsbuch/usrCntlSpeditionsBuchSuche.resx +++ b/SDL/Speditionsbuch/usrCntlSpeditionsBuchSuche.resx @@ -129,9 +129,6 @@ 546, 17 - - 431, 17 - diff --git a/SDL/Speditionsbuch/usrCntlSpeditionsBuchSuche.vb b/SDL/Speditionsbuch/usrCntlSpeditionsBuchSuche.vb index 2c499c72..b6145670 100644 --- a/SDL/Speditionsbuch/usrCntlSpeditionsBuchSuche.vb +++ b/SDL/Speditionsbuch/usrCntlSpeditionsBuchSuche.vb @@ -577,20 +577,24 @@ Public Class usrCntlSpeditionsBuchSuche Button16.Visible = True Button17.Visible = True btnnachLeistungsNr.Visible = True - ElseIf VERAG_PROG_ALLGEMEIN.cAllgemein.FIRMA = "AMBAR" Then - pnlBerichte.Visible = True - For Each p In pnlBerichte.Controls - p.Visible = False - Next - btnHandling_AMBAR.Visible = True - cboHandlingssatz_AMBAR.Visible = True - btnHandling.Visible = False - cboHandlingssatz.Visible = False + 'darf nur angezeigt werden, wenn Berechtigung: ZOLL_Auswertungen + If VERAG_PROG_ALLGEMEIN.cAllgemein.FIRMA = "AMBAR" Then + pnlBerichte.Visible = True + For Each p In pnlBerichte.Controls + p.Visible = False + Next + cbxHandlingAbrechnen.Visible = True + pnlHandling.Visible = False + pnlHandlingAmbar.Visible = True + + End If End If + + If VERAG_PROG_ALLGEMEIN.cBerechtignunen.CHECK_BERECHTIGUNG_bool("ZOLL_Auswertungen_Erlöse", "SDL") Then btnSpedBuchEinnahmen.Visible = True End If @@ -2930,10 +2934,9 @@ Public Class usrCntlSpeditionsBuchSuche If cbxHandlingAbrechnen.Checked Then - Select Case lstFiliale.SelectedItems.Count - Case 0 : MsgBox("Es muss mind. eine Filiale ausgewählt werden!") : Exit Sub - - End Select + 'Select Case lstFiliale.SelectedItems.Count + ' Case 0 : MsgBox("Es muss mind. eine Filiale ausgewählt werden!") : Exit Sub + 'End Select createHandlingAbrechnung(dtAbrechnung, cboHandlingssatz_AMBAR._value, cboHandlingssatz_AMBAR._value, CDate(txtAbfertDat.Text), CDate(txtAbfertDatBis.Text), anhang_path, HandlingList) End If @@ -2978,14 +2981,27 @@ Public Class usrCntlSpeditionsBuchSuche If frm.ShowDialog() = DialogResult.OK Then Dim kdNr As Integer = -1 - Select Case anFirma.Trim() - Case "UNISPED" : kdNr = 704028 - Case "IMEX" : kdNr = 550574 - Case "AMBAR" : kdNr = 725012 - Case Else - MsgBox("falscher Kunde!") - Return False - End Select + If VERAG_PROG_ALLGEMEIN.cAllgemein.FIRMA = "AMBAR" Then + Select Case anFirma.Trim() + Case "UNISPED" : kdNr = 3013303 + Case "IMEX" : kdNr = 3011904 + Case "VERAG" : kdNr = 3013401 + Case Else + MsgBox("falscher Kunde!") + Return False + End Select + Else + Select Case anFirma.Trim() + Case "UNISPED" : kdNr = 704028 + Case "IMEX" : kdNr = 550574 + Case "AMBAR" : kdNr = 725012 + Case Else + MsgBox("falscher Kunde!") + Return False + End Select + + End If + Dim counter = 0 diff --git a/SDL/USTV/frmMDM_USTVAntrag.Designer.vb b/SDL/USTV/frmMDM_USTVAntrag.Designer.vb index 3121ab26..ecfaa7fb 100644 --- a/SDL/USTV/frmMDM_USTVAntrag.Designer.vb +++ b/SDL/USTV/frmMDM_USTVAntrag.Designer.vb @@ -24,9 +24,11 @@ Partial Class frmMDM_USTVAntrag Private Sub InitializeComponent() Me.components = New System.ComponentModel.Container() Dim resources As System.ComponentModel.ComponentResourceManager = New System.ComponentModel.ComponentResourceManager(GetType(frmMDM_USTVAntrag)) - Dim DataGridViewCellStyle1 As System.Windows.Forms.DataGridViewCellStyle = New System.Windows.Forms.DataGridViewCellStyle() - Dim DataGridViewCellStyle2 As System.Windows.Forms.DataGridViewCellStyle = New System.Windows.Forms.DataGridViewCellStyle() + Dim DataGridViewCellStyle3 As System.Windows.Forms.DataGridViewCellStyle = New System.Windows.Forms.DataGridViewCellStyle() + Dim DataGridViewCellStyle4 As System.Windows.Forms.DataGridViewCellStyle = New System.Windows.Forms.DataGridViewCellStyle() Me.pnlBottom = New System.Windows.Forms.Panel() + Me.lblVZAenderungsdatum = New System.Windows.Forms.Label() + Me.Label20 = New System.Windows.Forms.Label() Me.pbXMLExport = New System.Windows.Forms.PictureBox() Me.btnRMCQuartal = New System.Windows.Forms.Button() Me.Label18 = New System.Windows.Forms.Label() @@ -56,6 +58,8 @@ Partial Class frmMDM_USTVAntrag Me.cbxLand = New VERAG_PROG_ALLGEMEIN.MyComboBox() Me.lblLand = New System.Windows.Forms.Label() Me.Panel8 = New System.Windows.Forms.Panel() + Me.Label21 = New System.Windows.Forms.Label() + Me.txtErstattung = New VERAG_PROG_ALLGEMEIN.MyTextBox() Me.txtVZOffen = New VERAG_PROG_ALLGEMEIN.MyTextBox() Me.Label19 = New System.Windows.Forms.Label() Me.btnSortNachLeist = New System.Windows.Forms.Button() @@ -122,7 +126,6 @@ Partial Class frmMDM_USTVAntrag Me.dgvUSTVPositionen = New VERAG_PROG_ALLGEMEIN.MyDatagridview(Me.components) Me.pnlAntragsPosDetails = New System.Windows.Forms.Panel() Me.Panel2 = New System.Windows.Forms.Panel() - Me.UstCntlUSTV_AntragPosition1 = New SDL.ustCntlUSTV_AntragPosition() Me.Panel4 = New System.Windows.Forms.Panel() Me.cbxKIUploaddelete = New System.Windows.Forms.CheckBox() Me.scanUSTVA = New VERAG_PROG_ALLGEMEIN.usrcntlPDFScan() @@ -133,7 +136,6 @@ Partial Class frmMDM_USTVAntrag Me.Panel3 = New System.Windows.Forms.Panel() Me.dgvErstattungspositionen = New VERAG_PROG_ALLGEMEIN.MyDatagridview(Me.components) Me.pnlErstattungsdetails = New System.Windows.Forms.Panel() - Me.UstCntlUSTV_AntragErstattungen1 = New SDL.ustCntlUSTV_ErstattungPosition() Me.Panel1 = New System.Windows.Forms.Panel() Me.Button2 = New System.Windows.Forms.Button() Me.Button3 = New System.Windows.Forms.Button() @@ -150,6 +152,8 @@ Partial Class frmMDM_USTVAntrag Me.ToolStripMenuItem2 = New System.Windows.Forms.ToolStripMenuItem() Me.ToolStripMenuItem3 = New System.Windows.Forms.ToolStripMenuItem() Me.FakturiertToolStripMenuItem = New System.Windows.Forms.ToolStripMenuItem() + Me.UstCntlUSTV_AntragPosition1 = New SDL.ustCntlUSTV_AntragPosition() + Me.UstCntlUSTV_AntragErstattungen1 = New SDL.ustCntlUSTV_ErstattungPosition() Me.pnlBottom.SuspendLayout() CType(Me.pbXMLExport, System.ComponentModel.ISupportInitialize).BeginInit() CType(Me.pbMail, System.ComponentModel.ISupportInitialize).BeginInit() @@ -182,6 +186,8 @@ Partial Class frmMDM_USTVAntrag ' Me.pnlBottom.BackColor = System.Drawing.Color.FromArgb(CType(CType(224, Byte), Integer), CType(CType(224, Byte), Integer), CType(CType(224, Byte), Integer)) Me.pnlBottom.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle + Me.pnlBottom.Controls.Add(Me.lblVZAenderungsdatum) + Me.pnlBottom.Controls.Add(Me.Label20) Me.pnlBottom.Controls.Add(Me.pbXMLExport) Me.pnlBottom.Controls.Add(Me.btnRMCQuartal) Me.pnlBottom.Controls.Add(Me.Label18) @@ -200,11 +206,33 @@ Partial Class frmMDM_USTVAntrag Me.pnlBottom.Controls.Add(Me.Button1) Me.pnlBottom.Controls.Add(Me.lbl_EintrageVerarbetiet) Me.pnlBottom.Dock = System.Windows.Forms.DockStyle.Bottom - Me.pnlBottom.Location = New System.Drawing.Point(0, 667) + Me.pnlBottom.Location = New System.Drawing.Point(0, 663) Me.pnlBottom.Name = "pnlBottom" Me.pnlBottom.Size = New System.Drawing.Size(1444, 100) Me.pnlBottom.TabIndex = 3 ' + 'lblVZAenderungsdatum + ' + Me.lblVZAenderungsdatum.ForeColor = System.Drawing.Color.Black + Me.lblVZAenderungsdatum.Location = New System.Drawing.Point(186, 75) + Me.lblVZAenderungsdatum.Name = "lblVZAenderungsdatum" + Me.lblVZAenderungsdatum.Size = New System.Drawing.Size(216, 19) + Me.lblVZAenderungsdatum.TabIndex = 58 + Me.lblVZAenderungsdatum.Text = "-" + Me.lblVZAenderungsdatum.TextAlign = System.Drawing.ContentAlignment.MiddleLeft + Me.lblVZAenderungsdatum.Visible = False + ' + 'Label20 + ' + Me.Label20.ForeColor = System.Drawing.Color.Black + Me.Label20.Location = New System.Drawing.Point(9, 75) + Me.Label20.Name = "Label20" + Me.Label20.Size = New System.Drawing.Size(171, 19) + Me.Label20.TabIndex = 57 + Me.Label20.Text = "letzte Änderung (VZ) am:" + Me.Label20.TextAlign = System.Drawing.ContentAlignment.MiddleRight + Me.Label20.Visible = False + ' 'pbXMLExport ' Me.pbXMLExport.Image = Global.SDL.My.Resources.Resources.xml @@ -383,7 +411,7 @@ Partial Class frmMDM_USTVAntrag Me.btnAntrageeinarbeiten.ForeColor = System.Drawing.Color.Black Me.btnAntrageeinarbeiten.Image = CType(resources.GetObject("btnAntrageeinarbeiten.Image"), System.Drawing.Image) Me.btnAntrageeinarbeiten.ImageAlign = System.Drawing.ContentAlignment.MiddleLeft - Me.btnAntrageeinarbeiten.Location = New System.Drawing.Point(12, 29) + Me.btnAntrageeinarbeiten.Location = New System.Drawing.Point(12, 23) Me.btnAntrageeinarbeiten.Name = "btnAntrageeinarbeiten" Me.btnAntrageeinarbeiten.Size = New System.Drawing.Size(168, 38) Me.btnAntrageeinarbeiten.TabIndex = 1 @@ -395,7 +423,7 @@ Partial Class frmMDM_USTVAntrag ' Me.cbxArchivierteEintracheNochmalsEinarbetien.AutoSize = True Me.cbxArchivierteEintracheNochmalsEinarbetien.ForeColor = System.Drawing.Color.Black - Me.cbxArchivierteEintracheNochmalsEinarbetien.Location = New System.Drawing.Point(12, 8) + Me.cbxArchivierteEintracheNochmalsEinarbetien.Location = New System.Drawing.Point(12, 2) Me.cbxArchivierteEintracheNochmalsEinarbetien.Name = "cbxArchivierteEintracheNochmalsEinarbetien" Me.cbxArchivierteEintracheNochmalsEinarbetien.Size = New System.Drawing.Size(203, 17) Me.cbxArchivierteEintracheNochmalsEinarbetien.TabIndex = 0 @@ -418,7 +446,7 @@ Partial Class frmMDM_USTVAntrag 'lbl_EintrageVerarbetiet ' Me.lbl_EintrageVerarbetiet.ForeColor = System.Drawing.Color.Black - Me.lbl_EintrageVerarbetiet.Location = New System.Drawing.Point(12, 70) + Me.lbl_EintrageVerarbetiet.Location = New System.Drawing.Point(12, 61) Me.lbl_EintrageVerarbetiet.Name = "lbl_EintrageVerarbetiet" Me.lbl_EintrageVerarbetiet.Size = New System.Drawing.Size(168, 19) Me.lbl_EintrageVerarbetiet.TabIndex = 3 @@ -607,6 +635,8 @@ Partial Class frmMDM_USTVAntrag ' Me.Panel8.BackColor = System.Drawing.Color.WhiteSmoke Me.Panel8.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle + Me.Panel8.Controls.Add(Me.Label21) + Me.Panel8.Controls.Add(Me.txtErstattung) Me.Panel8.Controls.Add(Me.txtVZOffen) Me.Panel8.Controls.Add(Me.Label19) Me.Panel8.Controls.Add(Me.btnSortNachLeist) @@ -648,6 +678,45 @@ Partial Class frmMDM_USTVAntrag Me.Panel8.Size = New System.Drawing.Size(963, 144) Me.Panel8.TabIndex = 19 ' + 'Label21 + ' + Me.Label21.AutoSize = True + Me.Label21.BackColor = System.Drawing.Color.Transparent + Me.Label21.Cursor = System.Windows.Forms.Cursors.Hand + Me.Label21.Font = New System.Drawing.Font("Microsoft Sans Serif", 10.0!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.Label21.ForeColor = System.Drawing.Color.Black + Me.Label21.Location = New System.Drawing.Point(524, 119) + Me.Label21.Name = "Label21" + Me.Label21.Size = New System.Drawing.Size(77, 17) + Me.Label21.TabIndex = 62 + Me.Label21.Text = "Erstattung:" + ' + 'txtErstattung + ' + Me.txtErstattung._DateTimeOnly = False + Me.txtErstattung._numbersOnly = True + Me.txtErstattung._numbersOnlyKommastellen = "2" + Me.txtErstattung._numbersOnlyTrennzeichen = True + Me.txtErstattung._Prozent = False + Me.txtErstattung._ShortDateNew = False + Me.txtErstattung._ShortDateOnly = False + Me.txtErstattung._TimeOnly = False + Me.txtErstattung._TimeOnly_Seconds = False + Me.txtErstattung._value = "" + Me.txtErstattung._Waehrung = True + Me.txtErstattung._WaehrungZeichen = True + Me.txtErstattung.Enabled = False + Me.txtErstattung.Font = New System.Drawing.Font("Microsoft Sans Serif", 10.0!) + Me.txtErstattung.ForeColor = System.Drawing.Color.Black + Me.txtErstattung.Location = New System.Drawing.Point(654, 114) + Me.txtErstattung.MaxLength = 10 + Me.txtErstattung.MaxLineLength = -1 + Me.txtErstattung.MaxLines_Warning = "" + Me.txtErstattung.MaxLines_Warning_Label = Nothing + Me.txtErstattung.Name = "txtErstattung" + Me.txtErstattung.Size = New System.Drawing.Size(125, 23) + Me.txtErstattung.TabIndex = 61 + ' 'txtVZOffen ' Me.txtVZOffen._DateTimeOnly = False @@ -665,13 +734,13 @@ Partial Class frmMDM_USTVAntrag Me.txtVZOffen.Enabled = False Me.txtVZOffen.Font = New System.Drawing.Font("Microsoft Sans Serif", 10.0!) Me.txtVZOffen.ForeColor = System.Drawing.Color.Black - Me.txtVZOffen.Location = New System.Drawing.Point(654, 116) + Me.txtVZOffen.Location = New System.Drawing.Point(884, 116) Me.txtVZOffen.MaxLength = 10 Me.txtVZOffen.MaxLineLength = -1 Me.txtVZOffen.MaxLines_Warning = "" Me.txtVZOffen.MaxLines_Warning_Label = Nothing Me.txtVZOffen.Name = "txtVZOffen" - Me.txtVZOffen.Size = New System.Drawing.Size(125, 23) + Me.txtVZOffen.Size = New System.Drawing.Size(78, 23) Me.txtVZOffen.TabIndex = 60 ' 'Label19 @@ -681,7 +750,7 @@ Partial Class frmMDM_USTVAntrag Me.Label19.Cursor = System.Windows.Forms.Cursors.Hand Me.Label19.Font = New System.Drawing.Font("Microsoft Sans Serif", 10.0!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) Me.Label19.ForeColor = System.Drawing.Color.Black - Me.Label19.Location = New System.Drawing.Point(524, 117) + Me.Label19.Location = New System.Drawing.Point(800, 122) Me.Label19.Name = "Label19" Me.Label19.Size = New System.Drawing.Size(66, 17) Me.Label19.TabIndex = 59 @@ -1602,7 +1671,7 @@ Partial Class frmMDM_USTVAntrag Me.pnlBody.Controls.Add(Me.TabControl1) Me.pnlBody.Location = New System.Drawing.Point(0, 230) Me.pnlBody.Name = "pnlBody" - Me.pnlBody.Size = New System.Drawing.Size(1444, 437) + Me.pnlBody.Size = New System.Drawing.Size(1444, 433) Me.pnlBody.TabIndex = 1 ' 'TabControl1 @@ -1613,7 +1682,7 @@ Partial Class frmMDM_USTVAntrag Me.TabControl1.Location = New System.Drawing.Point(0, 0) Me.TabControl1.Name = "TabControl1" Me.TabControl1.SelectedIndex = 0 - Me.TabControl1.Size = New System.Drawing.Size(1442, 435) + Me.TabControl1.Size = New System.Drawing.Size(1442, 431) Me.TabControl1.TabIndex = 1 ' 'TabPage1 @@ -1623,7 +1692,7 @@ Partial Class frmMDM_USTVAntrag Me.TabPage1.Location = New System.Drawing.Point(4, 22) Me.TabPage1.Name = "TabPage1" Me.TabPage1.Padding = New System.Windows.Forms.Padding(3) - Me.TabPage1.Size = New System.Drawing.Size(1434, 409) + Me.TabPage1.Size = New System.Drawing.Size(1434, 405) Me.TabPage1.TabIndex = 0 Me.TabPage1.Text = "Antragspositionen" Me.TabPage1.UseVisualStyleBackColor = True @@ -1633,8 +1702,8 @@ Partial Class frmMDM_USTVAntrag Me.dgvUSTVPositionen.AKTUALISIERUNGS_INTERVALL = 500 Me.dgvUSTVPositionen.AllowUserToAddRows = False Me.dgvUSTVPositionen.AllowUserToDeleteRows = False - DataGridViewCellStyle1.BackColor = System.Drawing.Color.FromArgb(CType(CType(240, Byte), Integer), CType(CType(245, Byte), Integer), CType(CType(255, Byte), Integer)) - Me.dgvUSTVPositionen.AlternatingRowsDefaultCellStyle = DataGridViewCellStyle1 + DataGridViewCellStyle3.BackColor = System.Drawing.Color.FromArgb(CType(CType(240, Byte), Integer), CType(CType(245, Byte), Integer), CType(CType(255, Byte), Integer)) + Me.dgvUSTVPositionen.AlternatingRowsDefaultCellStyle = DataGridViewCellStyle3 Me.dgvUSTVPositionen.Anchor = CType((((System.Windows.Forms.AnchorStyles.Top Or System.Windows.Forms.AnchorStyles.Bottom) _ Or System.Windows.Forms.AnchorStyles.Left) _ Or System.Windows.Forms.AnchorStyles.Right), System.Windows.Forms.AnchorStyles) @@ -1646,14 +1715,14 @@ Partial Class frmMDM_USTVAntrag Me.dgvUSTVPositionen.RowHeadersVisible = False Me.dgvUSTVPositionen.RowHeadersWidth = 62 Me.dgvUSTVPositionen.SelectionMode = System.Windows.Forms.DataGridViewSelectionMode.FullRowSelect - Me.dgvUSTVPositionen.Size = New System.Drawing.Size(1428, 134) + Me.dgvUSTVPositionen.Size = New System.Drawing.Size(1428, 130) Me.dgvUSTVPositionen.TabIndex = 0 ' 'pnlAntragsPosDetails ' Me.pnlAntragsPosDetails.Controls.Add(Me.Panel2) Me.pnlAntragsPosDetails.Dock = System.Windows.Forms.DockStyle.Bottom - Me.pnlAntragsPosDetails.Location = New System.Drawing.Point(3, 143) + Me.pnlAntragsPosDetails.Location = New System.Drawing.Point(3, 139) Me.pnlAntragsPosDetails.Name = "pnlAntragsPosDetails" Me.pnlAntragsPosDetails.Size = New System.Drawing.Size(1428, 263) Me.pnlAntragsPosDetails.TabIndex = 2 @@ -1670,14 +1739,6 @@ Partial Class frmMDM_USTVAntrag Me.Panel2.Size = New System.Drawing.Size(1428, 263) Me.Panel2.TabIndex = 1 ' - 'UstCntlUSTV_AntragPosition1 - ' - Me.UstCntlUSTV_AntragPosition1.Dock = System.Windows.Forms.DockStyle.Fill - Me.UstCntlUSTV_AntragPosition1.Location = New System.Drawing.Point(154, 0) - Me.UstCntlUSTV_AntragPosition1.Name = "UstCntlUSTV_AntragPosition1" - Me.UstCntlUSTV_AntragPosition1.Size = New System.Drawing.Size(1272, 261) - Me.UstCntlUSTV_AntragPosition1.TabIndex = 0 - ' 'Panel4 ' Me.Panel4.BackColor = System.Drawing.Color.WhiteSmoke @@ -1773,7 +1834,7 @@ Partial Class frmMDM_USTVAntrag Me.TabPage2.Location = New System.Drawing.Point(4, 22) Me.TabPage2.Name = "TabPage2" Me.TabPage2.Padding = New System.Windows.Forms.Padding(3) - Me.TabPage2.Size = New System.Drawing.Size(1434, 409) + Me.TabPage2.Size = New System.Drawing.Size(1434, 405) Me.TabPage2.TabIndex = 1 Me.TabPage2.Text = "Erstattungspositionen" Me.TabPage2.UseVisualStyleBackColor = True @@ -1787,7 +1848,7 @@ Partial Class frmMDM_USTVAntrag Me.Panel3.Dock = System.Windows.Forms.DockStyle.Fill Me.Panel3.Location = New System.Drawing.Point(3, 3) Me.Panel3.Name = "Panel3" - Me.Panel3.Size = New System.Drawing.Size(1428, 403) + Me.Panel3.Size = New System.Drawing.Size(1428, 399) Me.Panel3.TabIndex = 3 ' 'dgvErstattungspositionen @@ -1795,8 +1856,8 @@ Partial Class frmMDM_USTVAntrag Me.dgvErstattungspositionen.AKTUALISIERUNGS_INTERVALL = 500 Me.dgvErstattungspositionen.AllowUserToAddRows = False Me.dgvErstattungspositionen.AllowUserToDeleteRows = False - DataGridViewCellStyle2.BackColor = System.Drawing.Color.FromArgb(CType(CType(240, Byte), Integer), CType(CType(245, Byte), Integer), CType(CType(255, Byte), Integer)) - Me.dgvErstattungspositionen.AlternatingRowsDefaultCellStyle = DataGridViewCellStyle2 + DataGridViewCellStyle4.BackColor = System.Drawing.Color.FromArgb(CType(CType(240, Byte), Integer), CType(CType(245, Byte), Integer), CType(CType(255, Byte), Integer)) + Me.dgvErstattungspositionen.AlternatingRowsDefaultCellStyle = DataGridViewCellStyle4 Me.dgvErstattungspositionen.Anchor = CType((((System.Windows.Forms.AnchorStyles.Top Or System.Windows.Forms.AnchorStyles.Bottom) _ Or System.Windows.Forms.AnchorStyles.Left) _ Or System.Windows.Forms.AnchorStyles.Right), System.Windows.Forms.AnchorStyles) @@ -1808,7 +1869,7 @@ Partial Class frmMDM_USTVAntrag Me.dgvErstattungspositionen.RowHeadersVisible = False Me.dgvErstattungspositionen.RowHeadersWidth = 62 Me.dgvErstattungspositionen.SelectionMode = System.Windows.Forms.DataGridViewSelectionMode.FullRowSelect - Me.dgvErstattungspositionen.Size = New System.Drawing.Size(1428, 137) + Me.dgvErstattungspositionen.Size = New System.Drawing.Size(1428, 133) Me.dgvErstattungspositionen.TabIndex = 1 ' 'pnlErstattungsdetails @@ -1818,19 +1879,11 @@ Partial Class frmMDM_USTVAntrag Me.pnlErstattungsdetails.Controls.Add(Me.UstCntlUSTV_AntragErstattungen1) Me.pnlErstattungsdetails.Controls.Add(Me.Panel1) Me.pnlErstattungsdetails.Dock = System.Windows.Forms.DockStyle.Bottom - Me.pnlErstattungsdetails.Location = New System.Drawing.Point(0, 140) + Me.pnlErstattungsdetails.Location = New System.Drawing.Point(0, 136) Me.pnlErstattungsdetails.Name = "pnlErstattungsdetails" Me.pnlErstattungsdetails.Size = New System.Drawing.Size(1426, 261) Me.pnlErstattungsdetails.TabIndex = 0 ' - 'UstCntlUSTV_AntragErstattungen1 - ' - Me.UstCntlUSTV_AntragErstattungen1.Dock = System.Windows.Forms.DockStyle.Fill - Me.UstCntlUSTV_AntragErstattungen1.Location = New System.Drawing.Point(154, 0) - Me.UstCntlUSTV_AntragErstattungen1.Name = "UstCntlUSTV_AntragErstattungen1" - Me.UstCntlUSTV_AntragErstattungen1.Size = New System.Drawing.Size(1270, 259) - Me.UstCntlUSTV_AntragErstattungen1.TabIndex = 2 - ' 'Panel1 ' Me.Panel1.BackColor = System.Drawing.Color.WhiteSmoke @@ -1902,13 +1955,13 @@ Partial Class frmMDM_USTVAntrag 'AktivierenToolStripMenuItem ' Me.AktivierenToolStripMenuItem.Name = "AktivierenToolStripMenuItem" - Me.AktivierenToolStripMenuItem.Size = New System.Drawing.Size(180, 22) + Me.AktivierenToolStripMenuItem.Size = New System.Drawing.Size(138, 22) Me.AktivierenToolStripMenuItem.Text = "aktivieren" ' 'DeaktivierenToolStripMenuItem ' Me.DeaktivierenToolStripMenuItem.Name = "DeaktivierenToolStripMenuItem" - Me.DeaktivierenToolStripMenuItem.Size = New System.Drawing.Size(180, 22) + Me.DeaktivierenToolStripMenuItem.Size = New System.Drawing.Size(138, 22) Me.DeaktivierenToolStripMenuItem.Text = "deaktivieren" ' 'FakturiertZurücksetzenToolStripMenuItem @@ -1921,7 +1974,7 @@ Partial Class frmMDM_USTVAntrag ' Me.ncs_Belege.Items.AddRange(New System.Windows.Forms.ToolStripItem() {Me.ToolStripMenuItem1, Me.FakturiertToolStripMenuItem}) Me.ncs_Belege.Name = "cns_vorauszahlen" - Me.ncs_Belege.Size = New System.Drawing.Size(196, 70) + Me.ncs_Belege.Size = New System.Drawing.Size(196, 48) ' 'ToolStripMenuItem1 ' @@ -1949,11 +2002,27 @@ Partial Class frmMDM_USTVAntrag Me.FakturiertToolStripMenuItem.Text = "Fakturiert zurücksetzen" Me.FakturiertToolStripMenuItem.Visible = False ' + 'UstCntlUSTV_AntragPosition1 + ' + Me.UstCntlUSTV_AntragPosition1.Dock = System.Windows.Forms.DockStyle.Fill + Me.UstCntlUSTV_AntragPosition1.Location = New System.Drawing.Point(154, 0) + Me.UstCntlUSTV_AntragPosition1.Name = "UstCntlUSTV_AntragPosition1" + Me.UstCntlUSTV_AntragPosition1.Size = New System.Drawing.Size(1272, 261) + Me.UstCntlUSTV_AntragPosition1.TabIndex = 0 + ' + 'UstCntlUSTV_AntragErstattungen1 + ' + Me.UstCntlUSTV_AntragErstattungen1.Dock = System.Windows.Forms.DockStyle.Fill + Me.UstCntlUSTV_AntragErstattungen1.Location = New System.Drawing.Point(154, 0) + Me.UstCntlUSTV_AntragErstattungen1.Name = "UstCntlUSTV_AntragErstattungen1" + Me.UstCntlUSTV_AntragErstattungen1.Size = New System.Drawing.Size(1270, 259) + Me.UstCntlUSTV_AntragErstattungen1.TabIndex = 2 + ' 'frmMDM_USTVAntrag ' Me.AutoScaleDimensions = New System.Drawing.SizeF(6.0!, 13.0!) Me.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font - Me.ClientSize = New System.Drawing.Size(1444, 767) + Me.ClientSize = New System.Drawing.Size(1444, 763) Me.Controls.Add(Me.pnlHeader) Me.Controls.Add(Me.pnlBody) Me.Controls.Add(Me.pnlBottom) @@ -2123,4 +2192,8 @@ Partial Class frmMDM_USTVAntrag Friend WithEvents btnSortNachLeist As Button Friend WithEvents txtVZOffen As VERAG_PROG_ALLGEMEIN.MyTextBox Friend WithEvents Label19 As Label + Friend WithEvents lblVZAenderungsdatum As Label + Friend WithEvents Label20 As Label + Friend WithEvents Label21 As Label + Friend WithEvents txtErstattung As VERAG_PROG_ALLGEMEIN.MyTextBox End Class diff --git a/SDL/USTV/frmMDM_USTVAntrag.vb b/SDL/USTV/frmMDM_USTVAntrag.vb index 9019b349..7c979ecd 100644 --- a/SDL/USTV/frmMDM_USTVAntrag.vb +++ b/SDL/USTV/frmMDM_USTVAntrag.vb @@ -24,6 +24,8 @@ Public Class frmMDM_USTVAntrag Dim GesamtUSteuerEUR As Double Dim GesamtUSteuer As Double Dim looked As Boolean = False + Dim suppressSelectionChanged = False + Dim suppressSelectionFirstTime = True Sub New(UStVAn_ID) @@ -51,23 +53,29 @@ Public Class frmMDM_USTVAntrag End Sub Sub init(Optional posIndex As Integer = -1, Optional Lieferant As String = "") + + + If Not suppressSelectionFirstTime Then suppressSelectionChanged = True + suppressSelectionFirstTime = False + + pnlBody.AutoScroll = False lblGesamtUSteuerFW.Text = "-" lblGesamtErstattungFW.Text = "-" lblDiffernezbetragFW.Text = "-" - lblGesamtUSteuer.Text="-" + lblGesamtUSteuer.Text = "-" lblGesamtErstattung.Text = "-" lblDiffernezbetrag.Text = "-" + lblVZAenderungsdatum.Text = "-" btnAntrageeinarbeiten.Enabled = Not UStVAn_ID <= 0 - FlowLayoutPanel.Enabled= Not UStVAn_ID <= 0 - btnEintragloeschen.Enabled= Not UStVAn_ID <= 0 - btnNeuerEintrag.Enabled= Not UStVAn_ID <= 0 - UstCntlUSTV_AntragPosition1.Enabled= Not UStVAn_ID <= 0 - cbxLand.Visible= UStVAn_ID <= 0 - + FlowLayoutPanel.Enabled = Not UStVAn_ID <= 0 + btnEintragloeschen.Enabled = Not UStVAn_ID <= 0 + btnNeuerEintrag.Enabled = Not UStVAn_ID <= 0 + UstCntlUSTV_AntragPosition1.Enabled = Not UStVAn_ID <= 0 + cbxLand.Visible = UStVAn_ID <= 0 With dgvUSTVPositionen .ClearSelection() @@ -289,6 +297,14 @@ Public Class frmMDM_USTVAntrag Antrag_LandKz = SQL.DLookup("LandKz", "[Länderverzeichnis für die Außenhandelsstatistik]", "Landnr='" & USTV_ANTRAG.UStVAn_LandNr & "'", "FMZOLL") setValue(USTV_ANTRAG) + + If USTV_ANTRAG.UStVAn_letzteAenderung IsNot Nothing AndAlso Not IsDBNull(USTV_ANTRAG.UStVAn_letzteAenderung) AndAlso USTV_ANTRAG.UStVAn_letzteAenderungUser IsNot Nothing AndAlso Not IsDBNull(USTV_ANTRAG.UStVAn_letzteAenderungUser) Then + lblVZAenderungsdatum.Text = CDate(USTV_ANTRAG.UStVAn_letzteAenderung).ToString + lblVZAenderungsdatum.Text &= " (" & USTV_ANTRAG.UStVAn_letzteAenderungUser & ")" + Label20.Visible = True + lblVZAenderungsdatum.Visible = True + End If + Dim KUNDE As New cKunde(USTV_ANTRAG.UStVAn_KuNr) Dim KUNDE_ERW As New cKundenErweitert(USTV_ANTRAG.UStVAn_KuNr) If KUNDE IsNot Nothing Then @@ -340,21 +356,21 @@ Public Class frmMDM_USTVAntrag End If If posIndex > 0 Then - posIndex = posIndex - 1 - If posIndex > 0 And dgvUSTVPositionen.Rows.Count > posIndex Then + Dim idx As Integer = posIndex - 1 + If idx >= 0 AndAlso dgvUSTVPositionen.Rows.Count > idx Then dgvUSTVPositionen.ClearSelection() - dgvUSTVPositionen.Rows(posIndex).Selected = True - For Each c As DataGridViewCell In dgvUSTVPositionen.Rows(posIndex).Cells + dgvUSTVPositionen.Rows(idx).Selected = True + For Each c As DataGridViewCell In dgvUSTVPositionen.Rows(idx).Cells If c.Visible Then - dgvUSTVPositionen.CurrentCell = c 'Damit der Cursor in der DGV richtig steht + dgvUSTVPositionen.CurrentCell = c Exit For End If Next - End If - End If + suppressSelectionChanged = False + End Sub Sub setValue(USTV_ANTRAG As VERAG_PROG_ALLGEMEIN.cUSTVAntrag) @@ -385,6 +401,8 @@ Public Class frmMDM_USTVAntrag cbxRGretour.Checked = USTV_ANTRAG.UStVAn_RGRetour cbxSicherheit.Checked = USTV_ANTRAG.UStVAn_Sicherheit + txtErstattung.Text = CDbl(SQL.getValueTxtBySql("SELECT SUM(dbo.tblUStVErstattung.UStVEr_USteuerbetragEUR) FROM dbo.tblUStVErstattung WHERE dbo.tblUStVErstattung.UStVAn_ID = " & USTV_ANTRAG.UStVAn_ID, "FMZOLL",,, "0")) + End Sub Sub getValue(ByRef USTV_ANTRAG As VERAG_PROG_ALLGEMEIN.cUSTVAntrag, Optional ADR As cAdressen = Nothing, Optional FIRMA As cFirmen = Nothing) @@ -473,7 +491,6 @@ Public Class frmMDM_USTVAntrag If USTV_ANTRAG.UStVAn_Gewerbe Is Nothing Then USTV_ANTRAG.UStVAn_Gewerbe = "Transportunternehmer" If USTV_ANTRAG.UStVAn_Erklärung_9_a Is Nothing Then USTV_ANTRAG.UStVAn_Erklärung_9_a = "Warentransport" If USTV_ANTRAG.UStVAn_Ausstellungsort Is Nothing Then USTV_ANTRAG.UStVAn_Ausstellungsort = "Suben" - If USTV_ANTRAG.UStVAn_Erklärung_9_b_1 Is Nothing Then USTV_ANTRAG.UStVAn_Erklärung_9_b_1 = False If USTV_ANTRAG.UStVAn_Erklärung_9_b_2 Is Nothing Then USTV_ANTRAG.UStVAn_Erklärung_9_b_2 = False If USTV_ANTRAG.UStVAn_Erklärung_9_b_3 Is Nothing Then USTV_ANTRAG.UStVAn_Erklärung_9_b_3 = False @@ -497,7 +514,6 @@ Public Class frmMDM_USTVAntrag End Sub Private Sub UsrCntlDatenDetails1_Changed(POSId) Handles UstCntlUSTV_AntragPosition1.CHANGED - 'refreshDgv(kdNr, SDLNr, Kfz, History)'?????????????? ausgebelndet,was das ein VErsuch? 31.07.2017 Dim posIdinDGV As Boolean = False @@ -579,7 +595,7 @@ Public Class frmMDM_USTVAntrag Antrag_LandKz = SQL.DLookup("LandKz", "[Länderverzeichnis für die Außenhandelsstatistik]", "Landnr='" & USTV_ANTRAG.UStVAn_LandNr & "'", "FMZOLL") setValue(USTV_ANTRAG) - If (CInt(USTV_ANTRAG.UStVAn_KuNr) >= 150000 AndAlso CInt(USTV_ANTRAG.UStVAn_KuNr) <160000) Or (CInt(USTV_ANTRAG.UStVAn_KuNr) >= 180000 AndAlso CInt(USTV_ANTRAG.UStVAn_KuNr) <190000) Then + If (CInt(USTV_ANTRAG.UStVAn_KuNr) >= 150000 AndAlso CInt(USTV_ANTRAG.UStVAn_KuNr) < 160000) Or (CInt(USTV_ANTRAG.UStVAn_KuNr) >= 180000 AndAlso CInt(USTV_ANTRAG.UStVAn_KuNr) < 190000) Then btnRMCQuartal.Visible = True Else btnRMCQuartal.Visible = False @@ -745,6 +761,7 @@ Public Class frmMDM_USTVAntrag loadUSTVFrom_PLOSE(UStVAn_ID, Antrag_LandKz, cbxArchivierteEintracheNochmalsEinarbetien.Checked, IIf(item.Name = "ploseneu", True, False)) init() ElseIf item.Name = "rmc" Then + VERAG_PROG_ALLGEMEIN.cAllgemein.TESTSYSTEM = False loadUSTVFrom_RMC(UStVAn_ID, Antrag_LandKz, cbxArchivierteEintracheNochmalsEinarbetien.Checked) init() ElseIf item.Name = "mse" Then @@ -1180,7 +1197,7 @@ Public Class frmMDM_USTVAntrag End If - + VERAG_PROG_ALLGEMEIN.cAllgemein.TESTSYSTEM = True If Not alreadyExists(USTV_ANTRAG.UStVAn_KuNr, USTV_ANTRAG.UStVAn_LandNr, USTV_POS) Then USTV_POS.UStVPo_Schnittstelle = True @@ -1835,7 +1852,7 @@ Public Class frmMDM_USTVAntrag dgvUSTVPositionen.GetOrder() getValue(USTV_ANTRAG) - USTV_ANTRAG.UStVAn_letzteAenderung = Now() + 'USTV_ANTRAG.UStVAn_letzteAenderung = Now() If USTV_ANTRAG.SAVE Then init() @@ -1890,7 +1907,7 @@ Public Class frmMDM_USTVAntrag End If - + checkIfMWSTEingangAbrechung() Else @@ -1956,7 +1973,7 @@ Public Class frmMDM_USTVAntrag 'Ende neue Version - 'alte Version wieder aktiviert. + 'Start alte Version -------------------------------------- 'Dim dt_existingUSTVA As DataTable = SQL.loadDgvBySql("Select UStVAn_ID,UStVAn_ReDatvon, UStVAn_ReDatBis, UStVAn_AntragEingereichtAm from tblUStVAntrag where UStvAN_KuNr = " & KundenNr & " and (isnull(UStVAn_AntragArt,'MWST') = '" & cboAntragArt._value & "' or UStVAn_AntragArt = '') and UStVAn_LandNr = " & USTV_ANTRAG.UStVAn_LandNr & " @@ -2032,15 +2049,21 @@ Public Class frmMDM_USTVAntrag If UStVPo_ID > 0 Then Dim ANTR_POS As New VERAG_PROG_ALLGEMEIN.cUStVPositionen(USTV_ANTRAG.UStVAn_ID, UStVPo_ID) - Dim ANTR_Leistender As New VERAG_PROG_ALLGEMEIN.cUStVLeistender(ANTR_POS.UStVPo_Leistender) - If Not IsDBNull(ANTR_POS.UStVPo_LeistenderId) AndAlso ANTR_POS.UStVPo_LeistenderId > 0 Then - ANTR_Leistender = New VERAG_PROG_ALLGEMEIN.cUStVLeistender(ANTR_POS.UStVPo_LeistenderId) + If ANTR_POS.UStVPo_Leistender IsNot Nothing Then + Dim ANTR_Leistender As New VERAG_PROG_ALLGEMEIN.cUStVLeistender(ANTR_POS.UStVPo_Leistender) + If Not IsDBNull(ANTR_POS.UStVPo_LeistenderId) AndAlso ANTR_POS.UStVPo_LeistenderId > 0 Then + ANTR_Leistender = New VERAG_PROG_ALLGEMEIN.cUStVLeistender(ANTR_POS.UStVPo_LeistenderId) + End If + UstCntlUSTV_AntragPosition1.Enabled = True + UstCntlUSTV_AntragPosition1.setValues(USTV_ANTRAG.UStVAn_KuNr, ANTR_POS, Antrag_LandKz, ANTR_Leistender, atez_api) + Else + UstCntlUSTV_AntragPosition1.Enabled = True + UstCntlUSTV_AntragPosition1.setValues(USTV_ANTRAG.UStVAn_KuNr, ANTR_POS, Antrag_LandKz, Nothing, atez_api) End If - UstCntlUSTV_AntragPosition1.Enabled = True - UstCntlUSTV_AntragPosition1.setValues(USTV_ANTRAG.UStVAn_KuNr, ANTR_POS, Antrag_LandKz, ANTR_Leistender, atez_api) + Else - UstCntlUSTV_AntragPosition1.reset() + UstCntlUSTV_AntragPosition1.reset(Antrag_LandKz) UstCntlUSTV_AntragPosition1.Enabled = False End If @@ -2061,6 +2084,7 @@ Public Class frmMDM_USTVAntrag Private Sub dgvUSTVPositionen_SelectionChanged(sender As Object, e As EventArgs) Handles dgvUSTVPositionen.SelectionChanged + If suppressSelectionChanged Then Exit Sub If dgvUSTVPositionen.SelectedRows.Count > 0 Then initPosition(dgvUSTVPositionen.SelectedRows(0).Cells("UStVPo_ID").Value) @@ -2296,11 +2320,14 @@ Public Class frmMDM_USTVAntrag Private Sub Button2_Click(sender As Object, e As EventArgs) Handles btnNeuerEintrag.Click - UstCntlUSTV_AntragPosition1.reset() + UstCntlUSTV_AntragPosition1.reset(Antrag_LandKz) UstCntlUSTV_AntragPosition1.UStV_POS = New cUStVPositionen(UStVAn_ID) UstCntlUSTV_AntragPosition1.UStV_POS.UStVPo_ID = USTV_ANTRAG.getMaxPosNr UstCntlUSTV_AntragPosition1.UStV_POS.UStVPo_interneNr = USTV_ANTRAG.getMaxPosinterneNr UstCntlUSTV_AntragPosition1.Enabled = True + UstCntlUSTV_AntragPosition1.txtRgDatum.Focus() + UstCntlUSTV_AntragPosition1.initUsrCntlPDF() + End Sub @@ -2320,53 +2347,57 @@ Public Class frmMDM_USTVAntrag End If - If UstCntlUSTV_AntragPosition1.cbxAPI IsNot Nothing AndAlso UstCntlUSTV_AntragPosition1.cboSchnittstellennr._value IsNot Nothing Then + If UstCntlUSTV_AntragPosition1.cbxAPI IsNot Nothing AndAlso UstCntlUSTV_AntragPosition1.cboSchnittstellennr._value IsNot Nothing Then - If UstCntlUSTV_AntragPosition1.cboSchnittstellennr._value = -1 OrElse UstCntlUSTV_AntragPosition1.UStV_POS.UStVPo_daId_loeschbar Then 'nur Dokumente löschen, die nicht über Schnittstellen geladen wurden! + If UstCntlUSTV_AntragPosition1.cboSchnittstellennr._value = -1 OrElse UstCntlUSTV_AntragPosition1.UStV_POS.UStVPo_daId_loeschbar Then 'nur Dokumente löschen, die nicht über Schnittstellen geladen wurden! - If UstCntlUSTV_AntragPosition1.UStV_POS.UStVPo_daId < 0 OrElse UstCntlUSTV_AntragPosition1.UStV_POS.UStVPo_daId Is Nothing Then + If UstCntlUSTV_AntragPosition1.UStV_POS.UStVPo_daId < 0 OrElse UstCntlUSTV_AntragPosition1.UStV_POS.UStVPo_daId Is Nothing Then - Dim DS = New VERAG_PROG_ALLGEMEIN.cDATENSERVER("DOKUMENTE", "MDM", "MDM", "MDM_DATEN", "USTVA_" & UstCntlUSTV_AntragPosition1.UStV_POS.UStVAn_ID & "_" & UstCntlUSTV_AntragPosition1.UStV_POS.UStVPo_interneNr, "SONSTIGE", USTV_ANTRAG.UStVAn_KuNr) + Dim DS = New VERAG_PROG_ALLGEMEIN.cDATENSERVER("DOKUMENTE", "MDM", "MDM", "MDM_DATEN", "USTVA_" & UstCntlUSTV_AntragPosition1.UStV_POS.UStVAn_ID & "_" & UstCntlUSTV_AntragPosition1.UStV_POS.UStVPo_interneNr, "SONSTIGE", USTV_ANTRAG.UStVAn_KuNr) - If DS IsNot Nothing AndAlso DS.da_id IsNot Nothing Then - If DS.DELETE_COMPLETE() Then - 'löschen nicht vorhandenen Verweis! - SQL.doSQL("update tblUStVPositionen set UStVPo_daId = NULL where UStVAn_ID = " & UstCntlUSTV_AntragPosition1.UStV_POS.UStVAn_ID & " and UStVPo_daId > 0 and isnull(UStVPo_daId, 0) not in (select da_id from tblDatenarchiv) ", "FMZOLL") + 'Datenarchiv/Dokumente/MDM/kdNr/MDM/MDM_Daten/Ustva_id_PosNr - End If - End If - ElseIf UstCntlUSTV_AntragPosition1.UStV_POS.UStVPo_daId > 0 Then - - Dim DS = New VERAG_PROG_ALLGEMEIN.cDATENSERVER(UstCntlUSTV_AntragPosition1.UStV_POS.UStVPo_daId) - - If DS IsNot Nothing AndAlso DS.da_id IsNot Nothing Then - If DS.DELETE_COMPLETE() Then - 'löschen nicht vorhandenen Verweis! - SQL.doSQL("update tblUStVPositionen set UStVPo_daId = NULL where UStVAn_ID = " & UstCntlUSTV_AntragPosition1.UStV_POS.UStVAn_ID & " and UStVPo_daId > 0 and isnull(UStVPo_daId, 0) not in (select da_id from tblDatenarchiv) ", "FMZOLL") - End If + If DS IsNot Nothing AndAlso DS.da_id IsNot Nothing Then + If DS.DELETE_COMPLETE() Then + 'löschen nicht vorhandenen Verweis! + SQL.doSQL("update tblUStVPositionen set UStVPo_daId = NULL where UStVAn_ID = " & UstCntlUSTV_AntragPosition1.UStV_POS.UStVAn_ID & " and UStVPo_daId > 0 and isnull(UStVPo_daId, 0) not in (select da_id from tblDatenarchiv) ", "FMZOLL") End If - End If - - End If - Dim Leistungsbezeichnung = "" - If UstCntlUSTV_AntragPosition1.cboSchnittstellennr._value = 3 Then Leistungsbezeichnung = UstCntlUSTV_AntragPosition1.UStV_POS.UStVPo_Leistungsbezeichnung + ElseIf UstCntlUSTV_AntragPosition1.UStV_POS.UStVPo_daId > 0 Then - If setArchiv(UstCntlUSTV_AntragPosition1.cboSchnittstellennr._value, UstCntlUSTV_AntragPosition1.UStV_POS.UStVPo_ReDat, UstCntlUSTV_AntragPosition1.UStV_POS.UStVPo_ReNr, Leistungsbezeichnung) Then - If UstCntlUSTV_AntragPosition1.UStV_POS.DELETE(UstCntlUSTV_AntragPosition1.UStV_POS.UStVAn_ID, UstCntlUSTV_AntragPosition1.UStV_POS.UStVPo_ID) Then - reorderUSTVAPositions(UstCntlUSTV_AntragPosition1.UStV_POS.UStVAn_ID) + Dim DS = New VERAG_PROG_ALLGEMEIN.cDATENSERVER(UstCntlUSTV_AntragPosition1.UStV_POS.UStVPo_daId) + + If DS IsNot Nothing AndAlso DS.da_id IsNot Nothing Then + If DS.DELETE_COMPLETE() Then + 'löschen nicht vorhandenen Verweis! + SQL.doSQL("update tblUStVPositionen set UStVPo_daId = NULL where UStVAn_ID = " & UstCntlUSTV_AntragPosition1.UStV_POS.UStVAn_ID & " and UStVPo_daId > 0 and isnull(UStVPo_daId, 0) not in (select da_id from tblDatenarchiv) ", "FMZOLL") End If - init() + End If End If - UstCntlUSTV_AntragPosition1.Enabled = False - End If + + + End If + + Dim Leistungsbezeichnung = "" + If UstCntlUSTV_AntragPosition1.cboSchnittstellennr._value = 3 Then Leistungsbezeichnung = UstCntlUSTV_AntragPosition1.UStV_POS.UStVPo_Leistungsbezeichnung + + If setArchiv(UstCntlUSTV_AntragPosition1.cboSchnittstellennr._value, UstCntlUSTV_AntragPosition1.UStV_POS.UStVPo_ReDat, UstCntlUSTV_AntragPosition1.UStV_POS.UStVPo_ReNr, Leistungsbezeichnung) Then + If UstCntlUSTV_AntragPosition1.UStV_POS.DELETE(UstCntlUSTV_AntragPosition1.UStV_POS.UStVAn_ID, UstCntlUSTV_AntragPosition1.UStV_POS.UStVPo_ID) Then + reorderUSTVAPositions(UstCntlUSTV_AntragPosition1.UStV_POS.UStVAn_ID) + End If + init() + End If + init() + + UstCntlUSTV_AntragPosition1.Enabled = False + End Sub Private Sub btnMail_Click(sender As Object, e As EventArgs) Handles btnMail.Click @@ -3244,8 +3275,8 @@ Public Class frmMDM_USTVAntrag Dim count_nichtMWSTOffen As Integer = -1 - count_nichtMWSTOffen = CInt(SQL.getValueTxtBySql("SELECT COUNT(*) FROM [tblUStVErstattung] WHERE [UStVAn_ID] = " & USTV_ANTRAG.UStVAn_ID & " and isnull([GutschriftsDatum],0) = 0 and UStVEr_Importfilename is not null", "FMZOLL")) - If count_nichtMWSTOffen = 0 Then + count_nichtMWSTOffen = CInt(SQL.getValueTxtBySql("SELECT COUNT(*) FROM [tblUStVErstattung] WHERE [UStVAn_ID] = " & USTV_ANTRAG.UStVAn_ID & " and [GutschriftsDatum] is null and UStVEr_Importfilename is not null", "FMZOLL")) + If count_nichtMWSTOffen = 0 AndAlso USTV_ANTRAG.UStVAn_MWSTEingang_offen Then SQL.doSQL("UPDATE [tblUStVAntrag] SET UStVAn_MWSTEingang_offen = 0 WHERE [UStVAn_ID] =" & USTV_ANTRAG.UStVAn_ID, "FMZOLL") End If @@ -3294,25 +3325,27 @@ Public Class frmMDM_USTVAntrag Dim kunde As New cKunde(USTV_ANTRAG.UStVAn_KuNr) Dim kunde_erw As New cKundenErweitert(USTV_ANTRAG.UStVAn_KuNr) - Dim BezAntrag = USTV_ANTRAG.UStVAn_AntragArt & "-Rückerstattung " + Dim BezAntrag = USTV_ANTRAG.UStVAn_AntragArt & "-Rückerstattung " & IIf(kunde_erw.kde_VZ, "VZ ", "") If kunde_erw IsNot Nothing Then - If USTV_ANTRAG.UStVAn_AntragArt = "MÖST" Then + 'NICHT ÜBERSETZEN - Select Case kunde_erw.kde_Fakturierung_Sprache - Case "EN", "TR" : BezAntrag = "Excise duty " - Case "RO" : BezAntrag = "Rambursare acciza " - End Select + 'If USTV_ANTRAG.UStVAn_AntragArt = "MÖST" Then - Else + ' Select Case kunde_erw.kde_Fakturierung_Sprache + ' Case "EN", "TR" : BezAntrag = "Excise duty " + ' Case "RO" : BezAntrag = "Rambursare acciza " + ' End Select - Select Case kunde_erw.kde_Fakturierung_Sprache - Case "EN", "TR" : BezAntrag = "VAT refund " - Case "RO" : BezAntrag = "Rambursare TVA " - End Select + 'Else - End If + ' Select Case kunde_erw.kde_Fakturierung_Sprache + ' Case "EN", "TR" : BezAntrag = "VAT refund " + ' Case "RO" : BezAntrag = "Rambursare TVA " + ' End Select + + 'End If End If @@ -3368,7 +3401,7 @@ Public Class frmMDM_USTVAntrag If UStVAn_ID <= 0 Then Exit Sub - .SET_SQL("SELECT [UStVAn_ID] ,[UStVEr_ID],[UStVEr_USteuerbetragEUR],[Belegdatum],[Belegnummer],[GutschriftsDatum],[GutschriftsNr],UStVEr_VZ,UStVEr_RZVZ,UStVEr_Bank,UStVEr_Differenz,[Berufungsdatum],[Berufungshöhe],[Berufungsgrund],[Bemerkung],[UStVEr_Umrechnungskurs],[UStVEr_USteuerbetrag],[UStVEr_Sachbearbeiter],[UStVEr_Zeitstempel] + .SET_SQL("SELECT [UStVAn_ID] ,[UStVEr_ID],[UStVEr_USteuerbetragEUR],[Belegdatum],[Belegnummer],[GutschriftsDatum],[GutschriftsNr],UStVEr_VZ,UStVEr_RZVZ,UStVEr_Bank,UStVEr_Differenz,[Berufungsdatum],[Berufungshöhe],[Berufungsgrund],[Bemerkung],[UStVEr_Umrechnungskurs],[UStVEr_USteuerbetrag],[UStVEr_Sachbearbeiter],[UStVEr_Zeitstempel],[UStVEr_RK_ID] FROM [tblUStVErstattung] where UStVAn_ID=" & UStVAn_ID & " ORDER BY UStVEr_ID", "FMZOLL") .LOAD() @@ -3385,6 +3418,9 @@ Public Class frmMDM_USTVAntrag .Columns("Belegdatum").Width = 80 .Columns("Belegnummer").Width = 130 + '.Columns("Belegdatum").Visible = False + '.Columns("Belegnummer").Visible = False + .Columns("UStVEr_USteuerbetrag").HeaderText = "USt-Betrag" .Columns("UStVEr_USteuerbetrag").Width = 110 .Columns("UStVEr_USteuerbetrag").DefaultCellStyle.Format = "N2" @@ -3400,6 +3436,9 @@ Public Class frmMDM_USTVAntrag .Columns("Berufungsdatum").HeaderText = "BE-Datum" .Columns("Berufungshöhe").HeaderText = "BE-Höhe" .Columns("Berufungsgrund").HeaderText = "BE-Grund" + .Columns("Berufungsdatum").Visible = False + .Columns("Berufungshöhe").Visible = False + .Columns("Berufungsgrund").Visible = False .Columns("UStVEr_VZ").HeaderText = "VZ" .Columns("UStVEr_RZVZ").HeaderText = "RZVZ" @@ -3423,8 +3462,8 @@ Public Class frmMDM_USTVAntrag .Columns("Berufungsgrund").Width = 100 .Columns("Bemerkung").Width = 200 - .Columns("UStVEr_Umrechnungskurs").HeaderText = "Umrechnungskurs" - .Columns("UStVEr_Umrechnungskurs").Width = 60 + .Columns("UStVEr_Umrechnungskurs").HeaderText = "Kurs" + .Columns("UStVEr_Umrechnungskurs").Width = 30 .Columns("UStVEr_Umrechnungskurs").DefaultCellStyle.Format = "N2" .Columns("UStVEr_Umrechnungskurs").DefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleRight @@ -3438,9 +3477,40 @@ Public Class frmMDM_USTVAntrag .Columns("UStVEr_Sachbearbeiter").AutoSizeMode = DataGridViewAutoSizeColumnMode.Fill .Columns("UStVEr_Zeitstempel").Visible = False + .Columns("UStVEr_RK_ID").Visible = False End If + + Dim c As New DataGridViewImageColumn + c.Name = "clmnPDF" : c.HeaderText = "GS" + ' c.Image = Nothing + c.DefaultCellStyle.NullValue = Nothing + c.ImageLayout = DataGridViewImageCellLayout.Zoom + c.Width = 40 : c.DefaultCellStyle.Padding = New Padding(2) : c.DefaultCellStyle.BackColor = Color.White + 'c.DefaultCellStyle.Tag = "Therefore anzeigen" + + + If Not .Columns.Contains("clmnPDF") Then .Columns.Add(c) + + + + For Each r As DataGridViewRow In .Rows + + Dim rk_id As Integer = -1 + + If Not IsDBNull(r.Cells("UStVEr_RK_ID").Value) Then + rk_id = r.Cells("UStVEr_RK_ID").Value + End If + + + If rk_id > 0 Then + DirectCast(r.Cells("clmnPDF"), DataGridViewImageCell).Value = Nothing + DirectCast(r.Cells("clmnPDF"), DataGridViewImageCell).Value = My.Resources.pdf + End If + + Next + If .RowCount < 1 Then initErstsattungsPosition(-1) @@ -3450,9 +3520,9 @@ Public Class frmMDM_USTVAntrag If posIndex > 0 And dgvErstattungspositionen.Rows.Count > posIndex Then dgvErstattungspositionen.ClearSelection() dgvErstattungspositionen.Rows(posIndex).Selected = True - For Each c As DataGridViewCell In dgvErstattungspositionen.Rows(posIndex).Cells - If c.Visible Then - dgvErstattungspositionen.CurrentCell = c 'Damit der Cursor in der DGV richtig steht + For Each co As DataGridViewCell In dgvErstattungspositionen.Rows(posIndex).Cells + If co.Visible Then + dgvErstattungspositionen.CurrentCell = co 'Damit der Cursor in der DGV richtig steht Exit For End If Next @@ -3506,6 +3576,9 @@ Public Class frmMDM_USTVAntrag Dim DS = New VERAG_PROG_ALLGEMEIN.cDATENSERVER("DOKUMENTE", "MDM", "MDM", "MDM_DATEN", "USTVA_" & UStVAn_ID & "_" & r.Cells("UStVPo_ID").Value, "SONSTIGE", USTV_ANTRAG.UStVAn_KuNr) + ' + ' 'Datenarchiv/Dokumente/MDM/kdNr/MDM/MDM_Daten/Ustva_id_PosNr + If DS IsNot Nothing AndAlso DS.da_id IsNot Nothing Then DS.DELETE_COMPLETE() End If @@ -3870,7 +3943,7 @@ Public Class frmMDM_USTVAntrag Next - If setUSTVA Then SQL.doSQL("UPDATE [tblUStVAntrag] SET UStVAn_VZoffen = 1, UStVAn_letzteAenderung = getDate() WHERE [UStVAn_ID] IN (SELECT distinct([UStVAn_ID]) FROM [tblUStVPositionen] WHERE isnull([UStVPo_VZ],0) = 1 and isnull([UStVPo_VZ_RKID],0) = 0)", "FMZOLL") 'Aktualisierung + If setUSTVA Then SQL.doSQL("UPDATE [tblUStVAntrag] SET UStVAn_VZoffen = 1, UStVAn_letzteAenderung = getDate(), UStVAn_letzteAenderungUser = '" & VERAG_PROG_ALLGEMEIN.cAllgemein.USRKURZNAME & "' WHERE [UStVAn_ID] IN (SELECT distinct([UStVAn_ID]) FROM [tblUStVPositionen] WHERE isnull([UStVPo_VZ],0) = 1 and isnull([UStVPo_VZ_RKID],0) = 0)", "FMZOLL") 'Aktualisierung init() End If @@ -3884,10 +3957,11 @@ Public Class frmMDM_USTVAntrag If VERAG_PROG_ALLGEMEIN.cBerechtignunen.CHECK_BERECHTIGUNG_bool("MDM_USTVA_bearbeiten", Me.FindForm) OrElse VERAG_PROG_ALLGEMEIN.cAllgemein.TESTSYSTEM Then - If vbYes = MsgBox("Möchten Sie die Vorauszahlung der markierten Positionen deaktiveren?", vbYesNoCancel) Then - + If vbYes = MsgBox("Möchten Sie die Vorauszahlung der markierten Positionen deaktivieren?", vbYesNoCancel) Then + Dim setUSTVA As Boolean = False For Each r As DataGridViewRow In dgvUSTVPositionen.SelectedRows + If IsDBNull(r.Cells("UStVPo_VZ_RKID").Value) OrElse r.Cells("UStVPo_VZ_RKID").Value Is Nothing Then 'nur noch nicht abgerech. dürfen gesetzt werden! Dim USTV_POS = New VERAG_PROG_ALLGEMEIN.cUStVPositionen(UStVAn_ID, r.Cells("UStVPo_ID").Value) @@ -3895,6 +3969,7 @@ Public Class frmMDM_USTVAntrag If IsDBNull(USTV_POS.UStVPo_VZ) OrElse USTV_POS.UStVPo_VZ = True Then USTV_POS.UStVPo_VZ = False USTV_POS.SAVE() + setUSTVA = True End If End If @@ -3906,7 +3981,11 @@ Public Class frmMDM_USTVAntrag Dim count_nichtAbgerVZ As Integer = -1 count_nichtAbgerVZ = CInt(SQL.getValueTxtBySql("SELECT COUNT(*) FROM [tblUStVPositionen] WHERE [UStVAn_ID] = " & USTV_ANTRAG.UStVAn_ID & " and [UStVPo_VZ] = 1 and isnull(UStVPo_VZ_RKID,0) = 0", "FMZOLL")) If count_nichtAbgerVZ = 0 Then - SQL.doSQL("UPDATE [tblUStVAntrag] SET UStVAn_VZoffen = 0, UStVAn_letzteAenderung = getDate() WHERE [UStVAn_ID] =" & USTV_ANTRAG.UStVAn_ID, "FMZOLL") + SQL.doSQL("UPDATE [tblUStVAntrag] SET UStVAn_VZoffen = 0, UStVAn_letzteAenderung = getDate(), UStVAn_letzteAenderungUser = '" & VERAG_PROG_ALLGEMEIN.cAllgemein.USRKURZNAME & "' WHERE [UStVAn_ID] =" & USTV_ANTRAG.UStVAn_ID, "FMZOLL") + End If + + If setUSTVA Then + SQL.doSQL("UPDATE [tblUStVAntrag] SET UStVAn_letzteAenderung = getDate(), UStVAn_letzteAenderungUser = '" & VERAG_PROG_ALLGEMEIN.cAllgemein.USRKURZNAME & "' WHERE [UStVAn_ID] =" & USTV_ANTRAG.UStVAn_ID, "FMZOLL") End If init() @@ -4000,12 +4079,17 @@ Public Class frmMDM_USTVAntrag Next - SQL.doSQL("UPDATE [tblUStVAntrag] SET UStVAn_VZoffen = 1, UStVAn_letzteAenderung = getDate() WHERE [UStVAn_ID] IN (SELECT distinct([UStVAn_ID]) FROM [tblUStVPositionen] WHERE isnull([UStVPo_VZ],0) = 1 and isnull([UStVPo_VZ_RKID],0) = 0)", "FMZOLL") 'Aktualisierung + SQL.doSQL("UPDATE [tblUStVAntrag] SET UStVAn_VZoffen = 1 WHERE [UStVAn_ID] IN (SELECT distinct([UStVAn_ID]) FROM [tblUStVPositionen] WHERE isnull([UStVPo_VZ],0) = 1 and isnull([UStVPo_VZ_RKID],0) = 0)", "FMZOLL") 'Aktualisierung + + + If isSet Then + SQL.doSQL("UPDATE [tblUStVAntrag] SET UStVAn_letzteAenderung = getDate(), UStVAn_letzteAenderungUser = '" & VERAG_PROG_ALLGEMEIN.cAllgemein.USRKURZNAME & "' WHERE [UStVAn_ID] =" & USTV_ANTRAG.UStVAn_ID, "FMZOLL") 'Aktualisierung + End If init() - End If + End If - Else + Else MsgBox("NICHT BERECHTIGT") @@ -4107,7 +4191,7 @@ Public Class frmMDM_USTVAntrag Dim TextHTML = "" If mailText <> "" Then - TextHTML = "
" & mailText.Replace(ControlChars.Lf, "
") & cFakturierung.getSignature(AD.LandKz, 19,,,,,, ) & "
" + TextHTML = "
" & mailText.Replace(ControlChars.Lf, "
") & cFakturierung.getSignature(AD.LandKz, 19,,,,,, ) & "
" Mail.HTMLBody = TextHTML End If @@ -4632,7 +4716,8 @@ Public Class frmMDM_USTVAntrag BANK_OWNER = FIRMA.Firma_Bez BANK_IBAN = FIRMA.Firma_IBAN1 BANK_BIC = FIRMA.Firma_BIC1 - BankOwnerType = "applicant" + + BankOwnerType = "representative" If BANK_BIC.ToString.Contains("BIC:") Then BANK_BIC = BANK_BIC.ToString.Replace("BIC:", "") BANK_BIC = BANK_BIC.Trim() @@ -4656,7 +4741,7 @@ Public Class frmMDM_USTVAntrag BANK_BIC = dtBank.Rows(0).Item("bnk_bic") End If 'wenn nicht hinterlegt, dann leer lassen! - BankOwnerType = "representative" + BankOwnerType = "applicant" End Select Dim app As New GlobalVATRefundApplication_HR() With { @@ -4873,7 +4958,7 @@ Public Class frmMDM_USTVAntrag ElseIf SchnittstellenNr = 9 Then LeistungsBez = "maut" 'MSE immer MAUT Else - If LeistungsBez.Contains("maut") Or LeistungsBez.Contains("toll") Then + If LeistungsBez.Contains("maut") Or LeistungsBez.Contains("toll") Or LeistungsBez.Contains("abgasplakette") Then list.Add("maut") End If If LeistungsBez.Contains("diesel") Or LeistungsBez.Contains("fuel") Then @@ -5373,21 +5458,53 @@ Public Class frmMDM_USTVAntrag End Function - Private Sub txtRZ_ValueChanged() Handles txtRZ.TextChanged, txtVZ.TextChanged + Private Sub txtRZ_ValueChanged() Handles txtRZ.TextChanged, txtVZ.TextChanged, txtErstattung.TextChanged + Dim VZ As Double = 0 Dim RZ As Double = 0 + Dim ERST As Double = 0 + If txtVZ.Text <> "" AndAlso IsNumeric(txtVZ.Text) Then VZ = CDbl(txtVZ.Text) - If txtRZ.Text <> "" AndAlso IsNumeric(txtRZ.Text) Then - RZ = CDbl(txtRZ.Text) - End If - - txtVZOffen.Text = VZ - RZ - End If + If txtRZ.Text <> "" AndAlso IsNumeric(txtRZ.Text) Then + RZ = CDbl(txtRZ.Text) + End If + + If txtErstattung.Text <> "" AndAlso IsNumeric(txtErstattung.Text) Then + ERST = CDbl(txtErstattung.Text) + End If + + Dim offenerBetrag As Double = VZ - RZ - ERST + If offenerBetrag < 0 Then offenerBetrag = 0 + + txtVZOffen.Text = offenerBetrag.ToString + End Sub + Private Sub dgvErstattungspositionen_CellContentDoubleClick(sender As Object, e As DataGridViewCellEventArgs) Handles dgvErstattungspositionen.CellContentDoubleClick + + Try + If e.RowIndex >= 0 AndAlso e.ColumnIndex >= 0 Then + + Dim pdf As String = "" + pdf = func.getPDF(1, Nothing, Nothing, dgvErstattungspositionen.Rows(e.RowIndex).Cells("UStVEr_RK_ID").Value, False, False, Antrag_LandKz, USTV_ANTRAG, New cFakturierung, False) + + If System.IO.File.Exists(pdf) Then + Process.Start(pdf) + End If + + End If + Catch ex As Exception + VERAG_PROG_ALLGEMEIN.cErrorHandler.ERR(ex.Message, ex.StackTrace, System.Reflection.MethodInfo.GetCurrentMethod.Name) + Me.Cursor = Cursors.Default + End Try + Me.Cursor = Cursors.Default + + + + End Sub Public Shared Function rearangePosNrByLeistender(UStVAn_ID As Integer) diff --git a/SDL/USTV/usrCntlUSTV.vb b/SDL/USTV/usrCntlUSTV.vb index f29d8c7d..8c8f7024 100644 --- a/SDL/USTV/usrCntlUSTV.vb +++ b/SDL/USTV/usrCntlUSTV.vb @@ -394,7 +394,7 @@ Public Class usrCntlUSTV If Not col.ColumnName.Contains(colName) Then col.ColumnName = col.ColumnName.Replace("UStVAn_", "") Next - cProgramFunctions.genExcelFromDT_NEW(dtNew, {"K1:K" & (dtNew.Rows.Count + 1), "O1:T" & (dtNew.Rows.Count + 1)},,,,, True) + cProgramFunctions.genExcelFromDT_NEW(dtNew, {"K1:K" & (dtNew.Rows.Count + 1), "O1:T" & (dtNew.Rows.Count + 1)},,,, "", True) End If @@ -1203,7 +1203,7 @@ Public Class usrCntlUSTV If dtVorschau.Columns.Contains("LandNr") Then dtVorschau.Columns.Remove("LandNr") - cProgramFunctions.genExcelFromDT_NEW(dtVorschau, {"G1:G" & (dtVorschau.Rows.Count + 1)},,,,, True) + cProgramFunctions.genExcelFromDT_NEW(dtVorschau, {"G1:G" & (dtVorschau.Rows.Count + 1)},,,, "", True) @@ -1320,7 +1320,7 @@ Public Class usrCntlUSTV If dtVorschau.Columns.Contains("E-Mail") Then dtVorschau.Columns.Remove("E-Mail") If dtVorschau.Columns.Contains("E-Mail2") Then dtVorschau.Columns.Remove("E-Mail2") - cProgramFunctions.genExcelFromDT_NEW(dtVorschau,,,,,, True) + cProgramFunctions.genExcelFromDT_NEW(dtVorschau,,,,, "", True) ElseIf item.Name = "mail" Then @@ -1482,7 +1482,7 @@ Public Class usrCntlUSTV If item.Name = "excel" Then - cProgramFunctions.genExcelFromDT_NEW(dtVorschau_3470, {"F1:F" & (dtVorschau_3470.Rows.Count + 1)}, False,,,, True) + cProgramFunctions.genExcelFromDT_NEW(dtVorschau_3470, {"F1:F" & (dtVorschau_3470.Rows.Count + 1)}, False,,, "", True) ElseIf item.Name = "mail" Then @@ -1750,7 +1750,7 @@ Public Class usrCntlUSTV End If - cProgramFunctions.genExcelFromDT_NEW(dtVorauszahlung,,,,,, True) + cProgramFunctions.genExcelFromDT_NEW(dtVorauszahlung,,,,, "", True) End Sub @@ -1968,8 +1968,8 @@ Public Class usrCntlUSTV Dim letzteZeile As Integer = Blatt.UsedRange.Rows.Count Dim input = Convert.ToString(Blatt.Cells(1, 1).Value).Trim() - If input <> "" AndAlso input.StartsWith("MWST-Eingang") Then - BelegdatumInput = input.Replace("MWST-Eingang", "") + If input <> "" AndAlso input.StartsWith("MWST Eingänge ") Then + BelegdatumInput = input.Replace("MWST Eingänge ", "") BelegdatumInput = BelegdatumInput.Trim End If @@ -2065,7 +2065,8 @@ Public Class usrCntlUSTV .btnPreisliste.Visible = False .dgvHandling.RowHeadersVisible = False .Button2.Text = "Importieren" - + '.cbxDivers.Visible = True + '.cbxDivers.Text = "VZ und RZ-Beträge im Antrag erhöhen" End With frm.ShowDialog() @@ -2073,108 +2074,120 @@ Public Class usrCntlUSTV If frm.DialogResult = DialogResult.OK Then - For Each r As DataRow In dt.Rows + For Each r As DataGridViewRow In frm.dgvHandling.SelectedRows - Dim BelegNr = r.Item("BelegNr") - Dim USTV_ANTRAG = New VERAG_PROG_ALLGEMEIN.cUSTVAntrag(r.Item("AntragID")) + Dim BelegNr = r.Cells("BelegNr").Value + Dim USTV_ANTRAG = New VERAG_PROG_ALLGEMEIN.cUSTVAntrag(r.Cells("AntragID").Value) - If USTV_ANTRAG.hasEntry Then + If USTV_ANTRAG.hasEntry Then - If r.Item("3470").ToString.ToLower = "ja" Then + If r.Cells("3470").Value.ToString.ToLower = "ja" Then USTV_ANTRAG.UStVAn_Sicherheit = True End If + Dim updateVURZ As Boolean = False + updateVURZ = False 'frm.cbxDivers.Checked - Dim UStV_ERS = New VERAG_PROG_ALLGEMEIN.cUStVErstattungPositionen(Belegdatum, BelegNr, fd.FileName) - If Not UStV_ERS.hasEntry Then + Dim UStV_ERS = New VERAG_PROG_ALLGEMEIN.cUStVErstattungPositionen(Belegdatum, BelegNr, fd.SafeFileName, USTV_ANTRAG.UStVAn_ID) + If Not UStV_ERS.hasEntry Then Dim isVZ As Boolean = False UStV_ERS.UStVEr_ID = USTV_ANTRAG.getMaxPosNrErst() UStV_ERS.UStVEr_interneNr = USTV_ANTRAG.getMaxinternePosNrErst() - UStV_ERS.UStVAn_ID = USTV_ANTRAG.UStVAn_ID - UStV_ERS.Belegnummer = BelegNr - UStV_ERS.UStVEr_USteuerbetragEUR = r.Item("BetragEUR") - UStV_ERS.UStVEr_Importfilename = fd.SafeFileName - UStV_ERS.UStVEr_Sachbearbeiter = VERAG_PROG_ALLGEMEIN.cAllgemein.USRKURZNAME - UStV_ERS.UStVEr_Zeitstempel = Now + UStV_ERS.UStVAn_ID = USTV_ANTRAG.UStVAn_ID + UStV_ERS.Belegnummer = BelegNr + UStV_ERS.UStVEr_USteuerbetragEUR = r.Cells("Bank").Value + UStV_ERS.UStVEr_Importfilename = fd.SafeFileName + UStV_ERS.UStVEr_Sachbearbeiter = VERAG_PROG_ALLGEMEIN.cAllgemein.USRKURZNAME + UStV_ERS.UStVEr_Zeitstempel = Now - If USTV_ANTRAG.UStVAn_Währungscode <> "EUR" Then - Dim kurs As New cEZB_Waehrungskurse(USTV_ANTRAG.UStVAn_Währungscode) - UStV_ERS.UStVEr_USteuerbetrag = System.Math.Round(kurs.EXCHANGE_EURTOCUR(UStV_ERS.UStVEr_USteuerbetragEUR, USTV_ANTRAG.UStVAn_Währungscode, CDate(Belegdatum)), 2) - UStV_ERS.UStVEr_Umrechnungskurs = Math.floor((CDbl(UStV_ERS.UStVEr_USteuerbetrag) / CDbl(UStV_ERS.UStVEr_USteuerbetragEUR) * 100 + 0.5)) / 100 - Else - UStV_ERS.UStVEr_USteuerbetrag = r.Item("BetragEUR") - UStV_ERS.UStVEr_Umrechnungskurs = 1 - End If + If USTV_ANTRAG.UStVAn_Währungscode <> "EUR" Then + Dim kurs As New cEZB_Waehrungskurse(USTV_ANTRAG.UStVAn_Währungscode) + UStV_ERS.UStVEr_USteuerbetrag = System.Math.Round(kurs.EXCHANGE_EURTOCUR(UStV_ERS.UStVEr_USteuerbetragEUR, USTV_ANTRAG.UStVAn_Währungscode, CDate(Belegdatum)), 2) + UStV_ERS.UStVEr_Umrechnungskurs = Math.floor((CDbl(UStV_ERS.UStVEr_USteuerbetrag) / CDbl(UStV_ERS.UStVEr_USteuerbetragEUR) * 100 + 0.5)) / 100 + Else + UStV_ERS.UStVEr_USteuerbetrag = r.Cells("Bank").Value + UStV_ERS.UStVEr_Umrechnungskurs = 1 + End If - Dim Bemerkung As String = "" + Dim Bemerkung As String = "" - If Not String.IsNullOrWhiteSpace(r.Item("VZ")) AndAlso IsNumeric(r.Item("VZ")) AndAlso Not IsDBNull(r.Item("VZ")) AndAlso CDbl(r.Item("VZ")) <> 0 Then - Bemerkung &= "VZ: " & CDbl(r.Item("VZ")).ToString("N2") & " " & USTV_ANTRAG.UStVAn_Währungscode + If Not String.IsNullOrWhiteSpace(r.Cells("VZ").Value) AndAlso IsNumeric(r.Cells("VZ").Value) AndAlso Not IsDBNull(r.Cells("VZ").Value) AndAlso CDbl(r.Cells("VZ").Value) <> 0 Then + Bemerkung &= "VZ: " & CDbl(r.Cells("VZ").Value).ToString("N2") & " EUR " isVZ = True - UStV_ERS.UStVEr_VZ = CDbl(r.Item("VZ")) + UStV_ERS.UStVEr_VZ = CDbl(r.Cells("VZ").Value) - If USTV_ANTRAG.UStVAn_VZBetrag Is Nothing OrElse IsNothing(USTV_ANTRAG.UStVAn_VZBetrag) Then + If updateVURZ Then + If USTV_ANTRAG.UStVAn_VZBetrag Is Nothing OrElse IsDBNull(USTV_ANTRAG.UStVAn_VZBetrag) Then USTV_ANTRAG.UStVAn_VZBetrag = UStV_ERS.UStVEr_VZ + Else + USTV_ANTRAG.UStVAn_VZBetrag += UStV_ERS.UStVEr_VZ End If - End If - If Not String.IsNullOrWhiteSpace(r.Item("Bank")) AndAlso IsNumeric(r.Item("Bank")) AndAlso Not IsDBNull(r.Item("Bank")) AndAlso CDbl(r.Item("Bank")) <> 0 Then - Bemerkung &= ", a.K. : " & CDbl(r.Item("Bank")).ToString("N2") & " " & USTV_ANTRAG.UStVAn_Währungscode - UStV_ERS.UStVEr_Bank = CDbl(r.Item("Bank")) - End If + + End If + + If Not String.IsNullOrWhiteSpace(r.Cells("Bank").Value) AndAlso IsNumeric(r.Cells("Bank").Value) AndAlso Not IsDBNull(r.Cells("Bank").Value) AndAlso CDbl(r.Cells("Bank").Value) <> 0 Then + Bemerkung &= ", a.K. : " & CDbl(r.Cells("Bank").Value).ToString("N2") & " EUR" + UStV_ERS.UStVEr_Bank = CDbl(r.Cells("Bank").Value) + End If If isVZ Then - If Not String.IsNullOrWhiteSpace(r.Item("VZDiff")) AndAlso IsNumeric(r.Item("VZDiff")) AndAlso Not IsDBNull(r.Item("VZDiff")) AndAlso CDbl(r.Item("VZDiff")) <> 0 Then - Bemerkung &= ", VZDiff: " & CDbl(r.Item("VZDiff")).ToString("N2") - UStV_ERS.UStVEr_Differenz = CDbl(r.Item("VZDiff")) + If Not String.IsNullOrWhiteSpace(r.Cells("VZDiff").Value) AndAlso IsNumeric(r.Cells("VZDiff").Value) AndAlso Not IsDBNull(r.Cells("VZDiff").Value) AndAlso CDbl(r.Cells("VZDiff").Value) <> 0 Then + Bemerkung &= ", VZDiff: " & CDbl(r.Cells("VZDiff").Value).ToString("N2") + UStV_ERS.UStVEr_Differenz = CDbl(r.Cells("VZDiff").Value) End If Else - If Not String.IsNullOrWhiteSpace(r.Item("Diff")) AndAlso IsNumeric(r.Item("Diff")) AndAlso Not IsDBNull(r.Item("Diff")) AndAlso CDbl(r.Item("Diff")) <> 0 Then - Bemerkung &= ", Diff: " & CDbl(r.Item("Diff")).ToString("N2") - UStV_ERS.UStVEr_Differenz = CDbl(r.Item("Diff")) + If Not String.IsNullOrWhiteSpace(r.Cells("Diff").Value) AndAlso IsNumeric(r.Cells("Diff").Value) AndAlso Not IsDBNull(r.Cells("Diff").Value) AndAlso CDbl(r.Cells("Diff").Value) <> 0 Then + Bemerkung &= ", Diff: " & CDbl(r.Cells("Diff").Value).ToString("N2") + UStV_ERS.UStVEr_Differenz = CDbl(r.Cells("Diff").Value) End If End If - If Not String.IsNullOrWhiteSpace(r.Item("RZVZ")) AndAlso IsNumeric(r.Item("RZVZ")) AndAlso Not IsDBNull(r.Item("RZVZ")) AndAlso CDbl(r.Item("RZVZ")) <> 0 Then - UStV_ERS.UStVEr_RZVZ = CDbl(r.Item("RZVZ")).ToString("N2") - If USTV_ANTRAG.UStVAn_RZBetragVZ Is Nothing OrElse IsDBNull(USTV_ANTRAG.UStVAn_RZBetragVZ) Then - USTV_ANTRAG.UStVAn_RZBetragVZ = UStV_ERS.UStVEr_RZVZ + If Not String.IsNullOrWhiteSpace(r.Cells("RZVZ").Value) AndAlso IsNumeric(r.Cells("RZVZ").Value) AndAlso Not IsDBNull(r.Cells("RZVZ").Value) AndAlso CDbl(r.Cells("RZVZ").Value) <> 0 Then + UStV_ERS.UStVEr_RZVZ = CDbl(r.Cells("RZVZ").Value).ToString("N2") + If updateVURZ Then + If USTV_ANTRAG.UStVAn_RZBetragVZ Is Nothing OrElse IsDBNull(USTV_ANTRAG.UStVAn_RZBetragVZ) Then + USTV_ANTRAG.UStVAn_RZBetragVZ = UStV_ERS.UStVEr_RZVZ + Else + USTV_ANTRAG.UStVAn_RZBetragVZ += UStV_ERS.UStVEr_RZVZ + End If End If + End If If Bemerkung <> "" Then - If Bemerkung.StartsWith(", ") Then - Bemerkung = Bemerkung.Remove(0, 2) - End If - - UStV_ERS.Bemerkung = Bemerkung - + If Bemerkung.StartsWith(", ") Then + Bemerkung = Bemerkung.Remove(0, 2) End If - - If UStV_ERS.SAVE() Then - USTV_ANTRAG.UStVAn_MWSTEingang_offen = True - USTV_ANTRAG.SAVE() - counter += 1 - End If + UStV_ERS.Bemerkung = Bemerkung End If + If UStV_ERS.SAVE() Then + USTV_ANTRAG.UStVAn_MWSTEingang_offen = True + USTV_ANTRAG.SAVE() + counter += 1 + End If + End If - Next - importiert = True + End If + + Next + + importiert = True MsgBox(counter & " von " & dt.Rows.Count & " erfolgreich importiert!") End If diff --git a/SDL/USTV/ustCntlUSTV_AntragPosition.Designer.vb b/SDL/USTV/ustCntlUSTV_AntragPosition.Designer.vb index 23052ca0..2f50bf5c 100644 --- a/SDL/USTV/ustCntlUSTV_AntragPosition.Designer.vb +++ b/SDL/USTV/ustCntlUSTV_AntragPosition.Designer.vb @@ -541,6 +541,8 @@ Partial Class ustCntlUSTV_AntragPosition Me.cbxAntragsfilter._showdate = False Me.cbxAntragsfilter._value = "" Me.cbxAntragsfilter.AutoSize = True + Me.cbxAntragsfilter.Checked = True + Me.cbxAntragsfilter.CheckState = System.Windows.Forms.CheckState.Checked Me.cbxAntragsfilter.Location = New System.Drawing.Point(779, 29) Me.cbxAntragsfilter.Name = "cbxAntragsfilter" Me.cbxAntragsfilter.Size = New System.Drawing.Size(134, 17) diff --git a/SDL/USTV/ustCntlUSTV_AntragPosition.vb b/SDL/USTV/ustCntlUSTV_AntragPosition.vb index 3ec96229..47ccd0bd 100644 --- a/SDL/USTV/ustCntlUSTV_AntragPosition.vb +++ b/SDL/USTV/ustCntlUSTV_AntragPosition.vb @@ -5,12 +5,14 @@ Public Class ustCntlUSTV_AntragPosition Public UStV_Leist As VERAG_PROG_ALLGEMEIN.cUStVLeistender = Nothing Dim sql As New VERAG_PROG_ALLGEMEIN.SQL Public Antrag_LandKz = "" - Dim kdnr = "" Public Event EV_PREV() Public Event EV_NEXT() Public Event CHANGED(UStVPo_ID) - Dim gridAktiv = False - Dim txtChanged As Boolean = False + + Private _kundenNr As Integer + Private _gridAktiv As Boolean + Private _txtChanged As Boolean + Dim API As cATEZ_NCTS_IN Private Sub btnBildAuf_Click(sender As Object, e As EventArgs) Handles btnBildAuf.Click RaiseEvent EV_PREV() @@ -20,13 +22,12 @@ Public Class ustCntlUSTV_AntragPosition RaiseEvent EV_NEXT() End Sub - Sub reset() + Sub reset(Antrag_LandKz As String) txtRgDatum._value = "" txtRgNr._value = "" btnLeistenderSave.Visible = False - txtUmrechnungskurs._value = 1 + txtUmrechnungskurs._value = "" txtLeistungsbezeichnung._value = "" - txtUmrechnungskurs._value = 1 txtUSTBetrag._value = 0 txtUSTBetragEUR._value = 0 txtNettobetrag._value = 0 @@ -45,16 +46,22 @@ Public Class ustCntlUSTV_AntragPosition txtOrt.Text = "" txtLand.Text = "" txtUIDNr.Text = "" + Me.Antrag_LandKz = Antrag_LandKz - gridAktiv = True - Dim filter As String = "UstV_aktiv = 1" - If Antrag_LandKz <> "" AndAlso cbxAntragsfilter.Checked Then - filter &= " and left(UstV_Leistender_UstNr,2)='" & Antrag_LandKz & "'" - sbLeistender.initSearchBox(Me.FindForm, "[UStV_LeistenderId],[UStV_Leistender], ([UStV_Leistender]) as Leistender,[UstV_Leistender_PLZ] as PLZ, ([UstV_Leistender_Strasse] + ' ' +[UstV_Leistender_StrasseNr]) as Strasse, [UstV_Leistender_Stadt] as Stadt FROM [tblUStVLeistender]", {"UStV_Leistender", "UstV_Leistender_UstNr"}, filter, "UStV_Leistender", "UStV_LeistenderId", "Leistender", "FMZOLL",, 400, 200, {"UStV_Leistender", "UStV_LeistenderId"}) - Else - sbLeistender.initSearchBox(Me.FindForm, "[UStV_LeistenderId],[UStV_Leistender], ([UStV_Leistender]) as Leistender,[UstV_Leistender_PLZ] as PLZ, ([UstV_Leistender_Strasse] + ' ' +[UstV_Leistender_StrasseNr]) as Strasse, [UstV_Leistender_Stadt] as Stadt FROM [tblUStVLeistender]", {"UStV_Leistender", "UstV_Leistender_UstNr"}, filter, "UStV_Leistender", "UStV_LeistenderId", "Leistender", "FMZOLL",, 400, 200, {"UStV_Leistender", "UStV_LeistenderId"}) - End If + + _gridAktiv = True + + InitLeistenderSearchBox() + + End Sub + + Sub initUsrCntlPDF() + + scanSonstiges.INIT(_kundenNr, "MDM", "MDM_DATEN", "USTVA_" & UStV_POS.UStVAn_ID & "_" & UStV_POS.UStVPo_interneNr) + 'scanSonstiges.INIT_daId(da_id) + scanSonstiges.Enabled = True + btnAPIUbload.Enabled = False End Sub @@ -62,26 +69,46 @@ Public Class ustCntlUSTV_AntragPosition initSchnittstellenNr() - gridAktiv = False + _gridAktiv = False btnLeistenderSave.Visible = False Me.Antrag_LandKz = Antrag_LandKz + Me.UStV_POS = UStV_POS - Me.kdnr = kdnr + Me._kundenNr = kdnr cbxAPI.Checked = If(UStV_POS.UStVPo_Schnittstelle, False) cboSchnittstellennr.changeItem(If(UStV_POS.UStVPo_SchnittstellenNr, "")) - txtRgDatum._value = If(UStV_POS.UStVPo_ReDat, "") - txtRgNr._value = If(UStV_POS.UStVPo_ReNr, "") - lblSachbearbeiter.Text = If(UStV_POS.UStVPo_Sachbearbeiter, "") + + If UStV_POS.UStVPo_Zeitstempel IsNot Nothing Then lblAenderungsdatum.Text = CDate(UStV_POS.UStVPo_Zeitstempel).ToString("dd.MM.yyyy HH:mm") cboLeistungsgeber.Text = If(UStV_POS.UStVPo_Leistender, "") - txtLeistungsbezeichnung.Text = If(UStV_POS.UStVPo_Leistungsbezeichnung, "") - txtUSTBetrag.Text = If(UStV_POS.UStVPo_USteuerbetrag, "") - txtUmrechnungskurs.Text = If(UStV_POS.UStVPo_Umrechnungskurs, "") - txtUSTBetragEUR.Text = If(UStV_POS.UStVPo_USteuerbetragEUR, "") - txtNettobetrag.Text = If(UStV_POS.UStVPo_Nettobetrag, "") - txtNettobetragEUR.Text = If(UStV_POS.UStVPo_NettobetragEUR, "") - sbLeistender.Text = UStV_Leitender.UStV_Leistender + + txtRgDatum._value = ValueOrEmpty(UStV_POS.UStVPo_ReDat) + txtRgNr._value = ValueOrEmpty(UStV_POS.UStVPo_ReNr) + txtLeistungsbezeichnung.Text = ValueOrEmpty(UStV_POS.UStVPo_Leistungsbezeichnung) + txtUSTBetrag.Text = ValueOrEmpty(UStV_POS.UStVPo_USteuerbetrag) + txtUmrechnungskurs.Text = ValueOrEmpty(UStV_POS.UStVPo_Umrechnungskurs) + txtUSTBetragEUR.Text = ValueOrEmpty(UStV_POS.UStVPo_USteuerbetragEUR) + txtNettobetrag.Text = ValueOrEmpty(UStV_POS.UStVPo_Nettobetrag) + txtNettobetragEUR.Text = ValueOrEmpty(UStV_POS.UStVPo_NettobetragEUR) + lblSachbearbeiter.Text = ValueOrEmpty(UStV_POS.UStVPo_Sachbearbeiter) + + If UStV_Leitender IsNot Nothing Then + sbLeistender.Text = UStV_Leitender.UStV_Leistender + If IsNumeric(UStV_Leitender.UStV_LeistenderId) AndAlso UStV_Leitender.UStV_LeistenderId > 0 Then + sbLeistender._value = UStV_Leitender.UStV_LeistenderId + sbLeistender_VALUE_CHANGED() + Else + 'sbLeistender._value = "" + End If + 'sbLeistender._value = "" + Else + sbLeistender._value = "" + sbLeistender.Text = "" + End If + + + loadChangedDSToPanel(UStV_Leitender, True) API = atez_api @@ -115,10 +142,11 @@ Public Class ustCntlUSTV_AntragPosition scanSonstiges.Enabled = UStV_POS.UStVPo_daId_loeschbar 'Not UStV_POS.UStVPo_SchnittstellenNr > 0 btnAPIUbload.Enabled = True 'hochladbar aber nicht einfügen lassen! UStV_POS.UStVPo_daId_loeschbar Else - scanSonstiges.INIT(kdnr, "MDM", "MDM_DATEN", "USTVA_" & UStV_POS.UStVAn_ID & "_" & UStV_POS.UStVPo_interneNr) - 'scanSonstiges.INIT_daId(da_id) - scanSonstiges.Enabled = True - btnAPIUbload.Enabled = False + initUsrCntlPDF() + 'scanSonstiges.INIT(kdnr, "MDM", "MDM_DATEN", "USTVA_" & UStV_POS.UStVAn_ID & "_" & UStV_POS.UStVPo_interneNr) + ''scanSonstiges.INIT_daId(da_id) + 'scanSonstiges.Enabled = True + 'btnAPIUbload.Enabled = False End If If txtNettobetrag.Text = "" AndAlso txtNettobetragEUR.Text <> "" Then @@ -131,17 +159,9 @@ Public Class ustCntlUSTV_AntragPosition scanUSTVFABest.INIT(kdnr, "KUNDENDATEN", "FA_Bestaetigungen") scanUSTVVollmachten.INIT(kdnr, "KUNDENDATEN", "USTV_Vollmachten") - Dim filter As String = "UstV_aktiv = 1" - If Antrag_LandKz <> "" AndAlso cbxAntragsfilter.Checked Then - filter &= " and left(UstV_Leistender_UstNr,2)='" & Antrag_LandKz & "'" - sbLeistender.initSearchBox(Me.FindForm, "[UStV_LeistenderId],[UStV_Leistender], ([UStV_Leistender] ) as Leistender,[UstV_Leistender_PLZ] as PLZ, ([UstV_Leistender_Strasse] + ' ' +[UstV_Leistender_StrasseNr]) as Strasse, [UstV_Leistender_Stadt] as Stadt FROM [tblUStVLeistender]", {"UStV_Leistender", "UstV_Leistender_UstNr"}, filter, "UStV_Leistender", "UStV_LeistenderId", "Leistender", "FMZOLL",, 400, 200, {"UStV_Leistender", "UStV_LeistenderId"}) - Else - sbLeistender.initSearchBox(Me.FindForm, "[UStV_LeistenderId],[UStV_Leistender], ([UStV_Leistender]) as Leistender,[UstV_Leistender_PLZ] as PLZ, ([UstV_Leistender_Strasse] + ' ' +[UstV_Leistender_StrasseNr]) as Strasse, [UstV_Leistender_Stadt] as Stadt FROM [tblUStVLeistender]", {"UStV_Leistender", "UstV_Leistender_UstNr"}, filter, "UStV_Leistender", "UStV_LeistenderId", "Leistender", "FMZOLL",, 400, 200, {"UStV_Leistender", "UStV_LeistenderId"}) - End If + InitLeistenderSearchBox() - 'sbLeistender.initSearchBox(Me.FindForm, "[UStV_LeistenderId],[UStV_Leistender], ([UStV_Leistender] + ' ' + isnull([UstV_Leistender_UstNr],'')) as Leistender,[UstV_Leistender_PLZ] as PLZ, ([UstV_Leistender_Strasse] + ' ' +[UstV_Leistender_StrasseNr]) as Strasse, [UstV_Leistender_Stadt] as Stadt FROM [tblUStVLeistender]", {"UStV_Leistender", "UstV_Leistender_UstNr"}, "UstV_aktiv = 1", "UStV_Leistender", "UStV_LeistenderId", "Leistender", "FMZOLL",, 400, 200, {"UStV_Leistender", "UStV_LeistenderId"}) - - gridAktiv = True + _gridAktiv = True End Sub Sub getValues(ByRef UStV_POS As cUStVPositionen, ByRef save As Boolean) @@ -163,27 +183,45 @@ Public Class ustCntlUSTV_AntragPosition lblWarning.Text = "Rechnungsdatum muss ausgefüllt werden." save = False End If - If txtUSTBetrag.Text <> "" Then - UStV_POS.UStVPo_USteuerbetrag = txtUSTBetrag.Text.Replace(",", ".") - Else - lblWarning.Text = "UST-Betrag muss ausgefüllt werden." + + + + Dim ustBetrag As Decimal + + If Not TryGetDecimal(txtUSTBetrag.Text, ustBetrag) Then + lblWarning.Text = "UST-Betrag ist ungültig." save = False - End If - - If txtUSTBetragEUR.Text <> "" Then - UStV_POS.UStVPo_USteuerbetragEUR = txtUSTBetragEUR.Text.Replace(",", ".") Else + UStV_POS.UStVPo_USteuerbetrag = ustBetrag + End If + + + Dim ustBetragEUR As Decimal + + If Not TryGetDecimal(txtUSTBetragEUR.Text, ustBetragEUR) Then + lblWarning.Text = "UST-Betrag ist ungültig." save = False + Else + UStV_POS.UStVPo_USteuerbetragEUR = ustBetragEUR End If - If txtNettobetrag.Text <> "" Then - UStV_POS.UStVPo_Nettobetrag = txtNettobetrag.Text.Replace(",", ".") + + + Dim Nettobetrag As Decimal + + If TryGetDecimal(txtNettobetrag.Text, Nettobetrag) Then + UStV_POS.UStVPo_Nettobetrag = Nettobetrag End If - If txtNettobetragEUR.Text <> "" Then - UStV_POS.UStVPo_NettobetragEUR = txtNettobetragEUR.Text.Replace(",", ".") + Dim NettobetragEUR As Decimal + + If TryGetDecimal(txtNettobetragEUR.Text, NettobetragEUR) Then + UStV_POS.UStVPo_NettobetragEUR = NettobetragEUR End If + + + If txtLeistungsbezeichnung.Text <> "" Then UStV_POS.UStVPo_Leistungsbezeichnung = txtLeistungsbezeichnung.Text Else @@ -192,7 +230,12 @@ Public Class ustCntlUSTV_AntragPosition End If If Not txtUmrechnungskurs.Text = "" Then If txtUmrechnungskurs.Text <> "" Then - UStV_POS.UStVPo_Umrechnungskurs = txtUmrechnungskurs.Text.Replace(",", ".") + + Dim Umrechnungskurs As Decimal + If TryGetDecimal(txtUmrechnungskurs.Text, Umrechnungskurs) Then + UStV_POS.UStVPo_Umrechnungskurs = Umrechnungskurs + End If + End If Else lblWarning.Text = "Umrechnungskurs muss ausgefüllt werden." @@ -210,18 +253,28 @@ Public Class ustCntlUSTV_AntragPosition UStV_POS.UStVPo_Leistender = UStV_Leist.UStV_Leistender If UStV_Leist.UStV_LeistenderId > 0 Then UStV_POS.UStVPo_LeistenderId = UStV_Leist.UStV_LeistenderId Else - 'save = False + UStV_POS.UStVPo_Leistender = Nothing End If UStV_POS.UStVPo_Schnittstelle = cbxAPI.Checked - - UStV_POS.UStVPo_SchnittstellenNr = IIf(cboSchnittstellennr.SelectedItem IsNot Nothing, cboSchnittstellennr._value, -1) - + UStV_POS.UStVPo_SchnittstellenNr = If(cboSchnittstellennr.SelectedItem IsNot Nothing, cboSchnittstellennr._value, -1) UStV_POS.UStVPo_Sachbearbeiter = VERAG_PROG_ALLGEMEIN.cAllgemein.USRKURZNAME UStV_POS.UStVPo_Zeitstempel = Now End Sub + Private Sub InitLeistenderSearchBox() + + Dim filter As String = "UstV_aktiv = 1" + + If cbxAntragsfilter.Checked AndAlso Not String.IsNullOrWhiteSpace(Antrag_LandKz) Then + filter &= " AND LEFT(UstV_Leistender_UstNr, 2) = '" & Antrag_LandKz.Replace("'", "''") & "'" + End If + + sbLeistender.initSearchBox(Me.FindForm, "[UStV_LeistenderId],[UStV_Leistender],[UStV_Leistender] AS Leistender,[UstV_Leistender_PLZ] AS PLZ,([UstV_Leistender_Strasse] + ' ' + [UstV_Leistender_StrasseNr]) AS Strasse,[UstV_Leistender_Stadt] AS Stadt FROM [tblUStVLeistender]", {"UStV_Leistender", "UstV_Leistender_UstNr"}, filter, "UStV_Leistender", "UStV_LeistenderId", "Leistender", "FMZOLL",, 400, 200, {"UStV_Leistender", "UStV_LeistenderId"}) + + End Sub + Private Sub ustCntlUSTV_AntragPosition_KeyDown(sender As Object, e As PreviewKeyDownEventArgs) Handles Me.PreviewKeyDown If e.KeyValue = Keys.PageDown Then RaiseEvent EV_NEXT() @@ -239,29 +292,35 @@ Public Class ustCntlUSTV_AntragPosition Return False End Function - Private Sub txtBestellung_TextChanged(sender As Object, e As EventArgs) Handles txtLeistungsbezeichnung.TextChanged, txtRgDatum.TextChanged, txtRgNr.TextChanged, txtUSTBetrag.TextChanged, txtUmrechnungskurs.TextChanged, txtUSTBetragEUR.TextChanged - - If Not VERAG_PROG_ALLGEMEIN.cBerechtignunen.CHECK_BERECHTIGUNG_bool("MDM_USTVA_bearbeiten", Me.FindForm) Then Exit Sub - - If gridAktiv And Me.FindForm IsNot Nothing Then - - 'If sender Is txtLieferung Then - ' If Not PROG.checkSDLNrPartnerKdNr(kdNr, SDLNr) Then MsgBox("Bitte geben Sie die Partner-Kundennummer im Kundenblatt oder im FM-ZOLL ein!") - 'End If - - If sender Is cboLeistungsgeber AndAlso cboLeistungsgeber.SelectedItem <> "" Then - 'UStV_POS.UStVPo_Leistender = cboLeistungsgeber.SelectedItem - 'values_changed() - - Else - 'txtChanged = True - End If + Private Shared Function ValueOrEmpty(value As Object) As String + If value Is Nothing OrElse IsDBNull(value) Then + Return String.Empty End If + Return Convert.ToString(value) + End Function + Private Function RoundCurrency(value As Decimal) As Decimal + Return Decimal.Round(value, 2, MidpointRounding.AwayFromZero) + End Function - End Sub + Private Function TryGetDecimal(text As String, ByRef value As Decimal) As Boolean + + text = text.Trim() + + If text = "" Then + Return False + End If + + Return Decimal.TryParse( + text, + Globalization.NumberStyles.Number, + Globalization.CultureInfo.CurrentCulture, + value + ) + + End Function Sub values_changed() lblSachbearbeiter.Text = VERAG_PROG_ALLGEMEIN.cAllgemein.USRKURZNAME @@ -307,25 +366,9 @@ Public Class ustCntlUSTV_AntragPosition End If - If Not initial Then - 'Listener für Änderungen im Detail-Panel - If Not adressLoadedByLeistender Then - For Each c As Control In pnlAdresse.Controls - - If TypeOf (c) Is TextBox Then - AddHandler CType(c, TextBox).TextChanged, AddressOf SomethingChanged - End If - If TypeOf (c) Is MyComboBox Then - AddHandler CType(c, MyComboBox).TextChanged, AddressOf SomethingChanged - End If - - - Next - Else - btnLeistenderSave.Visible = False - End If - Else + SetAddressChangeHandlers(Not initial AndAlso Not adressLoadedByLeistender) + If initial OrElse adressLoadedByLeistender Then btnLeistenderSave.Visible = False End If @@ -410,10 +453,6 @@ Public Class ustCntlUSTV_AntragPosition End If - End Sub - - Private Sub cboLeistungsgeber_Enter(sender As Object, e As EventArgs) Handles cboLeistungsgeber.Enter - End Sub Private Sub cboLeistungsgeber_DropDown(sender As Object, e As EventArgs) Handles cboLeistungsgeber.DropDown @@ -463,179 +502,466 @@ Public Class ustCntlUSTV_AntragPosition End Sub Private Sub txtUSTBetrag_PreviewKeyDown(sender As Object, e As PreviewKeyDownEventArgs) Handles txtUSTBetrag.PreviewKeyDown, txtUSTBetragEUR.PreviewKeyDown, txtRgDatum.PreviewKeyDown, txtRgNr.PreviewKeyDown, txtUmrechnungskurs.PreviewKeyDown, sbLeistender.PreviewKeyDown, txtLeistungsbezeichnung.PreviewKeyDown - If Not VERAG_PROG_ALLGEMEIN.cBerechtignunen.CHECK_BERECHTIGUNG_bool("MDM_USTVA_bearbeiten", Me.FindForm) Then Exit Sub - If gridAktiv And Me.FindForm IsNot Nothing Then + If e.KeyValue <> Keys.Tab Then Return + If Not CanEdit() Then Return + If Not _gridAktiv OrElse Me.FindForm Is Nothing Then Return - ' Eingabeprüfung - If e.KeyValue = 9 Then + lblWarning.Text = "" - lblWarning.Text = "" - If sender Is txtUSTBetrag Or sender Is txtUSTBetragEUR Or sender Is txtUmrechnungskurs Then + Select Case True - If txtUSTBetrag.Text = "" Then - lblWarning.Text = "Bitte Umsatzsteuerbetrag eingeben." - Exit Sub - End If + Case sender Is txtUSTBetrag + HandleVatAmountChanged() - End If + Case sender Is txtUSTBetragEUR + HandleVatAmountEurChanged() + + Case sender Is txtUmrechnungskurs + HandleExchangeRateChanged() + + Case sender Is txtRgDatum + HandleInvoiceDateChanged() + + Case sender Is txtLeistungsbezeichnung + HandleServiceDescriptionChanged() + + Case sender Is sbLeistender + HandleSupplierChanged() + + End Select + + SaveIfChanged() + + 'If Not VERAG_PROG_ALLGEMEIN.cBerechtignunen.CHECK_BERECHTIGUNG_bool("MDM_USTVA_bearbeiten", Me.FindForm) Then Exit Sub + + 'If _gridAktiv And Me.FindForm IsNot Nothing Then + + ' ' Eingabeprüfung + ' If e.KeyValue = 9 Then + + ' lblWarning.Text = "" + ' If sender Is txtUSTBetrag Or sender Is txtUSTBetragEUR Or sender Is txtUmrechnungskurs Then + + ' If txtUSTBetrag.Text = "" Then + ' lblWarning.Text = "Bitte Umsatzsteuerbetrag eingeben." + ' Exit Sub + ' End If + + ' End If - If sender Is txtUSTBetrag Then - If IsNumeric(txtUSTBetrag.Text) AndAlso IsNumeric(txtUmrechnungskurs.Text) Then + ' If sender Is txtUSTBetrag Then + ' If IsNumeric(txtUSTBetrag.Text) AndAlso IsNumeric(txtUmrechnungskurs.Text) Then - If CDbl(UStV_POS.UStVPo_USteuerbetrag) <> CDbl(txtUSTBetrag.Text) OrElse UStV_POS.UStVPo_USteuerbetrag Is Nothing Then - 'Umrechnung bei Währung <> EUR im Antrag! + ' If UStV_POS.UStVPo_USteuerbetrag Is Nothing OrElse CDbl(UStV_POS.UStVPo_USteuerbetrag) <> CDbl(txtUSTBetrag.Text) Then + ' 'Umrechnung bei Währung <> EUR im Antrag! - Dim antr As New cUSTVAntrag(UStV_POS.UStVAn_ID) + ' Dim antr As New cUSTVAntrag(UStV_POS.UStVAn_ID) - If antr.UStVAn_Währungscode <> "EUR" AndAlso (IsDate(UStV_POS.UStVPo_ReDat) OrElse (txtRgDatum.Text <> "" AndAlso IsDate(txtRgDatum.Text))) Then - If txtUmrechnungskurs.Text = 1 Or txtUmrechnungskurs.Text = "" Then - Dim kurs As New cEZB_Waehrungskurse(antr.UStVAn_Währungscode) + ' If antr.UStVAn_Währungscode <> "EUR" AndAlso (IsDate(UStV_POS.UStVPo_ReDat) OrElse (txtRgDatum.Text <> "" AndAlso IsDate(txtRgDatum.Text))) Then + ' If txtUmrechnungskurs.Text = 1 Or txtUmrechnungskurs.Text = "" Then + ' Dim kurs As New cEZB_Waehrungskurse(antr.UStVAn_Währungscode) - If IsDate(UStV_POS.UStVPo_ReDat) Then - txtUmrechnungskurs.Text = kurs.GET_KURS(antr.UStVAn_Währungscode, CDate(UStV_POS.UStVPo_ReDat)) - ElseIf IsDate(txtRgDatum.Text) Then - txtUmrechnungskurs.Text = kurs.GET_KURS(antr.UStVAn_Währungscode, CDate(txtRgDatum.Text)) - Else - txtUmrechnungskurs.Text = kurs.ezb_kurs - End If + ' If IsDate(UStV_POS.UStVPo_ReDat) Then + ' txtUmrechnungskurs.Text = kurs.GET_KURS(antr.UStVAn_Währungscode, CDate(UStV_POS.UStVPo_ReDat)) + ' ElseIf IsDate(txtRgDatum.Text) Then + ' txtUmrechnungskurs.Text = kurs.GET_KURS(antr.UStVAn_Währungscode, CDate(txtRgDatum.Text)) + ' Else + ' txtUmrechnungskurs.Text = kurs.ezb_kurs + ' End If - End If + ' End If - End If + ' End If - txtUSTBetragEUR.Text = Math.Floor((txtUSTBetrag.Text / txtUmrechnungskurs.Text) * 100 + 0.5) / 100 + ' txtUSTBetragEUR.Text = RoundCurrency(txtUSTBetrag.Text / txtUmrechnungskurs.Text).ToString() - If IsNumeric(txtNettobetrag.Text) Then txtNettobetragEUR.Text = Math.Floor((txtNettobetrag.Text / txtUmrechnungskurs.Text) * 100 + 0.5) / 100 + ' If IsNumeric(txtNettobetrag.Text) Then txtNettobetragEUR.Text = RoundCurrency(txtNettobetrag.Text / txtUmrechnungskurs.Text).ToString() 'Math.Floor((txtNettobetrag.Text / txtUmrechnungskurs.Text) * 100 + 0.5) / 100 - txtChanged = True - End If + ' _txtChanged = True + ' End If - End If + ' End If - ElseIf sender Is txtUSTBetragEUR Then + ' ElseIf sender Is txtUSTBetragEUR Then - 'so herum nicht umrechnen!!!! - 'If IsNumeric(txtUSTBetragEUR._value) AndAlso IsNumeric(txtUmrechnungskurs._value) Then - ' txtUSTBetrag.Text = Math.Floor((txtUSTBetragEUR._value * txtUmrechnungskurs._value) * 100 + 0.5) / 100 - ' 'values_changed() - 'End If + ' 'so herum nicht umrechnen!!!! + ' 'If IsNumeric(txtUSTBetragEUR._value) AndAlso IsNumeric(txtUmrechnungskurs._value) Then + ' ' txtUSTBetrag.Text = Math.Floor((txtUSTBetragEUR._value * txtUmrechnungskurs._value) * 100 + 0.5) / 100 + ' ' 'values_changed() + ' 'End If - If IsNumeric(txtUSTBetragEUR.Text) AndAlso IsNumeric(txtUSTBetrag.Text) Then + ' If IsNumeric(txtUSTBetragEUR.Text) AndAlso IsNumeric(txtUSTBetrag.Text) Then - If CDbl(UStV_POS.UStVPo_USteuerbetragEUR) <> CDbl(txtUSTBetragEUR.Text) OrElse UStV_POS.UStVPo_USteuerbetragEUR Is Nothing Then + ' If UStV_POS.UStVPo_USteuerbetragEUR Is Nothing OrElse CDbl(UStV_POS.UStVPo_USteuerbetragEUR) <> CDbl(txtUSTBetragEUR.Text) Then - Dim zahl1 = CDbl(txtUSTBetrag.Text) / CDbl(txtUSTBetragEUR.Text) + ' 'If CDbl(UStV_POS.UStVPo_USteuerbetragEUR) <> CDbl(txtUSTBetragEUR.Text) OrElse UStV_POS.UStVPo_USteuerbetragEUR Is Nothing Then - txtUmrechnungskurs.Text = Math.Round(zahl1, 2) - txtChanged = True - End If - End If + ' Dim zahl1 = CDbl(txtUSTBetrag.Text) / CDbl(txtUSTBetragEUR.Text) - ElseIf sender Is txtUmrechnungskurs Then + ' txtUmrechnungskurs.Text = Math.Round(zahl1, 2) + ' _txtChanged = True + ' End If + ' End If + + ' ElseIf sender Is txtUmrechnungskurs Then - If IsNumeric(txtUSTBetrag.Text) AndAlso IsNumeric(txtUmrechnungskurs._value) Then + ' If IsNumeric(txtUSTBetrag.Text) AndAlso IsNumeric(txtUmrechnungskurs._value) Then - If UStV_POS.UStVPo_Umrechnungskurs <> txtUmrechnungskurs.Text.Replace(",", ".") OrElse UStV_POS.UStVPo_Umrechnungskurs Is Nothing Then + ' If UStV_POS.UStVPo_Umrechnungskurs <> txtUmrechnungskurs.Text.Replace(",", ".") OrElse UStV_POS.UStVPo_Umrechnungskurs Is Nothing Then - txtUSTBetragEUR.Text = Math.Floor((txtUSTBetrag.Text / txtUmrechnungskurs.Text) * 100 + 0.5) / 100 - If IsNumeric(txtNettobetrag.Text) Then txtNettobetragEUR.Text = Math.Floor((txtNettobetrag.Text / txtUmrechnungskurs.Text) * 100 + 0.5) / 100 - txtChanged = True - End If - End If + ' txtUSTBetragEUR.Text = RoundCurrency(txtUSTBetrag.Text / txtUmrechnungskurs.Text).ToString() ' Math.Floor((txtUSTBetrag.Text / txtUmrechnungskurs.Text) * 100 + 0.5) / 100 + ' If IsNumeric(txtNettobetrag.Text) Then txtNettobetragEUR.Text = RoundCurrency(txtNettobetrag.Text / txtUmrechnungskurs.Text).ToString() 'Math.Floor((txtNettobetrag.Text / txtUmrechnungskurs.Text) * 100 + 0.5) / 100 + ' _txtChanged = True + ' End If + ' End If - 'ElseIf sender Is sbLeistender Then + ' 'ElseIf sender Is sbLeistender Then - ' If UStV_Leist.hasEntry Then + ' ' If UStV_Leist.hasEntry Then - ' UStV_POS.UStVPo_Leistender = UStV_Leist.UStV_Leistender - ' If UStV_Leist.UStV_LeistenderId > 0 Then UStV_POS.UStVPo_LeistenderId = UStV_Leist.UStV_LeistenderId - ' txtChanged = True + ' ' UStV_POS.UStVPo_Leistender = UStV_Leist.UStV_Leistender + ' ' If UStV_Leist.UStV_LeistenderId > 0 Then UStV_POS.UStVPo_LeistenderId = UStV_Leist.UStV_LeistenderId + ' ' txtChanged = True - ' End If + ' ' End If - ElseIf sender Is txtRgDatum Then + ' ElseIf sender Is txtRgDatum Then - If txtRgDatum.Text <> "" Then - txtRgDatum.Text = txtRgDatum.Text.Replace("-", ".") - txtRgDatum.Text = txtRgDatum.Text.Replace(",", ".") + ' If txtRgDatum.Text <> "" Then + ' txtRgDatum.Text = txtRgDatum.Text.Replace("-", ".") + ' txtRgDatum.Text = txtRgDatum.Text.Replace(",", ".") - Dim antr As New cUSTVAntrag(UStV_POS.UStVAn_ID) + ' Dim antr As New cUSTVAntrag(UStV_POS.UStVAn_ID) - If IsDate(txtRgDatum.Text) AndAlso ((CDate(txtRgDatum.Text) > antr.UStVAn_ReDatBis) OrElse (CDate(txtRgDatum.Text) < antr.UStVAn_ReDatVon)) Then - MsgBox("Rechnungsdatum " & CDate(txtRgDatum.Text) & " darf nicht außerhalb der Antragsperiode liegen!") - Else - txtChanged = True - End If - End If + ' If IsDate(txtRgDatum.Text) AndAlso ((CDate(txtRgDatum.Text) > antr.UStVAn_ReDatBis) OrElse (CDate(txtRgDatum.Text) < antr.UStVAn_ReDatVon)) Then + ' MsgBox("Rechnungsdatum " & CDate(txtRgDatum.Text) & " darf nicht außerhalb der Antragsperiode liegen!") + ' Else + ' _txtChanged = True + ' End If + ' End If - ElseIf sender Is txtLeistungsbezeichnung Then + ' ElseIf sender Is txtLeistungsbezeichnung Then - 'If UStV_POS.UStVPo_Leistungsbezeichnung <> txtLeistungsbezeichnung.Text Then - 'UStV_POS.UStVPo_Leistungsbezeichnung = txtLeistungsbezeichnung.Text - txtChanged = True - 'End If + ' 'If UStV_POS.UStVPo_Leistungsbezeichnung <> txtLeistungsbezeichnung.Text Then + ' 'UStV_POS.UStVPo_Leistungsbezeichnung = txtLeistungsbezeichnung.Text + ' _txtChanged = True + ' 'End If - ElseIf sender Is sbLeistender Then - If sbLeistender.Text <> "" Then - If sbLeistender.Text IsNot Nothing AndAlso sbLeistender.Text <> "" Then - If IsNumeric(sbLeistender.Text) Then - If UStV_Leist IsNot Nothing AndAlso UStV_Leist.UStV_Leistender <> "" AndAlso (UStV_POS.UStVPo_Leistender <> sbLeistender.Text OrElse UStV_POS.UStVPo_LeistenderId <> sbLeistender.Text) Then - 'speichern der Änderung nur, wenn 1. Leistender gelöscht wird. - txtChanged = True - ElseIf UStV_Leist Is Nothing Then - txtChanged = True - End If + ' ElseIf sender Is sbLeistender Then + ' If sbLeistender.Text <> "" Then + ' If sbLeistender.Text IsNot Nothing AndAlso sbLeistender.Text <> "" Then + ' If IsNumeric(sbLeistender.Text) Then + ' If UStV_Leist IsNot Nothing AndAlso UStV_Leist.UStV_Leistender <> "" AndAlso (UStV_POS.UStVPo_Leistender <> sbLeistender.Text OrElse UStV_POS.UStVPo_LeistenderId <> sbLeistender.Text) Then + ' 'speichern der Änderung nur, wenn 1. Leistender gelöscht wird. + ' _txtChanged = True + ' ElseIf UStV_Leist Is Nothing Then + ' _txtChanged = True + ' End If - UStV_Leist = New VERAG_PROG_ALLGEMEIN.cUStVLeistender(CInt(sbLeistender.Text)) - Else - If UStV_Leist IsNot Nothing AndAlso UStV_Leist.UStV_Leistender <> "" AndAlso (UStV_Leist.UStV_Leistender <> sbLeistender.Text OrElse UStV_POS.UStVPo_Leistender <> sbLeistender.Text) Then - txtChanged = True - ElseIf UStV_Leist Is Nothing Then - txtChanged = True - End If - End If + ' UStV_Leist = New VERAG_PROG_ALLGEMEIN.cUStVLeistender(CInt(sbLeistender.Text)) + ' Else + ' If UStV_Leist IsNot Nothing AndAlso UStV_Leist.UStV_Leistender <> "" AndAlso (UStV_Leist.UStV_Leistender <> sbLeistender.Text OrElse UStV_POS.UStVPo_Leistender <> sbLeistender.Text) Then + ' _txtChanged = True + ' ElseIf UStV_Leist Is Nothing Then + ' _txtChanged = True + ' End If + ' End If - UStV_Leist = New VERAG_PROG_ALLGEMEIN.cUStVLeistender(sbLeistender.Text) - loadChangedDSToPanel(UStV_Leist) - Else - If UStV_POS.UStVPo_Leistender <> "" OrElse UStV_POS.UStVPo_LeistenderId <> 0 Then - loadChangedDSToPanel(Nothing, True) - End If + ' UStV_Leist = New VERAG_PROG_ALLGEMEIN.cUStVLeistender(sbLeistender.Text) + ' loadChangedDSToPanel(UStV_Leist) + ' Else + ' If UStV_POS.UStVPo_Leistender <> "" OrElse UStV_POS.UStVPo_LeistenderId <> 0 Then + ' loadChangedDSToPanel(Nothing, True) + ' End If - End If - End If - 'MsgBox() - End If + ' End If + ' End If + ' 'MsgBox() + ' End If + ' End If + + ' If _txtChanged Then + ' values_changed() + ' _txtChanged = False + ' End If + + + 'End If + + End Sub + + Private Function CanEdit() As Boolean + + Return VERAG_PROG_ALLGEMEIN.cBerechtignunen.CHECK_BERECHTIGUNG_bool("MDM_USTVA_bearbeiten", Me.FindForm) + + End Function + + Private Sub HandleVatAmountChanged() + + If String.IsNullOrWhiteSpace(txtUSTBetrag.Text) Then + lblWarning.Text = "Bitte Umsatzsteuerbetrag eingeben." + Return + End If + + Dim ustBetrag As Decimal + Dim umrechnungskurs As Decimal + + If Not TryGetDecimal(txtUSTBetrag.Text, ustBetrag) Then + lblWarning.Text = "USt-Betrag ist ungültig." + Return + End If + + If Not TryGetDecimal(txtUmrechnungskurs.Text, umrechnungskurs) OrElse + umrechnungskurs <= 0 Then + + LoadExchangeRate() + + If Not TryGetDecimal(txtUmrechnungskurs.Text, umrechnungskurs) OrElse + umrechnungskurs <= 0 Then + + lblWarning.Text = "Umrechnungskurs ist ungültig." + Return + End If - If txtChanged Then - values_changed() - txtChanged = False - End If - - End If + Dim oldValueChanged As Boolean = + UStV_POS Is Nothing OrElse + UStV_POS.UStVPo_USteuerbetrag Is Nothing OrElse + Convert.ToDecimal(UStV_POS.UStVPo_USteuerbetrag) <> ustBetrag + + If Not oldValueChanged Then Return + + txtUSTBetragEUR.Text = + RoundCurrency(ustBetrag / umrechnungskurs).ToString() + + Dim nettoBetrag As Decimal + + If TryGetDecimal(txtNettobetrag.Text, nettoBetrag) Then + txtNettobetragEUR.Text = + RoundCurrency(nettoBetrag / umrechnungskurs).ToString() + End If + + _txtChanged = True + + End Sub + + Private Sub HandleVatAmountEurChanged() + + Dim ustBetragEUR As Decimal + Dim ustBetrag As Decimal + + If Not TryGetDecimal(txtUSTBetragEUR.Text, ustBetragEUR) Then + Return + End If + + If Not TryGetDecimal(txtUSTBetrag.Text, ustBetrag) Then + Return + End If + + If ustBetragEUR = 0 Then + lblWarning.Text = "USt-Betrag EUR darf nicht 0 sein." + Return + End If + + Dim oldValueChanged As Boolean = UStV_POS Is Nothing OrElse UStV_POS.UStVPo_USteuerbetragEUR Is Nothing OrElse Convert.ToDecimal(UStV_POS.UStVPo_USteuerbetragEUR) <> ustBetragEUR + + If Not oldValueChanged Then Return + + Dim kurs As Decimal = RoundCurrency(ustBetrag / ustBetragEUR) + + txtUmrechnungskurs.Text = kurs.ToString() + + _txtChanged = True + + End Sub + + Private Sub HandleExchangeRateChanged() + + Dim ustBetrag As Decimal + Dim umrechnungskurs As Decimal + + If Not TryGetDecimal(txtUSTBetrag.Text, ustBetrag) Then + Return + End If + + If Not TryGetDecimal(txtUmrechnungskurs.Text, umrechnungskurs) Then + lblWarning.Text = "Umrechnungskurs ist ungültig." + Return + End If + + If umrechnungskurs <= 0 Then + lblWarning.Text = "Umrechnungskurs muss größer als 0 sein." + Return + End If + + Dim oldKurs As Decimal + + If UStV_POS IsNot Nothing AndAlso UStV_POS.UStVPo_Umrechnungskurs IsNot Nothing AndAlso TryGetDecimal(Convert.ToString(UStV_POS.UStVPo_Umrechnungskurs), oldKurs) Then + + If oldKurs = umrechnungskurs Then + Return + End If + + End If + + txtUSTBetragEUR.Text = + RoundCurrency(ustBetrag / umrechnungskurs).ToString() + + Dim nettoBetrag As Decimal + + If TryGetDecimal(txtNettobetrag.Text, nettoBetrag) Then + txtNettobetragEUR.Text = + RoundCurrency(nettoBetrag / umrechnungskurs).ToString() + End If + + _txtChanged = True + + End Sub + + Private Sub HandleInvoiceDateChanged() + + If String.IsNullOrWhiteSpace(txtRgDatum.Text) Then + Return + End If + + txtRgDatum.Text = + txtRgDatum.Text.Replace("-", ".").Replace(",", ".") + + Dim rechnungsDatum As DateTime + + If Not DateTime.TryParse(txtRgDatum.Text, rechnungsDatum) Then + lblWarning.Text = "Rechnungsdatum ist ungültig." + Return + End If + + Dim antrag As New cUSTVAntrag(UStV_POS.UStVAn_ID) + + If rechnungsDatum > antrag.UStVAn_ReDatBis OrElse + rechnungsDatum < antrag.UStVAn_ReDatVon Then + + MsgBox("Rechnungsdatum " & rechnungsDatum.ToString("dd.MM.yyyy") & " darf nicht außerhalb der Antragsperiode liegen!") + + Return + End If + + _txtChanged = True + + End Sub + + Private Sub HandleServiceDescriptionChanged() + + If String.IsNullOrWhiteSpace(txtLeistungsbezeichnung.Text) Then + lblWarning.Text = "Leistungsbez. muss ausgefüllt werden." + Return + End If + + _txtChanged = True + + End Sub + + Private Sub HandleSupplierChanged() + + Dim supplierText As String = sbLeistender.Text.Trim() + + If String.IsNullOrWhiteSpace(supplierText) Then + + If UStV_POS IsNot Nothing AndAlso (UStV_POS.UStVPo_Leistender <> "" OrElse UStV_POS.UStVPo_LeistenderId <> 0) Then + + UStV_Leist = Nothing + loadChangedDSToPanel(Nothing, True) + _txtChanged = True + + End If + + Return + + End If + + Dim supplier As VERAG_PROG_ALLGEMEIN.cUStVLeistender + + If IsNumeric(supplierText) Then + supplier = New VERAG_PROG_ALLGEMEIN.cUStVLeistender(CInt(supplierText)) + Else + supplier = New VERAG_PROG_ALLGEMEIN.cUStVLeistender(supplierText) + End If + + If supplier Is Nothing Then Return + + Dim changed As Boolean = False + + If UStV_Leist Is Nothing Then + changed = True + ElseIf UStV_POS Is Nothing Then + changed = True + ElseIf UStV_POS.UStVPo_Leistender <> supplier.UStV_Leistender Then + changed = True + ElseIf UStV_POS.UStVPo_LeistenderId <> supplier.UStV_LeistenderId Then + changed = True + End If + + UStV_Leist = supplier + + loadChangedDSToPanel(UStV_Leist) + + If changed Then + _txtChanged = True + End If + + End Sub + + Private Sub LoadExchangeRate() + + If UStV_POS Is Nothing Then Return + + Dim antrag As New cUSTVAntrag(UStV_POS.UStVAn_ID) + + If antrag.UStVAn_Währungscode = "EUR" Then + txtUmrechnungskurs.Text = "1" + Return + End If + + Dim rechnungsDatum As DateTime + + If DateTime.TryParse(txtRgDatum.Text, rechnungsDatum) Then + + Dim kurs As New cEZB_Waehrungskurse(antrag.UStVAn_Währungscode) + + txtUmrechnungskurs.Text = kurs.GET_KURS(antrag.UStVAn_Währungscode, rechnungsDatum).ToString() + + End If + + End Sub + + Private Sub SaveIfChanged() + + If Not _txtChanged Then Return + + _txtChanged = False + + values_changed() + End Sub Private Sub scanSonstiges_FileAdded(id As String, path As String, name As String) Handles scanSonstiges.FileAdded @@ -659,12 +985,8 @@ Public Class ustCntlUSTV_AntragPosition Private Sub cbxAntragsfilter_CheckedChanged(sender As Object, e As EventArgs) Handles cbxAntragsfilter.CheckedChanged - Dim filter As String = "UstV_aktiv = 1" - If Antrag_LandKz <> "" Then - If cbxAntragsfilter.Checked Then filter &= " and left(UstV_Leistender_UstNr,2)='" & Antrag_LandKz & "'" - sbLeistender.initSearchBox(Me.FindForm, "[UStV_LeistenderId],[UStV_Leistender], ([UStV_Leistender]) as Leistender,[UstV_Leistender_PLZ] as PLZ, ([UstV_Leistender_Strasse] + ' ' +[UstV_Leistender_StrasseNr]) as Strasse, [UstV_Leistender_Stadt] as Stadt FROM [tblUStVLeistender]", {"UStV_Leistender", "UstV_Leistender_UstNr"}, filter, "UStV_Leistender", "UStV_LeistenderId", "Leistender", "FMZOLL",, 400, 200, {"UStV_Leistender", "UStV_LeistenderId"}) - 'sbLeistender.initSearchBox(Me.FindForm, "[UStV_LeistenderId],[UStV_Leistender], ([UStV_Leistender] + ' ' + isnull([UstV_Leistender_UstNr],'')) as Leistender,[UstV_Leistender_PLZ] as PLZ, ([UstV_Leistender_Strasse] + ' ' +[UstV_Leistender_StrasseNr]) as Strasse, [UstV_Leistender_Stadt] as Stadt FROM [tblUStVLeistender]", {"UStV_Leistender", "UstV_Leistender_UstNr"}, filter, "UStV_Leistender", "UStV_LeistenderId", "Leistender", "FMZOLL",, 400, 200, {"UStV_Leistender", "UStV_LeistenderId"}) - End If + InitLeistenderSearchBox() + End Sub Private Sub mnuItemKIUPLOAD_Clicked(sender As Object, e As EventArgs) @@ -716,7 +1038,7 @@ Public Class ustCntlUSTV_AntragPosition f.usrcntlVAT_ATEZ1.btnUebernehmen.Enabled = UStV_POS.UStVPo_daId_loeschbar 'NUR ÜBERNEHMEN WENN LÖSCHBAR! f.usrcntlVAT_ATEZ1.initDGV(dt) f.usrcntlVAT_ATEZ1.setColorIndgv() - f.usrcntlVAT_ATEZ1.setAmountOnly = IIf(UStV_POS.UStVPo_SchnittstellenNr = 7, True, False) + f.usrcntlVAT_ATEZ1.setAmountOnly = UStV_POS.UStVPo_SchnittstellenNr = 7 If f.ShowDialog = DialogResult.OK Then @@ -826,6 +1148,36 @@ Public Class ustCntlUSTV_AntragPosition + End Sub + + Private Sub SetAddressChangeHandlers(enabled As Boolean) + + For Each c As Control In pnlAdresse.Controls + + If TypeOf c Is TextBox Then + + Dim tb As TextBox = DirectCast(c, TextBox) + + RemoveHandler tb.TextChanged, AddressOf SomethingChanged + + If enabled Then + AddHandler tb.TextChanged, AddressOf SomethingChanged + End If + + ElseIf TypeOf c Is MyComboBox Then + + Dim cb As MyComboBox = DirectCast(c, MyComboBox) + + RemoveHandler cb.TextChanged, AddressOf SomethingChanged + + If enabled Then + AddHandler cb.TextChanged, AddressOf SomethingChanged + End If + + End If + + Next + End Sub Private Sub btnAPIUbload_Click(sender As Object, e As EventArgs) Handles btnAPIUbload.Click @@ -852,7 +1204,7 @@ Public Class ustCntlUSTV_AntragPosition Private Sub txtStrasse_PreviewKeyDown(sender As Object, e As PreviewKeyDownEventArgs) Handles txtStrasse.PreviewKeyDown, txtPLZ.PreviewKeyDown, txtOrt.PreviewKeyDown, txtLand.PreviewKeyDown, txtStrassenNr.PreviewKeyDown, txtUIDNr.PreviewKeyDown - If gridAktiv And Me.FindForm IsNot Nothing Then + If _gridAktiv And Me.FindForm IsNot Nothing Then ' Eingabeprüfung If e.KeyValue = 9 Then @@ -913,11 +1265,11 @@ Public Class ustCntlUSTV_AntragPosition Else If IsNumeric(txtNettobetragEUR.Text) Then txtNettobetrag.Text = Math.Floor((txtNettobetragEUR.Text * txtUmrechnungskurs.Text) * 100 + 0.5) / 100 - txtChanged = True + _txtChanged = True - If txtChanged Then + If _txtChanged Then values_changed() - txtChanged = False + _txtChanged = False End If End If diff --git a/SDL/ZOLLSYSTEM/DAKOSY/ATLAS/EXGestellung/usrCntlATLAS_EXGestellung.vb b/SDL/ZOLLSYSTEM/DAKOSY/ATLAS/EXGestellung/usrCntlATLAS_EXGestellung.vb index fc4c1b3d..5fcabf14 100644 --- a/SDL/ZOLLSYSTEM/DAKOSY/ATLAS/EXGestellung/usrCntlATLAS_EXGestellung.vb +++ b/SDL/ZOLLSYSTEM/DAKOSY/ATLAS/EXGestellung/usrCntlATLAS_EXGestellung.vb @@ -139,7 +139,7 @@ Public Class usrCntlATLAS_EXGestellung For Each l In rtbMRN.Lines If l.Trim <> "" Then - If Not sendEXP_MRN(l.Trim.ToUpper, sbAbgangZollstelle._value, cnt, exg_list) Then + If Not sendEXP_MRN(l.Trim.ToUpper, sbAbgangZollstelle._value, cnt, exg_list, FIRMA_DY) Then MsgBox("Sendefehler bei " & l) err = True End If @@ -254,7 +254,7 @@ Public Class usrCntlATLAS_EXGestellung Me.Cursor = Cursors.Default End Sub - Function sendEXP_MRN(MRN As String, Zollstelle As String, zeile As String, ByRef exg_list As List(Of Integer)) As Boolean + Function sendEXP_MRN(MRN As String, Zollstelle As String, zeile As String, ByRef exg_list As List(Of Integer), Optional FIRMA_DY_TEMP As String = "") As Boolean Me.Refresh() @@ -284,8 +284,15 @@ Public Class usrCntlATLAS_EXGestellung 'EXG.exg_ObjectName = AVISO.AvisoID & "_EXP_" & EXG.exg_MRN.ToString().Substring(0, 4) & EXG.exg_MRN.ToString.Substring(14) & zusatz '---> >>> MRN KÜRZEN!!!! 'EXG.exg_ObjectName = AVISO.AvisoID & "_EXP_" & EXG.exg_MRN + + Dim FIRMA_DY = VERAG_PROG_ALLGEMEIN.cAllgemein.FIRMA - FIRMA_DY = DAKOSY_Worker.cDakosyFunftions.getFirma_DY(SENDUNG.FilialenNr, Me.FindForm, "EXG") + FIRMA_DY = DAKOSY_Worker.cDakosyFunftions.getFirma_DY(SENDUNG.FilialenNr, Me.FindForm, "EXG") ' -> hier liegt vermutlich der Fehler, die Firma wird hier nochmals gesetzt + + If FIRMA_DY_TEMP <> "" Then + FIRMA_DY = FIRMA_DY_TEMP + End If + Dim saveFile = "" If EXG.SAVE_ALL Then diff --git a/SDL/ZOLLSYSTEM/DAKOSY/ATLAS/Verwahrung/usrCntlATLAS_AnkunftsAnzeige.vb b/SDL/ZOLLSYSTEM/DAKOSY/ATLAS/Verwahrung/usrCntlATLAS_AnkunftsAnzeige.vb index cd9d4f34..b6cd762b 100644 --- a/SDL/ZOLLSYSTEM/DAKOSY/ATLAS/Verwahrung/usrCntlATLAS_AnkunftsAnzeige.vb +++ b/SDL/ZOLLSYSTEM/DAKOSY/ATLAS/Verwahrung/usrCntlATLAS_AnkunftsAnzeige.vb @@ -352,7 +352,7 @@ Public Class usrCntlATLAS_AnkunftsAnzeige CLOSED_DUMMY.SAVE() - GesSichRef.CalcSaldo() + GesSichRef.CalcSaldo_new() Catch ex As Exception VERAG_PROG_ALLGEMEIN.cErrorHandler.ERR(ex.Message, ex.StackTrace, System.Reflection.MethodInfo.GetCurrentMethod.Name) diff --git a/SDL/buchhaltung/usrCntlBH.Designer.vb b/SDL/buchhaltung/usrCntlBH.Designer.vb index 03a2355e..610d0d46 100644 --- a/SDL/buchhaltung/usrCntlBH.Designer.vb +++ b/SDL/buchhaltung/usrCntlBH.Designer.vb @@ -76,6 +76,9 @@ Partial Class usrCntlBH Me.Label1 = New System.Windows.Forms.Label() Me.btnWord = New System.Windows.Forms.Button() Me.GroupBox2 = New System.Windows.Forms.GroupBox() + Me.cboFirma_FIBUFilialen = New VERAG_PROG_ALLGEMEIN.MyComboBox() + Me.Label67 = New System.Windows.Forms.Label() + Me.Button16 = New System.Windows.Forms.Button() Me.txtMonateSyskavergleich = New VERAG_PROG_ALLGEMEIN.MyTextBox() Me.Label61 = New System.Windows.Forms.Label() Me.Button15 = New System.Windows.Forms.Button() @@ -166,6 +169,11 @@ Partial Class usrCntlBH Me.btn_Erloeskkonten = New System.Windows.Forms.Button() Me.Label62 = New System.Windows.Forms.Label() Me.GroupBox11 = New System.Windows.Forms.GroupBox() + Me.txtPloseAnh_Einarbeitung = New System.Windows.Forms.TextBox() + Me.Label71 = New System.Windows.Forms.Label() + Me.pbPloseAnh_Proz = New System.Windows.Forms.ProgressBar() + Me.lblPloseAnh_Proz = New System.Windows.Forms.Label() + Me.cbxZBalsSR = New System.Windows.Forms.CheckBox() Me.Label57 = New System.Windows.Forms.Label() Me.btnDel_ = New VERAG_PROG_ALLGEMEIN.FlatButton() Me.btnWikiStatusmails = New System.Windows.Forms.Button() @@ -190,9 +198,8 @@ Partial Class usrCntlBH Me.txtZRbis = New VERAG_PROG_ALLGEMEIN.MyTextBox() Me.Label51 = New System.Windows.Forms.Label() Me.txtJahr_FIBU = New VERAG_PROG_ALLGEMEIN.MyTextBox() - Me.Button16 = New System.Windows.Forms.Button() - Me.Label67 = New System.Windows.Forms.Label() - Me.cboFirma_FIBUFilialen = New VERAG_PROG_ALLGEMEIN.MyComboBox() + Me.Button17 = New System.Windows.Forms.Button() + Me.cbxPOSBNZerstellen = New System.Windows.Forms.CheckBox() Me.pnl.SuspendLayout() Me.TabPage1.SuspendLayout() Me.GroupBox13.SuspendLayout() @@ -906,6 +913,41 @@ Partial Class usrCntlBH Me.GroupBox2.TabIndex = 4 Me.GroupBox2.TabStop = False ' + 'cboFirma_FIBUFilialen + ' + Me.cboFirma_FIBUFilialen._allowedValuesFreiText = Nothing + Me.cboFirma_FIBUFilialen._allowFreiText = False + Me.cboFirma_FIBUFilialen._value = "" + Me.cboFirma_FIBUFilialen.DropDownWidth = 150 + Me.cboFirma_FIBUFilialen.FormattingEnabled = True + Me.cboFirma_FIBUFilialen.Location = New System.Drawing.Point(406, 57) + Me.cboFirma_FIBUFilialen.Name = "cboFirma_FIBUFilialen" + Me.cboFirma_FIBUFilialen.Size = New System.Drawing.Size(54, 21) + Me.cboFirma_FIBUFilialen.TabIndex = 43 + ' + 'Label67 + ' + Me.Label67.AutoSize = True + Me.Label67.Location = New System.Drawing.Point(145, 87) + Me.Label67.Name = "Label67" + Me.Label67.Size = New System.Drawing.Size(105, 13) + Me.Label67.TabIndex = 45 + Me.Label67.Text = "Vergleich UID-Syska" + ' + 'Button16 + ' + Me.Button16.BackgroundImageLayout = System.Windows.Forms.ImageLayout.Center + Me.Button16.FlatStyle = System.Windows.Forms.FlatStyle.Flat + Me.Button16.ForeColor = System.Drawing.Color.FromArgb(CType(CType(0, Byte), Integer), CType(CType(54, Byte), Integer), CType(CType(128, Byte), Integer)) + Me.Button16.Image = Global.SDL.My.Resources.Resources.Excel_logo + Me.Button16.ImageAlign = System.Drawing.ContentAlignment.MiddleLeft + Me.Button16.Location = New System.Drawing.Point(6, 81) + Me.Button16.Name = "Button16" + Me.Button16.Size = New System.Drawing.Size(121, 23) + Me.Button16.TabIndex = 44 + Me.Button16.Text = " Excel" + Me.Button16.UseVisualStyleBackColor = True + ' 'txtMonateSyskavergleich ' Me.txtMonateSyskavergleich._DateTimeOnly = False @@ -1949,6 +1991,7 @@ Partial Class usrCntlBH ' 'GroupBox14 ' + Me.GroupBox14.Controls.Add(Me.Button17) Me.GroupBox14.Controls.Add(Me.Label63) Me.GroupBox14.Controls.Add(Me.Label66) Me.GroupBox14.Controls.Add(Me.txtLand) @@ -1959,7 +2002,7 @@ Partial Class usrCntlBH Me.GroupBox14.Controls.Add(Me.btn_ZV) Me.GroupBox14.Controls.Add(Me.btn_Laender) Me.GroupBox14.Controls.Add(Me.btn_Erloeskkonten) - Me.GroupBox14.Location = New System.Drawing.Point(20, 153) + Me.GroupBox14.Location = New System.Drawing.Point(14, 227) Me.GroupBox14.Name = "GroupBox14" Me.GroupBox14.Size = New System.Drawing.Size(841, 123) Me.GroupBox14.TabIndex = 38 @@ -2115,7 +2158,7 @@ Partial Class usrCntlBH Me.Label62.AutoSize = True Me.Label62.Font = New System.Drawing.Font("Microsoft Sans Serif", 10.0!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) Me.Label62.ForeColor = System.Drawing.SystemColors.ControlDarkDark - Me.Label62.Location = New System.Drawing.Point(17, 133) + Me.Label62.Location = New System.Drawing.Point(11, 207) Me.Label62.Name = "Label62" Me.Label62.Size = New System.Drawing.Size(145, 17) Me.Label62.TabIndex = 37 @@ -2123,6 +2166,12 @@ Partial Class usrCntlBH ' 'GroupBox11 ' + Me.GroupBox11.Controls.Add(Me.cbxPOSBNZerstellen) + Me.GroupBox11.Controls.Add(Me.txtPloseAnh_Einarbeitung) + Me.GroupBox11.Controls.Add(Me.Label71) + Me.GroupBox11.Controls.Add(Me.pbPloseAnh_Proz) + Me.GroupBox11.Controls.Add(Me.lblPloseAnh_Proz) + Me.GroupBox11.Controls.Add(Me.cbxZBalsSR) Me.GroupBox11.Controls.Add(Me.Label57) Me.GroupBox11.Controls.Add(Me.btnDel_) Me.GroupBox11.Controls.Add(Me.btnWikiStatusmails) @@ -2147,10 +2196,57 @@ Partial Class usrCntlBH Me.GroupBox11.Controls.Add(Me.txtZRbis) Me.GroupBox11.Location = New System.Drawing.Point(14, 30) Me.GroupBox11.Name = "GroupBox11" - Me.GroupBox11.Size = New System.Drawing.Size(847, 88) + Me.GroupBox11.Size = New System.Drawing.Size(847, 149) Me.GroupBox11.TabIndex = 36 Me.GroupBox11.TabStop = False ' + 'txtPloseAnh_Einarbeitung + ' + Me.txtPloseAnh_Einarbeitung.BackColor = System.Drawing.Color.White + Me.txtPloseAnh_Einarbeitung.BorderStyle = System.Windows.Forms.BorderStyle.None + Me.txtPloseAnh_Einarbeitung.Location = New System.Drawing.Point(80, 121) + Me.txtPloseAnh_Einarbeitung.Name = "txtPloseAnh_Einarbeitung" + Me.txtPloseAnh_Einarbeitung.Size = New System.Drawing.Size(106, 13) + Me.txtPloseAnh_Einarbeitung.TabIndex = 80 + ' + 'Label71 + ' + Me.Label71.AutoSize = True + Me.Label71.Location = New System.Drawing.Point(13, 121) + Me.Label71.Name = "Label71" + Me.Label71.Size = New System.Drawing.Size(56, 13) + Me.Label71.TabIndex = 77 + Me.Label71.Text = "Fortschritt:" + ' + 'pbPloseAnh_Proz + ' + Me.pbPloseAnh_Proz.Location = New System.Drawing.Point(16, 92) + Me.pbPloseAnh_Proz.Name = "pbPloseAnh_Proz" + Me.pbPloseAnh_Proz.Size = New System.Drawing.Size(245, 23) + Me.pbPloseAnh_Proz.TabIndex = 78 + ' + 'lblPloseAnh_Proz + ' + Me.lblPloseAnh_Proz.Location = New System.Drawing.Point(192, 121) + Me.lblPloseAnh_Proz.Name = "lblPloseAnh_Proz" + Me.lblPloseAnh_Proz.Size = New System.Drawing.Size(69, 13) + Me.lblPloseAnh_Proz.TabIndex = 79 + Me.lblPloseAnh_Proz.Text = "0%" + Me.lblPloseAnh_Proz.TextAlign = System.Drawing.ContentAlignment.TopRight + ' + 'cbxZBalsSR + ' + Me.cbxZBalsSR.AutoSize = True + Me.cbxZBalsSR.Checked = True + Me.cbxZBalsSR.CheckState = System.Windows.Forms.CheckState.Checked + Me.cbxZBalsSR.Font = New System.Drawing.Font("Microsoft Sans Serif", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.cbxZBalsSR.Location = New System.Drawing.Point(524, 67) + Me.cbxZBalsSR.Name = "cbxZBalsSR" + Me.cbxZBalsSR.Size = New System.Drawing.Size(177, 17) + Me.cbxZBalsSR.TabIndex = 76 + Me.cbxZBalsSR.Text = "als Sammelrechnung fakturieren" + Me.cbxZBalsSR.UseVisualStyleBackColor = True + ' 'Label57 ' Me.Label57.AutoSize = True @@ -2519,7 +2615,7 @@ Partial Class usrCntlBH Me.txtJahr_FIBU._Waehrung = False Me.txtJahr_FIBU._WaehrungZeichen = True Me.txtJahr_FIBU.ForeColor = System.Drawing.Color.Black - Me.txtJahr_FIBU.Location = New System.Drawing.Point(175, 133) + Me.txtJahr_FIBU.Location = New System.Drawing.Point(169, 207) Me.txtJahr_FIBU.MaxLineLength = -1 Me.txtJahr_FIBU.MaxLines_Warning = "" Me.txtJahr_FIBU.MaxLines_Warning_Label = Nothing @@ -2528,40 +2624,29 @@ Partial Class usrCntlBH Me.txtJahr_FIBU.TabIndex = 76 Me.txtJahr_FIBU.Text = "0" ' - 'Button16 + 'Button17 ' - Me.Button16.BackgroundImageLayout = System.Windows.Forms.ImageLayout.Center - Me.Button16.FlatStyle = System.Windows.Forms.FlatStyle.Flat - Me.Button16.ForeColor = System.Drawing.Color.FromArgb(CType(CType(0, Byte), Integer), CType(CType(54, Byte), Integer), CType(CType(128, Byte), Integer)) - Me.Button16.Image = Global.SDL.My.Resources.Resources.Excel_logo - Me.Button16.ImageAlign = System.Drawing.ContentAlignment.MiddleLeft - Me.Button16.Location = New System.Drawing.Point(6, 81) - Me.Button16.Name = "Button16" - Me.Button16.Size = New System.Drawing.Size(121, 23) - Me.Button16.TabIndex = 44 - Me.Button16.Text = " Excel" - Me.Button16.UseVisualStyleBackColor = True + Me.Button17.BackgroundImage = Global.SDL.My.Resources.Resources.fragezeichen + Me.Button17.BackgroundImageLayout = System.Windows.Forms.ImageLayout.Zoom + Me.Button17.FlatAppearance.BorderSize = 0 + Me.Button17.FlatStyle = System.Windows.Forms.FlatStyle.Flat + Me.Button17.Location = New System.Drawing.Point(816, 19) + Me.Button17.Name = "Button17" + Me.Button17.Size = New System.Drawing.Size(25, 20) + Me.Button17.TabIndex = 81 + Me.Button17.UseVisualStyleBackColor = True ' - 'Label67 + 'cbxPOSBNZerstellen ' - Me.Label67.AutoSize = True - Me.Label67.Location = New System.Drawing.Point(145, 87) - Me.Label67.Name = "Label67" - Me.Label67.Size = New System.Drawing.Size(105, 13) - Me.Label67.TabIndex = 45 - Me.Label67.Text = "Vergleich UID-Syska" - ' - 'cboFirma_FIBUFilialen - ' - Me.cboFirma_FIBUFilialen._allowedValuesFreiText = Nothing - Me.cboFirma_FIBUFilialen._allowFreiText = False - Me.cboFirma_FIBUFilialen._value = "" - Me.cboFirma_FIBUFilialen.DropDownWidth = 150 - Me.cboFirma_FIBUFilialen.FormattingEnabled = True - Me.cboFirma_FIBUFilialen.Location = New System.Drawing.Point(406, 57) - Me.cboFirma_FIBUFilialen.Name = "cboFirma_FIBUFilialen" - Me.cboFirma_FIBUFilialen.Size = New System.Drawing.Size(54, 21) - Me.cboFirma_FIBUFilialen.TabIndex = 43 + Me.cbxPOSBNZerstellen.AutoSize = True + Me.cbxPOSBNZerstellen.Font = New System.Drawing.Font("Microsoft Sans Serif", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.cbxPOSBNZerstellen.Location = New System.Drawing.Point(524, 90) + Me.cbxPOSBNZerstellen.Name = "cbxPOSBNZerstellen" + Me.cbxPOSBNZerstellen.Size = New System.Drawing.Size(115, 17) + Me.cbxPOSBNZerstellen.TabIndex = 81 + Me.cbxPOSBNZerstellen.Text = "POS-BNZ erstellen" + Me.cbxPOSBNZerstellen.UseVisualStyleBackColor = True + Me.cbxPOSBNZerstellen.Visible = False ' 'usrCntlBH ' @@ -2788,4 +2873,11 @@ Partial Class usrCntlBH Friend WithEvents cboFirma_FIBUFilialen As VERAG_PROG_ALLGEMEIN.MyComboBox Friend WithEvents Label67 As Label Friend WithEvents Button16 As Button + Friend WithEvents cbxZBalsSR As CheckBox + Friend WithEvents txtPloseAnh_Einarbeitung As TextBox + Friend WithEvents Label71 As Label + Friend WithEvents pbPloseAnh_Proz As ProgressBar + Friend WithEvents lblPloseAnh_Proz As Label + Friend WithEvents Button17 As Button + Friend WithEvents cbxPOSBNZerstellen As CheckBox End Class diff --git a/SDL/buchhaltung/usrCntlBH.vb b/SDL/buchhaltung/usrCntlBH.vb index 17e1d9a3..929ebe67 100644 --- a/SDL/buchhaltung/usrCntlBH.vb +++ b/SDL/buchhaltung/usrCntlBH.vb @@ -1,7 +1,10 @@ Imports System.Globalization Imports System.Text +Imports System.Web.UI.WebControls.Expressions Imports ClosedXML.Excel +Imports com.sun.xml.internal.rngom Imports VERAG_PROG_ALLGEMEIN +Imports VERAG_PROG_ALLGEMEIN.TESTJSON Public Class usrCntlBH Dim GrenzeVersicherung = 50000 @@ -67,6 +70,13 @@ Public Class usrCntlBH Dim isMDM As Boolean = False If VERAG_PROG_ALLGEMEIN.cAllgemein.MITARBEITER.mit_abteilung = "MDM" OrElse VERAG_PROG_ALLGEMEIN.cAllgemein.MITARBEITER.mit_nname = "Breimaier" Then isMDM = True If isMDM Then + + If VERAG_PROG_ALLGEMEIN.cBerechtignunen.CHECK_BERECHTIGUNG_bool("ADMIN", "SDL") Then + + cbxPOSBNZerstellen.Visible = True + + End If + txtnichtabrechneteKunden.Text = SQL.getValueTxtBySql("SELECT count(distinct(kundenNr)) FROM [VERAG].[dbo].[tblMDM_Zinsberechnung] where verrechnet is null", "FMZOLL",,, "0") If IsNumeric(txtnichtabrechneteKunden.Text) AndAlso CInt(txtnichtabrechneteKunden.Text) > 0 Then btnDel_.Visible = True @@ -901,6 +911,7 @@ Public Class usrCntlBH Else Dim counter As Integer = 0 + Dim cnt As Integer = 0 For Each r As DataRow In dt.Rows @@ -936,6 +947,15 @@ Public Class usrCntlBH End If End If + txtPloseAnh_Einarbeitung.Text = cnt & " / " & dt.Rows.Count + Dim proz As Double = (cnt / dt.Rows.Count) * 100 + pbPloseAnh_Proz.Value = proz + lblPloseAnh_Proz.Text = proz.ToString("N2") & " %" + 'GroupBox12.Refresh() + My.Application.DoEvents() + + cnt += 1 + Next @@ -987,6 +1007,10 @@ Public Class usrCntlBH End If + pbPloseAnh_Proz.Value = 100 + txtPloseAnh_Einarbeitung.Text = dt.Rows.Count & " / " & dt.Rows.Count + lblPloseAnh_Proz.Text = "100.00 %" + End If @@ -1042,7 +1066,7 @@ Public Class usrCntlBH End Function - Function gen_RECHNUNG_BySPEDBUCH(KdNr As String, SPEDBUCH As VERAG_PROG_ALLGEMEIN.cSpeditionsbuch, ByRef RK_ID As Integer, ByRef Fusstext As String, ZahlungszielAusDebitor As Integer) + Function gen_RECHNUNG_BySPEDBUCH(KdNr As String, SPEDBUCH As VERAG_PROG_ALLGEMEIN.cSpeditionsbuch, ByRef RK_ID As Integer, ByRef Fusstext As String, ZahlungszielAusDebitor As Integer, sammelrechnung As Boolean, POSBNZ As Boolean) Try If KdNr = "" Then Return False @@ -1055,7 +1079,7 @@ Public Class usrCntlBH Dim Abfertigungsart As Integer 'TODO. Setzen! - OffertenNr = 95 : Abfertigungsart = 10 : RG.Anlage_1 = "" + OffertenNr = 95 : Abfertigungsart = 10 RG.Firma_ID = 19 @@ -1067,7 +1091,13 @@ Public Class usrCntlBH RG.Buchungsjahr = cRKSV.getGJ(SPEDBUCH.Abfertigungsdatum, RG.Firma_ID) 'If(Now.Month = 1, Now.Year - 1, Now.Year) RG.FilialenNr = SPEDBUCH.FilialenNr RG.Abfertigungsdatum = SPEDBUCH.Abfertigungsdatum - RG.Sammelrechnung = 0 + + If sammelrechnung Then + RG.Sammelrechnung = 6 + Else + RG.Sammelrechnung = 0 + End If + RG.BelegartenKz = "AR" RG.BelegartenNr = 70 RG.BelegartenBez = "Rechnung" @@ -1180,6 +1210,32 @@ Public Class usrCntlBH RG.Text = (cFakturierung.przRechnungstextTXT(RG, SPEDBUCH) & vbNewLine & cFakturierung.przRechnungstextZZ(RG)).Trim + If POSBNZ Then + + Dim path As String = createZNBReport(dt, KdNr, CDate(SPEDBUCH.Abfertigungsdatum), RG) + + Dim fi As New System.IO.FileInfo(path) + Dim DS As New VERAG_PROG_ALLGEMEIN.cDATENSERVER("MDM", "ZNB", RG.KundenNrZentrale, CDate(SPEDBUCH.Abfertigungsdatum).ToShortDateString, "", fi.Name & fi.Extension) + + If Not DS.uploadDataToDATENSERVER(path, fi.Name, fi.Extension,,,, True) Then + MsgBox("Fehler beim Speichern: Datenserver! :" & RG.Firma_ID) + End If + + Dim ANH As New VERAG_PROG_ALLGEMEIN.cRechnungsausgangAnhaenge + ANH.dsId = CInt(DS.da_id) + ANH.Bezeichnung = "POS-Liste VERZUGSZINSEN " & CDate(SPEDBUCH.Abfertigungsdatum).ToShortDateString & fi.Extension + RG.ANHAENGE.Add(ANH) + + If Not ANH.INSERT(RG.RK_ID, False) Then + MsgBox("Fehler beim Anlegen des Anhangs für RK_ID " & RG.RK_ID) + Else + RG.Anlage_1 = "POS-Liste VERZUGSZINSEN" + End If + + + End If + + If RG.SAVE Then RK_ID = RG.RK_ID Return True @@ -1194,6 +1250,54 @@ Public Class usrCntlBH End Function + Private Function createZNBReport(dtZNBList As DataTable, KDNr As Integer, rechnungsdatum As Date, RG As cRechnungsausgang) As String + + + Dim rpt As New rptPOS_ZNB(RG, RG.SteuerfreierGesamtbetrag + RG.SteuerpflichtigerGesamtbetrag) + + rpt.DataSource = dtZNBList + + rpt.lblRgDatum.Text = rechnungsdatum + rpt.txtKunde.Text = KDNr & " " & New VERAG_PROG_ALLGEMEIN.cAdressen(KDNr).FullName + rpt.Label2.Visible = False + rpt.TextBox1.Visible = False + rpt.Label4.Text = rechnungsdatum + + rpt.lblHeader.Text &= " " & RG.Vermerk + + If rpt.DataSource.rows.count = 0 Then Return "" + + Dim AD As New cAdressen(KDNr) + Dim sum As Double = 0 + + rpt.txtKunde.Text = AD.FullName + + AddHandler rpt.Detail.Format, Sub() + + If Not IsDBNull(rpt.Fields.Item("clmnZinsen").Value) AndAlso Not IsNothing(rpt.Fields.Item("clmnZinsen").Value) AndAlso IsNumeric(rpt.Fields.Item("clmnZinsen").Value) Then + sum += CDbl(rpt.Fields.Item("clmnZinsen").Value) + End If + + + End Sub + + + AddHandler rpt.ReportFooter1.Format, Sub() + rpt.txtBruttoGesSum.Text = sum.ToString("N2") + End Sub + + + Dim tmpPath = VERAG_PROG_ALLGEMEIN.DATENVERVER_OPTIONS.getTMPPath(RG.AbfertigungsNr & ".pdf", ".pdf", , False) + Dim p As New GrapeCity.ActiveReports.Export.Pdf.Section.PdfExport + rpt.Run(False) + p.NeverEmbedFonts = "" + p.Export(rpt.Document, tmpPath) + rpt.Dispose() + + Return tmpPath + + End Function + Function allPos(ByRef RG As VERAG_PROG_ALLGEMEIN.cRechnungsausgang, OFFERTE As VERAG_PROG_ALLGEMEIN.cOfferte, LeistungsNr As Integer, NettoBetrag As Double, BruttoBetrag As Double, Optional UstBetrag As Double = 0, Optional leistungsBez As String = "", Optional nachzahlungsID As Integer = -1) @@ -1238,6 +1342,8 @@ Public Class usrCntlBH Return False End Function + + Private Sub Button13_Click_1(sender As Object, e As EventArgs) Handles Button13.Click Dim frm As New frmZinsnachberechnung("tblMDM_Zinsberechnung", "FMZOLL") frm.ShowDialog(Me) @@ -1330,7 +1436,7 @@ Public Class usrCntlBH If vbYes = MsgBox("Möchten Sie für " & dt_Main.Rows.Count & " Kunden die Zinsbelastung mit Abrechnungsdatum " & CDate(txtZRbis.Text).ToShortDateString & " verrechnen?" & vbNewLine & "Es werden nur Rechnungen erstellt, deren Gesamtbelastung über " & LimitBEtrag & " EUR liegt!", vbYesNoCancel) Then - + Dim cnt As Integer = 0 For Each R In dt_Main.Rows @@ -1353,18 +1459,31 @@ Public Class usrCntlBH Dim SPEDBUCH As VERAG_PROG_ALLGEMEIN.cSpeditionsbuch = Nothing Dim RK_ID As Integer = -1 If Not gen_SPEDBUCH_ByKdNr(R("kundenNr"), SPEDBUCH, CDate(txtZRbis.Text).ToShortDateString, vermerk) Then verarbOK = False - If Not gen_RECHNUNG_BySPEDBUCH(R("kundenNr"), SPEDBUCH, RK_ID, Fußtext, R("belegZahlungsziel")) Then verarbOK = False + If Not gen_RECHNUNG_BySPEDBUCH(R("kundenNr"), SPEDBUCH, RK_ID, Fußtext, R("belegZahlungsziel"), cbxZBalsSR.Checked, cbxPOSBNZerstellen.Checked) Then verarbOK = False If verarbOK Then SQL.doSQL("UPDATE [tblMDM_Zinsberechnung] SET [verrechnet]=GETDATE(), RK_ID = " & RK_ID & " WHERE [verrechnet] Is null And kundenNr='" & R("kundenNr") & "' ", "FMZOLL") End If + txtPloseAnh_Einarbeitung.Text = cnt & " / " & dt_Main.Rows.Count + Dim proz As Double = (cnt / dt_Main.Rows.Count) * 100 + pbPloseAnh_Proz.Value = proz + lblPloseAnh_Proz.Text = proz.ToString("N2") & " %" + 'GroupBox12.Refresh() + My.Application.DoEvents() + + cnt += 1 + Next txtnichtabrechneteKunden.Text = SQL.getValueTxtBySql("SELECT count(distinct(kundenNr)) FROM [VERAG].[dbo].[tblMDM_Zinsberechnung] where verrechnet is null", "FMZOLL",,, "0") End If + + pbPloseAnh_Proz.Value = 100 + txtPloseAnh_Einarbeitung.Text = dt_Main.Rows.Count & " / " & dt_Main.Rows.Count + lblPloseAnh_Proz.Text = "100.00 %" End If @@ -2077,5 +2196,9 @@ Public Class usrCntlBH End If + End Sub + + Private Sub Button18_Click(sender As Object, e As EventArgs) + End Sub End Class diff --git a/SDL/frmEssensbestellungenAdministration.vb b/SDL/frmEssensbestellungenAdministration.vb index 1f613c17..589d5d69 100644 --- a/SDL/frmEssensbestellungenAdministration.vb +++ b/SDL/frmEssensbestellungenAdministration.vb @@ -45,7 +45,7 @@ Public Class frmEssensbestellungenAdministration Dim SQLString As String = "SELECT [eb_mitid] , [eb_mitname] ,[eb_firma] , [eb_kw] , [eb_gebaeude],[eb_abteilung],[eb_montag],[eb_dienstag],[eb_mittwoch], - [eb_donnerstag] ,[eb_freitag],[eb_datum],[eb_preis], [eb_anmerkung],[eb_storniert],[eb_storniert_am],[eb_abgerechnet],[eb_abgerechnet_am], [eb_gesendet], [eb_gesendet_am] + [eb_donnerstag] ,[eb_freitag],[eb_datum],[eb_preis], [eb_anmerkung],[eb_storniert],[eb_storniert_am],[eb_abgerechnet],[eb_abgerechnet_am], [eb_gesendet], cast([eb_gesendet_am] as Date) as eb_gesendet_am FROM [tblEssensbestellungen] WHERE 1=1 " @@ -328,6 +328,11 @@ Public Class frmEssensbestellungenAdministration End If + dgvBestellungen.GetOrder() + dgvBestellungen.LOAD() + dgvBestellungen.SetOrder() + + End Select @@ -348,6 +353,11 @@ Public Class frmEssensbestellungenAdministration End If + dgvBestellungen.GetOrder() + dgvBestellungen.LOAD() + dgvBestellungen.SetOrder() + + End Select @@ -355,7 +365,7 @@ Public Class frmEssensbestellungenAdministration Select Case dgvBestellungen.SelectedRows.Count Case 1 If vbYes = MsgBox("Möchten Sie die Essensbestellung '" & dgvBestellungen.SelectedRows(0).Cells("eb_kw").Value & " von Mitarbeiter " & dgvBestellungen.SelectedRows(0).Cells("eb_mitname").Value & " abschicken?", vbYesNoCancel) Then - bestellungenSenden(True) + bestellungenSenden(True, "SEL") generateEMailforHighway(sender, e) Else Exit Sub @@ -363,7 +373,7 @@ Public Class frmEssensbestellungenAdministration Case Else If vbYes = MsgBox("Möchten Sie diese " & dgvBestellungen.SelectedRows.Count & " Essensbestellungen abschicken", vbYesNoCancel) Then - bestellungenSenden(True) + bestellungenSenden(True, "ALL") generateEMailforHighway(sender, e) Else Exit Sub @@ -387,6 +397,7 @@ Public Class frmEssensbestellungenAdministration bestellung.eb_storniert = True If stornieren Then bestellung.eb_storniert_am = Now + bestellung.eb_storniertVon = VERAG_PROG_ALLGEMEIN.cAllgemein.USRKURZNAME Else bestellung.eb_storniert_am = DBNull.Value @@ -399,10 +410,6 @@ Public Class frmEssensbestellungenAdministration Next - dgvBestellungen.GetOrder() - dgvBestellungen.LOAD() - dgvBestellungen.SetOrder() - End Sub Private Sub bestellungenAbrechnen(abrechnen As Boolean) @@ -415,6 +422,7 @@ Public Class frmEssensbestellungenAdministration bestellung.eb_abgerechnet = abrechnen If abrechnen Then bestellung.eb_abgerechnet_am = Now + bestellung.eb_abgerechnetVon = VERAG_PROG_ALLGEMEIN.cAllgemein.USRKURZNAME Else bestellung.eb_abgerechnet_am = DBNull.Value @@ -425,14 +433,9 @@ Public Class frmEssensbestellungenAdministration Next - - dgvBestellungen.GetOrder() - dgvBestellungen.LOAD() - dgvBestellungen.SetOrder() - End Sub - Private Sub bestellungenSenden(senden As Boolean) + Private Sub bestellungenSenden(senden As Boolean, anmerkung As String) For Each row As DataGridViewRow In dgvBestellungen.SelectedRows @@ -442,6 +445,8 @@ Public Class frmEssensbestellungenAdministration bestellung.eb_gesendet = senden If senden Then bestellung.eb_gesendet_am = Now + bestellung.eb_gesendetVon = VERAG_PROG_ALLGEMEIN.cAllgemein.USRKURZNAME & " " & anmerkung + If IsDBNull(bestellung.eb_gesendetFirst_am) OrElse bestellung.eb_gesendetFirst_am Is Nothing Then bestellung.eb_gesendetFirst_am = bestellung.eb_gesendet_am Else bestellung.eb_gesendet_am = DBNull.Value @@ -451,13 +456,7 @@ Public Class frmEssensbestellungenAdministration Next - If dgvBestellungen.RowCount > 0 Then - dgvBestellungen.GetOrder() - dgvBestellungen.LOAD() - dgvBestellungen.SetOrder() - - End If End Sub @@ -500,6 +499,8 @@ Public Class frmEssensbestellungenAdministration bestellung.eb_gesendet = True bestellung.eb_gesendet_am = Now + If IsDBNull(bestellung.eb_gesendetFirst_am) OrElse bestellung.eb_gesendetFirst_am Is Nothing Then bestellung.eb_gesendetFirst_am = bestellung.eb_gesendet_am + bestellung.eb_gesendetVon = VERAG_PROG_ALLGEMEIN.cAllgemein.USRKURZNAME bestellung.SAVE() End If Next @@ -543,6 +544,14 @@ Public Class frmEssensbestellungenAdministration Me.Cursor = Cursors.Default + If dgvBestellungen.RowCount > 0 Then + + dgvBestellungen.GetOrder() + dgvBestellungen.LOAD() + dgvBestellungen.SetOrder() + + End If + End Sub diff --git a/SDL/kassenbuch/frmBelegNeu.Designer.vb b/SDL/kassenbuch/frmBelegNeu.Designer.vb index 22caeabb..79dcd172 100644 --- a/SDL/kassenbuch/frmBelegNeu.Designer.vb +++ b/SDL/kassenbuch/frmBelegNeu.Designer.vb @@ -147,6 +147,7 @@ Partial Class frmBelegNeu 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) + Me.lblTSEisOffline = New System.Windows.Forms.Label() CType(Me.dgvBelegPos, System.ComponentModel.ISupportInitialize).BeginInit() Me.pnl.SuspendLayout() Me.pnlData.SuspendLayout() @@ -648,6 +649,7 @@ Partial Class frmBelegNeu 'pnlData ' Me.pnlData.BackColor = System.Drawing.Color.FromArgb(CType(CType(244, Byte), Integer), CType(CType(244, Byte), Integer), CType(CType(244, Byte), Integer)) + Me.pnlData.Controls.Add(Me.lblTSEisOffline) Me.pnlData.Controls.Add(Me.cboBuchungsoforterzeugen) Me.pnlData.Controls.Add(Me.lblErr_Fahrer) Me.pnlData.Controls.Add(Me.lblErr_Pass) @@ -1256,7 +1258,7 @@ Partial Class frmBelegNeu Me.Button4.Padding = New System.Windows.Forms.Padding(0, 0, 5, 0) Me.Button4.Size = New System.Drawing.Size(70, 21) Me.Button4.TabIndex = 49 - Me.Button4.Text = "TEST FT" + Me.Button4.Text = "Fiskaltrust" Me.Button4.TextAlign = System.Drawing.ContentAlignment.MiddleRight Me.Button4.UseVisualStyleBackColor = True Me.Button4.Visible = False @@ -1782,7 +1784,21 @@ Partial Class frmBelegNeu 'cm_FT ' Me.cm_FT.Name = "ContextMenuStrip1" - Me.cm_FT.Size = New System.Drawing.Size(181, 26) + Me.cm_FT.Size = New System.Drawing.Size(61, 4) + ' + 'lblTSEisOffline + ' + Me.lblTSEisOffline.AutoSize = True + Me.lblTSEisOffline.BackColor = System.Drawing.Color.Red + Me.lblTSEisOffline.Cursor = System.Windows.Forms.Cursors.Default + Me.lblTSEisOffline.Font = New System.Drawing.Font("Microsoft Sans Serif", 12.0!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.lblTSEisOffline.ForeColor = System.Drawing.Color.White + Me.lblTSEisOffline.Location = New System.Drawing.Point(154, 35) + Me.lblTSEisOffline.Name = "lblTSEisOffline" + Me.lblTSEisOffline.Size = New System.Drawing.Size(125, 20) + Me.lblTSEisOffline.TabIndex = 50 + Me.lblTSEisOffline.Text = "TSE ist Offline" + Me.lblTSEisOffline.Visible = False ' 'frmBelegNeu ' @@ -1935,4 +1951,5 @@ Partial Class frmBelegNeu Friend WithEvents cboBuchungsoforterzeugen As CheckBox Friend WithEvents Button4 As Button Friend WithEvents cm_FT As ContextMenuStrip + Friend WithEvents lblTSEisOffline As Label End Class diff --git a/SDL/kassenbuch/frmBelegNeu.vb b/SDL/kassenbuch/frmBelegNeu.vb index 7c9f8cf0..b9551008 100644 --- a/SDL/kassenbuch/frmBelegNeu.vb +++ b/SDL/kassenbuch/frmBelegNeu.vb @@ -45,6 +45,7 @@ Public Class frmBelegNeu Public aktFiliale As Integer = 0 Public aktAbfertigungsNr As Integer = 0 + Dim tseIsOnline As Boolean = False Public Sub New(PERSONAL As cPersonal, PERSONAL_LG As cPersonal, EA As String) @@ -231,9 +232,8 @@ Public Class frmBelegNeu ' Case "WAI" : cboFiliale.changeItem(5103) ' End Select - If VERAG_PROG_ALLGEMEIN.cBerechtignunen.CHECK_BERECHTIGUNG_bool("ADMINFUNCTIONS", "SDL") Then - Button4.Visible = True - End If + + Button4.Visible = checkFiskaltrust() If VERAG_PROG_ALLGEMEIN.cAllgemein.TESTSYSTEM Then cboKassen.Enabled = True @@ -420,6 +420,7 @@ Public Class frmBelegNeu End If If PERSONAL.Niederlassung = "SBG" Then where = "Preislisten_visibleSBG = 1" If PERSONAL.Niederlassung = "WAI" Then where = "Preislisten_visibleWAI = 1" + If PERSONAL.Niederlassung = "KLP" Then where = "Preislisten_visibleWAI = 1" If PERSONAL.Niederlassung = "NKD" Then where = "Preislisten_visibleNKD = 1" If PERSONAL.Niederlassung = "IME" Then where = "Preislisten_visibleIMEX = 1" @@ -1703,47 +1704,59 @@ Public Class frmBelegNeu Dim answer = "" Dim verarbeitet As Boolean = False - If KASSE.rksv_FT_RestServiceURL <> "" Then - Dim result = cRKSV.insertRKSVFiskaltrustAsync(KASSE, BELEG, RKSV_Beleg_Id, If(EA = "E", summeBRUTTO, summeBRUTTO * -1), TESTBUCHUNG, QR_CodeString, LastJWS) - 'result.Wait() - verarbeitet = 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 + Dim isFiskaltrust = checkFiskaltrust() - 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) + If isFiskaltrust Then + Dim result = cRKSV.insertRKSVFiskaltrustAsync(KASSE, BELEG, RKSV_Beleg_Id, If(EA = "E", summeBRUTTO, summeBRUTTO * -1), TESTBUCHUNG, QR_CodeString, LastJWS, ReceiptCaseIntern.VERKAUF) + verarbeitet = 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 - Dim Errmsg = "Programmfehler bei der digitalen Signatur." & vbNewLine & vbNewLine & answer - MsgBox(Errmsg, MsgBoxStyle.Critical) - VERAG_PROG_ALLGEMEIN.cErrorHandler.ERR(Errmsg, "", System.Reflection.MethodInfo.GetCurrentMethod.Name) - Me.Cursor = Cursors.Default : warnClose = False : Me.Close() : Exit Sub + + If Not verarbeitet Then + + If Not isFiskaltrust 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) + VERAG_PROG_ALLGEMEIN.cErrorHandler.ERR(Errmsg, "", System.Reflection.MethodInfo.GetCurrentMethod.Name) + Me.Cursor = Cursors.Default : warnClose = False : Me.Close() : Exit Sub + Else + BELEG.FT_MissingSignature = True + End If + + If Not isFiskaltrust Then KASSE.SET_LAST_QR_JWS(LastJWS, QR_CodeString) + + + End If + + End If - KASSE.SET_LAST_QR_JWS(LastJWS, QR_CodeString) - - 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 - ' If Not TESTBUCHUNG Then - ' KASSE.DECREASE_BELEG_UMSATZ(oldBelegZaehler, summe * -1) - ' cRKSV.DELETE(BELEG) - ' End If - ' MsgBox("Programmfehler bei der digitalen Signatur." & vbNewLine & vbNewLine & answer, MsgBoxStyle.Critical) - ' ' Me.Cursor = Cursors.Default - ' 'BELEG = cRKSV.STORNO(BELEG, "Programmfehler") - ' ' MsgBox("Programmfehler bei der digitalen Signatur.") + '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 + ' If Not TESTBUCHUNG Then + ' KASSE.DECREASE_BELEG_UMSATZ(oldBelegZaehler, summe * -1) + ' cRKSV.DELETE(BELEG) + ' End If + ' MsgBox("Programmfehler bei der digitalen Signatur." & vbNewLine & vbNewLine & answer, MsgBoxStyle.Critical) + ' ' Me.Cursor = Cursors.Default + ' 'BELEG = cRKSV.STORNO(BELEG, "Programmfehler") + ' ' MsgBox("Programmfehler bei der digitalen Signatur.") - ' Return False - 'End If - 'KASSE.SET_LAST_QR_JWS(LastJWS, QR_CodeString) + ' Return False + 'End If + 'KASSE.SET_LAST_QR_JWS(LastJWS, QR_CodeString) - ' Dim TEST_KASSE = (BELEG.Niederlassung = "WAI") - If KASSE.rksvDE_aktiv Then ' WENN für die Kasse die RKSV DEUTSCHLAND gilt + ' Dim TEST_KASSE = (BELEG.Niederlassung = "WAI") + If KASSE.rksvDE_aktiv Then ' WENN für die Kasse die RKSV DEUTSCHLAND gilt Dim answer = "" If Not cRKSV_DE.insertRKSV_DE(PERSONAL, BELEG, KASSE, RKSV_Beleg_Id, If(EA = "E", summeBRUTTO, summeBRUTTO * -1), QR_CodeString, LastJWS, TESTBUCHUNG, answer) Then 'Digitale Signierung und Erfassung in die RKSV-Datenbank mittels ITG-Service @@ -1870,6 +1883,21 @@ Public Class frmBelegNeu + End Function + + Private Function checkFiskaltrust() + + If PERSONAL.cRKSV_Kasse IsNot Nothing AndAlso PERSONAL.cRKSV_Kasse.rksv_FT_RestServiceURL IsNot Nothing AndAlso PERSONAL.cRKSV_Kasse.rksv_FT_CashboxID IsNot Nothing AndAlso PERSONAL.cRKSV_Kasse.rksv_FT_AccessToken IsNot Nothing AndAlso PERSONAL.cRKSV_Kasse.rksv_FT_Country IsNot Nothing Then + + + Dim client_chilkat As New cFiskaltrustClient_chilkat(KASSE.rksv_FT_RestServiceURL, KASSE.rksv_FT_CashboxID, KASSE.rksv_FT_AccessToken, KASSE.rksv_FT_Country) + Return client_chilkat.isFiskaltrust() + + Else + Return False + + End If + End Function Private Sub openZahlungsbeleg(daid As Integer) @@ -1893,74 +1921,29 @@ Public Class frmBelegNeu Private Sub cboKassen_SelectedIndexChanged(sender As Object, e As EventArgs) Handles cboKassen.SelectedIndexChanged KASSE.LOAD(cboKassen._value) - Button4.Visible = KASSE.rksv_FT_RestServiceURL <> "" + + If KASSE IsNot Nothing AndAlso KASSE.rksv_aktiv AndAlso KASSE.rksv_FT_RestServiceURL IsNot Nothing Then + + Dim client_chilkat As New cFiskaltrustClient_chilkat(KASSE.rksv_FT_RestServiceURL, KASSE.rksv_FT_CashboxID, KASSE.rksv_FT_AccessToken, KASSE.rksv_FT_Country) + If client_chilkat.isFiskaltrust() Then + Dim result As String = client_chilkat.Echo(KASSE.rksv_bez & " " & KASSE.rksv_FT_Country & " - ") + + If result IsNot Nothing AndAlso result.Contains("VERBINDUNG OK") Then + tseIsOnline = True + End If + + lblTSEisOffline.Visible = Not tseIsOnline + + End If + End If + 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("version") Then - Dim ids = New ToolStripMenuItem() With {.Text = "Journal - Version", .Name = "version", .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("signatures") Then - Dim ids = New ToolStripMenuItem() With {.Text = "Journal - Signaturen", .Name = "signatures", .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("action") Then - Dim ids = New ToolStripMenuItem() With {.Text = "Journal - Action", .Name = "action", .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("queueitem") Then - Dim ids = New ToolStripMenuItem() With {.Text = "Journal - Queue", .Name = "queueitem", .Font = New Font(Me.Font.FontFamily, Me.Font.Size)} + If Not cm_FT.Items.ContainsKey("ft_neusignierung") AndAlso BELEG IsNot Nothing AndAlso (BELEG.gebucht Or BELEG.gebuchtStorno) AndAlso BELEG.FT_setMissingSignatureFailed Then + Dim ids = New ToolStripMenuItem() With {.Text = "Beleg neu signieren", .Name = "ft_neusignierung", .Font = New Font(Me.Font.FontFamily, Me.Font.Size)} AddHandler ids.Click, AddressOf mnuItemAuftrauege_Clicked cm_FT.Items.Add(ids) End If @@ -1979,125 +1962,67 @@ Public Class frmBelegNeu 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) Dim client_chilkat As New cFiskaltrustClient_chilkat(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) + If item.Name = "ft_neusignierung" Then - Dim result As String = client_chilkat.SignNullReceipt(KASSE.rksv_id) + If BELEG IsNot Nothing Then + If vbYes = MsgBox("Möchten den nicht signierten Beleg " & BELEG.BelegNr & " an die TSE schicken?", vbYesNoCancel) Then + + Dim result As Boolean = False + + If BELEG.gebucht Or BELEG.gebuchtStorno Then + + Dim summeBRUTTO As Double = BELEG.rksv_umsatz + Dim QR_CodeString As String = "" + Dim LastJWS As String = "" + Dim EA As String = "" + Dim kindOfReceiptCase As String = "" + + Select Case BELEG.Beleg_TYP + Case "0" + Return False 'null Belege nicht senden! + Case "E" 'Eingang/Ausgang + If BELEG.Belegart = "1" Then + EA = "E" + Else + EA = "A" + End If + Case "L" + If BELEG.Belegart = "1" Then + EA = "E" + Else + EA = "A" + End If + + Case Else + If BELEG.Belegart = "1" Then + EA = "E" + Else + EA = "A" + End If + End Select - If result <> "" Then + result = cRKSV.insertRKSVFiskaltrustAsync(PERSONAL.cRKSV_Kasse, BELEG, BELEG.rksv_BelegId, If(EA = "E", summeBRUTTO, summeBRUTTO * -1), False, QR_CodeString, LastJWS, "", "", tseIsOnline) 'receiptCase leer und Reference leer!!!!! - MsgBox(client_chilkat.PrettyPrintJson(result)) + If result Then + BELEG.FT_setMissingSignatureFailed = False + BELEG.SAVE() + MsgBox("Beleg erfolgreich gesendet!") + End If - End If + End If - ElseIf item.Name = "test" Then - 'beide - 'Dim result As String = Await client.Echo(KASSE.rksv_bez & " " & KASSE.rksv_FT_Country & " - ") - Dim result As String = client_chilkat.Echo(KASSE.rksv_bez & " " & KASSE.rksv_FT_Country & " - ") - - If result <> "" Then - - MsgBox(client_chilkat.PrettyPrintJson(result)) - - End If - - - ElseIf item.Name = "storno" Then - 'beide - 'Dim result As String = Await client.CancelReceiptAsync_test("-1", 100, "Cash", KASSE.rksv_id) - Dim result As String = client_chilkat.ChancelReceipt_test("-1", KASSE.rksv_id) - - If result <> "" Then - - MsgBox(client_chilkat.PrettyPrintJson(result)) - - End If - - ElseIf item.Name = "bar" Then - 'beide - 'Dim result As String = Await client.SignReceiptAsync_test(KASSE.rksv_id) - Dim result As String = client_chilkat.SignReceipt_test(KASSE.rksv_id) - - If result <> "" Then - - If vbYes = MsgBox(result & vbNewLine & vbNewLine & "Testdaten in DB speichern?", vbYesNoCancel) Then - Dim QR_CodeString As String = "" - client_chilkat.saveRKSV_FT(result, QR_CodeString, Nothing, False) - End If - Else - Return False - End If - - - If result <> "" Then - - MsgBox(client_chilkat.PrettyPrintJson(result)) - - End If - - ElseIf item.Name = "monthly" Then - 'beide - 'Dim result As String = Await client.SignClosinglReceiptAsync(item.Name, KASSE.rksv_id) - Dim result As String = client_chilkat.SignClosingReceipt(item.Name, KASSE.rksv_id, item.Name) - - If result <> "" Then - - MsgBox(client_chilkat.PrettyPrintJson(result)) - - End If - - 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) - Dim result As String = client_chilkat.SignClosingReceipt(item.Name, KASSE.rksv_id, item.Name) - - If result <> "" Then - - MsgBox(client_chilkat.PrettyPrintJson(result)) + If result Then + init() + End If End If - 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) - Dim result As String = client_chilkat.SignClosingReceipt(item.Name, KASSE.rksv_id, item.Name) - If result <> "" Then - - MsgBox(client_chilkat.PrettyPrintJson(result)) End If - ElseIf (item.Name = "version" Or item.Name = "action" Or item.Name = "signatures" Or item.Name = "queueitem") Then - - 'Dim result As String = Await client.Journal(2) - - Dim result As String = "" - Select Case item.Name - Case "version" : result = client_chilkat.Journal(FtJournalType.VersionInformation) - Case "action" : result = client_chilkat.Journal(FtJournalType.ActionJournal) - Case "signatures" : result = client_chilkat.Journal(FtJournalType.ReceiptJournal) - Case "queueitem" : result = client_chilkat.Journal(FtJournalType.QueueItemJournal) - End Select - - If result <> "" Then - - MsgBox(client_chilkat.PrettyPrintJson(result)) - - End If - - - End If diff --git a/SDL/kassenbuch/frmFremdbeleg.vb b/SDL/kassenbuch/frmFremdbeleg.vb index 265e444a..68f2b1e7 100644 --- a/SDL/kassenbuch/frmFremdbeleg.vb +++ b/SDL/kassenbuch/frmFremdbeleg.vb @@ -139,7 +139,7 @@ Public Class frmFremdbeleg Else If cRKSV.isforbiddenDate Then - MsgBox("Die Kasse wir am Monatsende abgeschlossen. Es dürfen keine weiteren Belege erstellt werden. Bitte veruchen Sie den Vorgang nach Mitternacht erneut.") + MsgBox("Die Kasse wir am Monatsende abgeschlossen. Es dürfen keine weiteren Belege erstellt werden. Bitte versuchen Sie den Vorgang nach Mitternacht erneut.") Exit Sub End If @@ -224,55 +224,83 @@ Public Class frmFremdbeleg End If Dim answer = "" + + Dim isFiskaltrust = False + + If KASSE IsNot Nothing AndAlso KASSE.rksv_FT_RestServiceURL IsNot Nothing AndAlso KASSE.rksv_FT_CashboxID IsNot Nothing AndAlso KASSE.rksv_FT_AccessToken IsNot Nothing AndAlso KASSE.rksv_FT_Country IsNot Nothing Then + Dim client_chilkat As New cFiskaltrustClient_chilkat(KASSE.rksv_FT_RestServiceURL, KASSE.rksv_FT_CashboxID, KASSE.rksv_FT_AccessToken, KASSE.rksv_FT_Country) + isFiskaltrust = client_chilkat.isFiskaltrust() + End If + + If KASSE.rksv_aktiv Then - If Not cRKSV.insertRKSV(KASSE, KASSE.rksv_CompanyGUID, KASSE.rksv_Umsatzzaehler, BELEG.BelegDat, BELEG.Steuerschlüssel, RKSV_Beleg_Id, summeBRUTTO, QR_CodeString, LastJWS, TESTBUCHUNG, answer) Then 'Digitale Signierung und Erfassung in die RKSV-Datenbank mittels ITG-Service - If Not TESTBUCHUNG Then - KASSE.DECREASE_BELEG_UMSATZ(oldBelegZaehler, BELEG.rksv_umsatz * -1) - cRKSV.DELETE(BELEG, KASSE.rksv_firma) - End If - MsgBox("Programmfehler bei der digitalen Signatur." & vbNewLine & vbNewLine & answer, MsgBoxStyle.Critical) - ' BELEG = cRKSV.STORNO(BELEG, "Programmfehler") - 'MsgBox("Programmfehler bei der digitalen Signatur.") - Me.Cursor = Cursors.Default : Me.Close() : Exit Sub - End If - End If - If KASSE.rksvDE_aktiv Then - If Not cRKSV_DE.insertRKSV_DE(PERSONAL, BELEG, KASSE, RKSV_Beleg_Id, summeBRUTTO, QR_CodeString, LastJWS, TESTBUCHUNG, answer) Then 'Digitale Signierung und Erfassung in die RKSV-Datenbank mittels ITG-Service - If Not TESTBUCHUNG Then - KASSE.DECREASE_BELEG_UMSATZ(oldBelegZaehler, BELEG.rksv_umsatz * -1) - cRKSV.DELETE(BELEG, KASSE.rksv_firma) + Dim verarbeitet As Boolean = False + + If isFiskaltrust Then + Dim result = cRKSV.insertRKSVFiskaltrustAsync(KASSE, BELEG, RKSV_Beleg_Id, summeBRUTTO, TESTBUCHUNG, QR_CodeString, LastJWS, IIf(Art = 1, ReceiptCaseIntern.EINGANG, ReceiptCaseIntern.AUSGANG)) + 'result.Wait() + verarbeitet = result + Else + verarbeitet = cRKSV.insertRKSV(KASSE, KASSE.rksv_CompanyGUID, KASSE.rksv_Umsatzzaehler, BELEG.BelegDat, BELEG.Steuerschlüssel, RKSV_Beleg_Id, summeBRUTTO, QR_CodeString, LastJWS, TESTBUCHUNG, answer) 'Digitale Signierung und Erfassung in die RKSV-Datenbank mittels ITG-Service + End If + + + If Not verarbeitet Then 'Digitale Signierung und Erfassung in die RKSV-Datenbank mittels ITG-Service + + If Not isFiskaltrust Then + + If Not TESTBUCHUNG Then + KASSE.DECREASE_BELEG_UMSATZ(oldBelegZaehler, BELEG.rksv_umsatz * -1) + cRKSV.DELETE(BELEG, KASSE.rksv_firma) + End If + MsgBox("Programmfehler bei der digitalen Signatur." & vbNewLine & vbNewLine & answer, MsgBoxStyle.Critical) + ' BELEG = cRKSV.STORNO(BELEG, "Programmfehler") + 'MsgBox("Programmfehler bei der digitalen Signatur.") + Me.Cursor = Cursors.Default : Me.Close() : Exit Sub + Else + BELEG.FT_MissingSignature = True 'nachträgliche Signierung, Beleg NICHT löschen!! + End If + End If - MsgBox("Programmfehler bei der digitalen Signatur." & vbNewLine & vbNewLine & answer, MsgBoxStyle.Critical) - ' BELEG = cRKSV.STORNO(BELEG, "Programmfehler") - 'MsgBox("Programmfehler bei der digitalen Signatur.") - Me.Cursor = Cursors.Default : Me.Close() : Exit Sub End If - 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX - If KASSE.rksv_KassaGuid = "KASSE_01" Then - BELEG.rksv_jws = Nothing - BELEG.rksv_qr = Nothing + + If KASSE.rksvDE_aktiv Then + If Not cRKSV_DE.insertRKSV_DE(PERSONAL, BELEG, KASSE, RKSV_Beleg_Id, summeBRUTTO, QR_CodeString, LastJWS, TESTBUCHUNG, answer) Then 'Digitale Signierung und Erfassung in die RKSV-Datenbank mittels ITG-Service + If Not TESTBUCHUNG Then + KASSE.DECREASE_BELEG_UMSATZ(oldBelegZaehler, BELEG.rksv_umsatz * -1) + cRKSV.DELETE(BELEG, KASSE.rksv_firma) + End If + MsgBox("Programmfehler bei der digitalen Signatur." & vbNewLine & vbNewLine & answer, MsgBoxStyle.Critical) + ' BELEG = cRKSV.STORNO(BELEG, "Programmfehler") + 'MsgBox("Programmfehler bei der digitalen Signatur.") + Me.Cursor = Cursors.Default : Me.Close() : Exit Sub + End If + 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX + If KASSE.rksv_KassaGuid = "KASSE_01" Then + BELEG.rksv_jws = Nothing + BELEG.rksv_qr = Nothing + End If + 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX + End If - 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX + + + If Not isFiskaltrust Then KASSE.SET_LAST_QR_JWS(LastJWS, QR_CodeString) + + 'RKSV-Daten beim Beleg ergänzen: + BELEG.rksv_jws = LastJWS + BELEG.rksv_qr = QR_CodeString + BELEG.rksv_BelegId = RKSV_Beleg_Id + BELEG.rksv_id = KASSE.rksv_id + BELEG.SAVE() + + If cbxBelegDrucken.Checked Then cRKSV.printFremdBeleg(BELEG, KASSE, PERSONAL, KBEntry, KBEntryGB, cboPrinter.SelectedItem.ToString) + + Me.Cursor = Cursors.Default End If - - - KASSE.SET_LAST_QR_JWS(LastJWS, QR_CodeString) - - 'RKSV-Daten beim Beleg ergänzen: - BELEG.rksv_jws = LastJWS - BELEG.rksv_qr = QR_CodeString - BELEG.rksv_BelegId = RKSV_Beleg_Id - BELEG.rksv_id = KASSE.rksv_id - BELEG.SAVE() - - If cbxBelegDrucken.Checked Then cRKSV.printFremdBeleg(BELEG, KASSE, PERSONAL, KBEntry, KBEntryGB, cboPrinter.SelectedItem.ToString) - - Me.Cursor = Cursors.Default - - End If - Me.Close() + Me.Close() Catch ex As Exception Me.Cursor = Cursors.Default MsgBox("Allgemeiner Programmfehler - Belegerfassung wird geschlossen!") diff --git a/SDL/kassenbuch/frmKassenbuch.Designer.vb b/SDL/kassenbuch/frmKassenbuch.Designer.vb index eb297dcd..1a54abd4 100644 --- a/SDL/kassenbuch/frmKassenbuch.Designer.vb +++ b/SDL/kassenbuch/frmKassenbuch.Designer.vb @@ -66,6 +66,23 @@ Partial Class frmKassenbuch Me.Label14 = New System.Windows.Forms.Label() Me.Label13 = New System.Windows.Forms.Label() Me.pnlMain = New System.Windows.Forms.Panel() + Me.pbInitialStart = New System.Windows.Forms.PictureBox() + Me.lblInitStart = New System.Windows.Forms.Label() + Me.lblFiskaltrustHeader = New System.Windows.Forms.Label() + Me.picTSEOnline = New System.Windows.Forms.PictureBox() + Me.lblTSEOnline = New System.Windows.Forms.Label() + Me.picNULLbeleg = New System.Windows.Forms.PictureBox() + Me.lblNullBeleg = New System.Windows.Forms.Label() + Me.lblJahres = New System.Windows.Forms.Label() + Me.lblMonats = New System.Windows.Forms.Label() + Me.lblTages = New System.Windows.Forms.Label() + Me.picJahres = New System.Windows.Forms.PictureBox() + Me.picMonats = New System.Windows.Forms.PictureBox() + Me.picTages = New System.Windows.Forms.PictureBox() + Me.lblWarning = New System.Windows.Forms.Label() + Me.Button11 = New System.Windows.Forms.Button() + Me.Button17 = New System.Windows.Forms.Button() + Me.lbldailyCashboxClosing = New System.Windows.Forms.Label() Me.Button10 = New System.Windows.Forms.Button() Me.btnBelegGSKunde = New System.Windows.Forms.Button() Me.pnl = New System.Windows.Forms.Panel() @@ -79,6 +96,7 @@ Partial Class frmKassenbuch Me.btnBelegLeihgeld = New System.Windows.Forms.Button() Me.UsrCntlTestsystem1 = New VERAG_PROG_ALLGEMEIN.usrCntlTestsystem() Me.Button1 = New System.Windows.Forms.Button() + Me.cm_FT = New System.Windows.Forms.ContextMenuStrip(Me.components) CType(Me.DataGridView1, System.ComponentModel.ISupportInitialize).BeginInit() CType(Me.DataGridView2, System.ComponentModel.ISupportInitialize).BeginInit() Me.pnlTop.SuspendLayout() @@ -86,6 +104,12 @@ Partial Class frmKassenbuch Me.pnlSuche.SuspendLayout() Me.pnlSearch.SuspendLayout() Me.pnlMain.SuspendLayout() + CType(Me.pbInitialStart, System.ComponentModel.ISupportInitialize).BeginInit() + CType(Me.picTSEOnline, System.ComponentModel.ISupportInitialize).BeginInit() + CType(Me.picNULLbeleg, System.ComponentModel.ISupportInitialize).BeginInit() + CType(Me.picJahres, System.ComponentModel.ISupportInitialize).BeginInit() + CType(Me.picMonats, System.ComponentModel.ISupportInitialize).BeginInit() + CType(Me.picTages, System.ComponentModel.ISupportInitialize).BeginInit() Me.pnl.SuspendLayout() Me.SuspendLayout() ' @@ -130,7 +154,7 @@ Partial Class frmKassenbuch Me.Label5.Anchor = CType((System.Windows.Forms.AnchorStyles.Top Or System.Windows.Forms.AnchorStyles.Right), System.Windows.Forms.AnchorStyles) Me.Label5.Font = New System.Drawing.Font("Microsoft Sans Serif", 12.0!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) Me.Label5.ForeColor = System.Drawing.Color.White - Me.Label5.Location = New System.Drawing.Point(603, 31) + Me.Label5.Location = New System.Drawing.Point(613, 31) Me.Label5.Name = "Label5" Me.Label5.Size = New System.Drawing.Size(151, 20) Me.Label5.TabIndex = 1 @@ -184,7 +208,7 @@ Partial Class frmKassenbuch Me.DataGridView2.ReadOnly = True Me.DataGridView2.RowHeadersVisible = False Me.DataGridView2.SelectionMode = System.Windows.Forms.DataGridViewSelectionMode.FullRowSelect - Me.DataGridView2.Size = New System.Drawing.Size(766, 145) + Me.DataGridView2.Size = New System.Drawing.Size(776, 158) Me.DataGridView2.TabIndex = 5 ' 'datVon @@ -307,7 +331,7 @@ Partial Class frmKassenbuch Me.Label9.Anchor = CType((System.Windows.Forms.AnchorStyles.Top Or System.Windows.Forms.AnchorStyles.Right), System.Windows.Forms.AnchorStyles) Me.Label9.Font = New System.Drawing.Font("Microsoft Sans Serif", 12.0!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) Me.Label9.ForeColor = System.Drawing.Color.White - Me.Label9.Location = New System.Drawing.Point(451, 9) + Me.Label9.Location = New System.Drawing.Point(461, 9) Me.Label9.Name = "Label9" Me.Label9.Size = New System.Drawing.Size(305, 20) Me.Label9.TabIndex = 9 @@ -419,7 +443,7 @@ Partial Class frmKassenbuch Me.Button5.Font = New System.Drawing.Font("Microsoft Sans Serif", 12.0!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) Me.Button5.ForeColor = System.Drawing.Color.Black Me.Button5.ImageAlign = System.Drawing.ContentAlignment.MiddleLeft - Me.Button5.Location = New System.Drawing.Point(458, 36) + Me.Button5.Location = New System.Drawing.Point(394, 36) Me.Button5.Name = "Button5" Me.Button5.Size = New System.Drawing.Size(184, 42) Me.Button5.TabIndex = 19 @@ -477,7 +501,7 @@ Partial Class frmKassenbuch Me.btnStorno.Font = New System.Drawing.Font("Microsoft Sans Serif", 12.0!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) Me.btnStorno.ForeColor = System.Drawing.Color.Black Me.btnStorno.ImageAlign = System.Drawing.ContentAlignment.MiddleLeft - Me.btnStorno.Location = New System.Drawing.Point(458, 84) + Me.btnStorno.Location = New System.Drawing.Point(394, 84) Me.btnStorno.Name = "btnStorno" Me.btnStorno.Size = New System.Drawing.Size(184, 42) Me.btnStorno.TabIndex = 420 @@ -498,7 +522,7 @@ Partial Class frmKassenbuch Me.pnlTop.Dock = System.Windows.Forms.DockStyle.Top Me.pnlTop.Location = New System.Drawing.Point(0, 0) Me.pnlTop.Name = "pnlTop" - Me.pnlTop.Size = New System.Drawing.Size(768, 60) + Me.pnlTop.Size = New System.Drawing.Size(778, 60) Me.pnlTop.TabIndex = 421 ' 'Label15 @@ -526,7 +550,7 @@ Partial Class frmKassenbuch ' Me.Label7.AutoSize = True Me.Label7.Font = New System.Drawing.Font("Microsoft Sans Serif", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) - Me.Label7.Location = New System.Drawing.Point(455, 20) + Me.Label7.Location = New System.Drawing.Point(391, 20) Me.Label7.Name = "Label7" Me.Label7.Size = New System.Drawing.Size(58, 13) Me.Label7.TabIndex = 422 @@ -542,9 +566,9 @@ Partial Class frmKassenbuch Me.pnlSuche.Controls.Add(Me.Label8) Me.pnlSuche.Controls.Add(Me.DataGridView1) Me.pnlSuche.Dock = System.Windows.Forms.DockStyle.Fill - Me.pnlSuche.Location = New System.Drawing.Point(0, 470) + Me.pnlSuche.Location = New System.Drawing.Point(0, 493) Me.pnlSuche.Name = "pnlSuche" - Me.pnlSuche.Size = New System.Drawing.Size(768, 205) + Me.pnlSuche.Size = New System.Drawing.Size(778, 218) Me.pnlSuche.TabIndex = 423 ' 'pnlSearch @@ -566,7 +590,7 @@ Partial Class frmKassenbuch Me.pnlSearch.Dock = System.Windows.Forms.DockStyle.Top Me.pnlSearch.Location = New System.Drawing.Point(0, 0) Me.pnlSearch.Name = "pnlSearch" - Me.pnlSearch.Size = New System.Drawing.Size(766, 58) + Me.pnlSearch.Size = New System.Drawing.Size(776, 58) Me.pnlSearch.TabIndex = 420 ' 'btnExcel @@ -602,6 +626,23 @@ Partial Class frmKassenbuch ' 'pnlMain ' + Me.pnlMain.Controls.Add(Me.pbInitialStart) + Me.pnlMain.Controls.Add(Me.lblInitStart) + Me.pnlMain.Controls.Add(Me.lblFiskaltrustHeader) + Me.pnlMain.Controls.Add(Me.picTSEOnline) + Me.pnlMain.Controls.Add(Me.lblTSEOnline) + Me.pnlMain.Controls.Add(Me.picNULLbeleg) + Me.pnlMain.Controls.Add(Me.lblNullBeleg) + Me.pnlMain.Controls.Add(Me.lblJahres) + Me.pnlMain.Controls.Add(Me.lblMonats) + Me.pnlMain.Controls.Add(Me.lblTages) + Me.pnlMain.Controls.Add(Me.picJahres) + Me.pnlMain.Controls.Add(Me.picMonats) + Me.pnlMain.Controls.Add(Me.picTages) + Me.pnlMain.Controls.Add(Me.lblWarning) + Me.pnlMain.Controls.Add(Me.Button11) + Me.pnlMain.Controls.Add(Me.Button17) + Me.pnlMain.Controls.Add(Me.lbldailyCashboxClosing) Me.pnlMain.Controls.Add(Me.Button10) Me.pnlMain.Controls.Add(Me.btnBelegGSKunde) Me.pnlMain.Controls.Add(Me.pnl) @@ -624,9 +665,204 @@ Partial Class frmKassenbuch Me.pnlMain.Dock = System.Windows.Forms.DockStyle.Top Me.pnlMain.Location = New System.Drawing.Point(0, 60) Me.pnlMain.Name = "pnlMain" - Me.pnlMain.Size = New System.Drawing.Size(768, 410) + Me.pnlMain.Size = New System.Drawing.Size(778, 433) Me.pnlMain.TabIndex = 425 ' + 'pbInitialStart + ' + Me.pbInitialStart.BackgroundImage = Global.SDL.My.Resources.Resources.ok + Me.pbInitialStart.BackgroundImageLayout = System.Windows.Forms.ImageLayout.Zoom + Me.pbInitialStart.Location = New System.Drawing.Point(614, 67) + Me.pbInitialStart.Name = "pbInitialStart" + Me.pbInitialStart.Size = New System.Drawing.Size(27, 20) + Me.pbInitialStart.TabIndex = 452 + Me.pbInitialStart.TabStop = False + Me.pbInitialStart.Visible = False + ' + 'lblInitStart + ' + Me.lblInitStart.AutoSize = True + Me.lblInitStart.Font = New System.Drawing.Font("Microsoft Sans Serif", 9.75!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.lblInitStart.ForeColor = System.Drawing.Color.Black + Me.lblInitStart.Location = New System.Drawing.Point(655, 71) + Me.lblInitStart.Name = "lblInitStart" + Me.lblInitStart.Size = New System.Drawing.Size(70, 16) + Me.lblInitStart.TabIndex = 451 + Me.lblInitStart.Text = "Initial Start " + Me.lblInitStart.Visible = False + ' + 'lblFiskaltrustHeader + ' + Me.lblFiskaltrustHeader.AutoSize = True + Me.lblFiskaltrustHeader.Font = New System.Drawing.Font("Microsoft Sans Serif", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.lblFiskaltrustHeader.Location = New System.Drawing.Point(611, 20) + Me.lblFiskaltrustHeader.Name = "lblFiskaltrustHeader" + Me.lblFiskaltrustHeader.Size = New System.Drawing.Size(65, 13) + Me.lblFiskaltrustHeader.TabIndex = 450 + Me.lblFiskaltrustHeader.Text = "Fiskaltrust" + ' + 'picTSEOnline + ' + Me.picTSEOnline.BackgroundImage = Global.SDL.My.Resources.Resources.ok + Me.picTSEOnline.BackgroundImageLayout = System.Windows.Forms.ImageLayout.Zoom + Me.picTSEOnline.Location = New System.Drawing.Point(614, 42) + Me.picTSEOnline.Name = "picTSEOnline" + Me.picTSEOnline.Size = New System.Drawing.Size(27, 20) + Me.picTSEOnline.TabIndex = 449 + Me.picTSEOnline.TabStop = False + Me.picTSEOnline.Visible = False + ' + 'lblTSEOnline + ' + Me.lblTSEOnline.AutoSize = True + Me.lblTSEOnline.Font = New System.Drawing.Font("Microsoft Sans Serif", 9.75!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.lblTSEOnline.ForeColor = System.Drawing.Color.Black + Me.lblTSEOnline.Location = New System.Drawing.Point(655, 46) + Me.lblTSEOnline.Name = "lblTSEOnline" + Me.lblTSEOnline.Size = New System.Drawing.Size(75, 16) + Me.lblTSEOnline.TabIndex = 448 + Me.lblTSEOnline.Text = "TSE Online" + Me.lblTSEOnline.Visible = False + ' + 'picNULLbeleg + ' + Me.picNULLbeleg.BackgroundImage = Global.SDL.My.Resources.Resources.ok + Me.picNULLbeleg.BackgroundImageLayout = System.Windows.Forms.ImageLayout.Zoom + Me.picNULLbeleg.Location = New System.Drawing.Point(614, 93) + Me.picNULLbeleg.Name = "picNULLbeleg" + Me.picNULLbeleg.Size = New System.Drawing.Size(27, 20) + Me.picNULLbeleg.TabIndex = 447 + Me.picNULLbeleg.TabStop = False + Me.picNULLbeleg.Visible = False + ' + 'lblNullBeleg + ' + Me.lblNullBeleg.AutoSize = True + Me.lblNullBeleg.Font = New System.Drawing.Font("Microsoft Sans Serif", 9.75!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.lblNullBeleg.ForeColor = System.Drawing.Color.Black + Me.lblNullBeleg.Location = New System.Drawing.Point(655, 97) + Me.lblNullBeleg.Name = "lblNullBeleg" + Me.lblNullBeleg.Size = New System.Drawing.Size(81, 16) + Me.lblNullBeleg.TabIndex = 446 + Me.lblNullBeleg.Text = "NULL-Beleg" + Me.lblNullBeleg.Visible = False + ' + 'lblJahres + ' + Me.lblJahres.AutoSize = True + Me.lblJahres.Font = New System.Drawing.Font("Microsoft Sans Serif", 9.75!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.lblJahres.ForeColor = System.Drawing.Color.Black + Me.lblJahres.Location = New System.Drawing.Point(655, 177) + Me.lblJahres.Name = "lblJahres" + Me.lblJahres.Size = New System.Drawing.Size(109, 16) + Me.lblJahres.TabIndex = 445 + Me.lblJahres.Text = "Jahresabschluss" + Me.lblJahres.Visible = False + ' + 'lblMonats + ' + Me.lblMonats.AutoSize = True + Me.lblMonats.Font = New System.Drawing.Font("Microsoft Sans Serif", 9.75!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.lblMonats.ForeColor = System.Drawing.Color.Black + Me.lblMonats.Location = New System.Drawing.Point(655, 151) + Me.lblMonats.Name = "lblMonats" + Me.lblMonats.Size = New System.Drawing.Size(112, 16) + Me.lblMonats.TabIndex = 444 + Me.lblMonats.Text = "Monatsabschluss" + Me.lblMonats.Visible = False + ' + 'lblTages + ' + Me.lblTages.AutoSize = True + Me.lblTages.Font = New System.Drawing.Font("Microsoft Sans Serif", 9.75!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.lblTages.ForeColor = System.Drawing.Color.Black + Me.lblTages.Location = New System.Drawing.Point(655, 125) + Me.lblTages.Name = "lblTages" + Me.lblTages.Size = New System.Drawing.Size(108, 16) + Me.lblTages.TabIndex = 443 + Me.lblTages.Text = "Tagesabschluss" + Me.lblTages.Visible = False + ' + 'picJahres + ' + Me.picJahres.BackgroundImage = Global.SDL.My.Resources.Resources.ok + Me.picJahres.BackgroundImageLayout = System.Windows.Forms.ImageLayout.Zoom + Me.picJahres.Location = New System.Drawing.Point(614, 173) + Me.picJahres.Name = "picJahres" + Me.picJahres.Size = New System.Drawing.Size(27, 20) + Me.picJahres.TabIndex = 442 + Me.picJahres.TabStop = False + Me.picJahres.Visible = False + ' + 'picMonats + ' + Me.picMonats.BackgroundImage = Global.SDL.My.Resources.Resources.ok + Me.picMonats.BackgroundImageLayout = System.Windows.Forms.ImageLayout.Zoom + Me.picMonats.Location = New System.Drawing.Point(614, 147) + Me.picMonats.Name = "picMonats" + Me.picMonats.Size = New System.Drawing.Size(27, 20) + Me.picMonats.TabIndex = 441 + Me.picMonats.TabStop = False + Me.picMonats.Visible = False + ' + 'picTages + ' + Me.picTages.BackgroundImage = Global.SDL.My.Resources.Resources.ok + Me.picTages.BackgroundImageLayout = System.Windows.Forms.ImageLayout.Zoom + Me.picTages.Location = New System.Drawing.Point(614, 121) + Me.picTages.Name = "picTages" + Me.picTages.Size = New System.Drawing.Size(27, 20) + Me.picTages.TabIndex = 440 + Me.picTages.TabStop = False + Me.picTages.Visible = False + ' + 'lblWarning + ' + Me.lblWarning.AutoSize = True + Me.lblWarning.Font = New System.Drawing.Font("Microsoft Sans Serif", 9.75!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.lblWarning.ForeColor = System.Drawing.Color.Red + Me.lblWarning.Location = New System.Drawing.Point(368, 175) + Me.lblWarning.Name = "lblWarning" + Me.lblWarning.Size = New System.Drawing.Size(0, 16) + Me.lblWarning.TabIndex = 439 + ' + 'Button11 + ' + Me.Button11.FlatStyle = System.Windows.Forms.FlatStyle.Flat + Me.Button11.Font = New System.Drawing.Font("Microsoft Sans Serif", 12.0!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.Button11.ForeColor = System.Drawing.Color.Black + Me.Button11.ImageAlign = System.Drawing.ContentAlignment.MiddleLeft + Me.Button11.Location = New System.Drawing.Point(394, 130) + Me.Button11.Name = "Button11" + Me.Button11.Size = New System.Drawing.Size(184, 42) + Me.Button11.TabIndex = 438 + Me.Button11.Text = "Fiskaltrust" + Me.Button11.TextAlign = System.Drawing.ContentAlignment.MiddleLeft + Me.Button11.UseVisualStyleBackColor = True + ' + 'Button17 + ' + Me.Button17.BackgroundImage = Global.SDL.My.Resources.Resources.fragezeichen + Me.Button17.BackgroundImageLayout = System.Windows.Forms.ImageLayout.Zoom + Me.Button17.FlatAppearance.BorderSize = 0 + Me.Button17.FlatStyle = System.Windows.Forms.FlatStyle.Flat + Me.Button17.Location = New System.Drawing.Point(742, 24) + Me.Button17.Name = "Button17" + Me.Button17.Size = New System.Drawing.Size(25, 20) + Me.Button17.TabIndex = 437 + Me.Button17.UseVisualStyleBackColor = True + ' + 'lbldailyCashboxClosing + ' + Me.lbldailyCashboxClosing.AutoSize = True + Me.lbldailyCashboxClosing.Font = New System.Drawing.Font("Microsoft Sans Serif", 9.75!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.lbldailyCashboxClosing.ForeColor = System.Drawing.Color.Red + Me.lbldailyCashboxClosing.Location = New System.Drawing.Point(363, 5) + Me.lbldailyCashboxClosing.Name = "lbldailyCashboxClosing" + Me.lbldailyCashboxClosing.Size = New System.Drawing.Size(410, 16) + Me.lbldailyCashboxClosing.TabIndex = 436 + Me.lbldailyCashboxClosing.Text = "Täglicher Kassenabschluss dieser Kasse ist verpflichtend!" + ' 'Button10 ' Me.Button10.FlatStyle = System.Windows.Forms.FlatStyle.Flat @@ -669,7 +905,7 @@ Partial Class frmKassenbuch Me.pnl.Controls.Add(Me.Button8) Me.pnl.Controls.Add(Me.cboKassen) Me.pnl.Controls.Add(Me.Label18) - Me.pnl.Location = New System.Drawing.Point(442, 132) + Me.pnl.Location = New System.Drawing.Point(378, 201) Me.pnl.Name = "pnl" Me.pnl.Size = New System.Drawing.Size(287, 223) Me.pnl.TabIndex = 430 @@ -759,7 +995,7 @@ Partial Class frmKassenbuch 'lblRKSV_KASSEN_Bez ' Me.lblRKSV_KASSEN_Bez.Font = New System.Drawing.Font("Microsoft Sans Serif", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) - Me.lblRKSV_KASSEN_Bez.Location = New System.Drawing.Point(463, 3) + Me.lblRKSV_KASSEN_Bez.Location = New System.Drawing.Point(542, 3) Me.lblRKSV_KASSEN_Bez.Name = "lblRKSV_KASSEN_Bez" Me.lblRKSV_KASSEN_Bez.Size = New System.Drawing.Size(231, 13) Me.lblRKSV_KASSEN_Bez.TabIndex = 426 @@ -799,7 +1035,7 @@ Partial Class frmKassenbuch Me.Button1.Font = New System.Drawing.Font("Microsoft Sans Serif", 12.0!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) Me.Button1.ForeColor = System.Drawing.Color.Black Me.Button1.ImageAlign = System.Drawing.ContentAlignment.MiddleLeft - Me.Button1.Location = New System.Drawing.Point(458, 197) + Me.Button1.Location = New System.Drawing.Point(400, 197) Me.Button1.Name = "Button1" Me.Button1.Size = New System.Drawing.Size(260, 42) Me.Button1.TabIndex = 434 @@ -807,12 +1043,17 @@ Partial Class frmKassenbuch Me.Button1.TextAlign = System.Drawing.ContentAlignment.MiddleLeft Me.Button1.UseVisualStyleBackColor = True ' + 'cm_FT + ' + Me.cm_FT.Name = "ContextMenuStrip1" + Me.cm_FT.Size = New System.Drawing.Size(61, 4) + ' 'frmKassenbuch ' Me.AutoScaleDimensions = New System.Drawing.SizeF(6.0!, 13.0!) Me.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font Me.BackColor = System.Drawing.Color.White - Me.ClientSize = New System.Drawing.Size(768, 675) + Me.ClientSize = New System.Drawing.Size(778, 711) Me.Controls.Add(Me.pnlSuche) Me.Controls.Add(Me.pnlMain) Me.Controls.Add(Me.pnlTop) @@ -831,6 +1072,12 @@ Partial Class frmKassenbuch Me.pnlSearch.PerformLayout() Me.pnlMain.ResumeLayout(False) Me.pnlMain.PerformLayout() + CType(Me.pbInitialStart, System.ComponentModel.ISupportInitialize).EndInit() + CType(Me.picTSEOnline, System.ComponentModel.ISupportInitialize).EndInit() + CType(Me.picNULLbeleg, System.ComponentModel.ISupportInitialize).EndInit() + CType(Me.picJahres, System.ComponentModel.ISupportInitialize).EndInit() + CType(Me.picMonats, System.ComponentModel.ISupportInitialize).EndInit() + CType(Me.picTages, System.ComponentModel.ISupportInitialize).EndInit() Me.pnl.ResumeLayout(False) Me.pnl.PerformLayout() Me.ResumeLayout(False) @@ -891,4 +1138,22 @@ Partial Class frmKassenbuch Friend WithEvents Button7 As System.Windows.Forms.Button Friend WithEvents Button10 As Button Friend WithEvents btnPosTerminal As Button + Friend WithEvents lbldailyCashboxClosing As Label + Friend WithEvents Button17 As Button + Friend WithEvents Button11 As Button + Friend WithEvents cm_FT As ContextMenuStrip + Friend WithEvents lblWarning As Label + Friend WithEvents lblJahres As Label + Friend WithEvents lblMonats As Label + Friend WithEvents lblTages As Label + Friend WithEvents picJahres As PictureBox + Friend WithEvents picMonats As PictureBox + Friend WithEvents picTages As PictureBox + Friend WithEvents picNULLbeleg As PictureBox + Friend WithEvents lblNullBeleg As Label + Friend WithEvents picTSEOnline As PictureBox + Friend WithEvents lblTSEOnline As Label + Friend WithEvents lblFiskaltrustHeader As Label + Friend WithEvents pbInitialStart As PictureBox + Friend WithEvents lblInitStart As Label End Class diff --git a/SDL/kassenbuch/frmKassenbuch.resx b/SDL/kassenbuch/frmKassenbuch.resx index 66ac4fbc..a293f9f1 100644 --- a/SDL/kassenbuch/frmKassenbuch.resx +++ b/SDL/kassenbuch/frmKassenbuch.resx @@ -142,6 +142,9 @@ SNw4kn9U62ALlUplLU5qtVoaZwrCC9FnbaaC0/EHAAAAAElFTkSuQmCC
+ + 25, 8 + AAABAAEAgIAAAAEAGAAoyAAAFgAAACgAAACAAAAAAAEAAAEAGAAAAAAAAMgAAMQOAADEDgAAAAAAAAAA diff --git a/SDL/kassenbuch/frmKassenbuch.vb b/SDL/kassenbuch/frmKassenbuch.vb index 63020d7b..c8a78c83 100644 --- a/SDL/kassenbuch/frmKassenbuch.vb +++ b/SDL/kassenbuch/frmKassenbuch.vb @@ -1,4 +1,4 @@ -Imports SDL.RKSVServer +Imports DocumentFormat.OpenXml.Drawing Public Class frmKassenbuch Dim SQL As New SQL @@ -14,6 +14,17 @@ Public Class frmKassenbuch Public master_Kasse As Boolean = False Dim FMZOLL_SQL As New FMZOLL_SQL + Dim tagesabschlussIsSet As Boolean = False + Dim monatsabschlussIsSet As Boolean = False + Dim jahresabschlussIsSet As Boolean = False + Dim NULLBelegIsCreated As Boolean = True + Dim InitialStartIsCreated As Boolean = True + Dim OutOfOrderIsCreated As Boolean = False + Dim TSEIsOnline As Boolean = False + Dim MiddlewareIsOnline As Boolean = False + + Dim isADMIN As Boolean = False + Public Sub New(PERSONAL As cPersonal, PERSONAL_LG As cPersonal) ' Dieser Aufruf ist für den Designer erforderlich. InitializeComponent() @@ -59,7 +70,8 @@ Public Class frmKassenbuch If PERSONAL.ID = 274 Then master_Kasse = True If VERAG_PROG_ALLGEMEIN.cAllgemein.USRKURZNAME = "ADMIN" Or VERAG_PROG_ALLGEMEIN.cAllgemein.USRKURZNAME = "SIENER" Or VERAG_PROG_ALLGEMEIN.cAllgemein.USRKURZNAME = "DANIEL" Then - Button6.Visible = True + isADMIN = True + End If KennwortTime = Now initDgv() 'nur set @@ -87,10 +99,54 @@ Public Class frmKassenbuch End If + If isADMIN Then + Button6.Visible = True + End If + + + End Sub + + Private Sub InitFiskaltrust(TSEisOnline As Boolean, tagesabschluss As Boolean, Montagsabschluss As Boolean, Jahresabschluss As Boolean, NULLBeleg As Boolean, initialStart As Boolean) + + lblTSEOnline.Visible = True + lblTages.Visible = True + lblMonats.Visible = True + lblJahres.Visible = True + lblNullBeleg.Visible = True + lblInitStart.Visible = True + + + picJahres.Visible = True + picMonats.Visible = True + picTages.Visible = True + picNULLbeleg.Visible = True + picTSEOnline.Visible = True + pbInitialStart.Visible = True + + showPic(TSEisOnline, picTSEOnline) + showPic(tagesabschluss, picTages) + showPic(monatsabschlussIsSet, picMonats) + showPic(Jahresabschluss, picJahres) + showPic(NULLBeleg, picNULLbeleg) + showPic(initialStart, pbInitialStart) + + + End Sub + + Sub showPic(ok As Boolean, pic As PictureBox) + pic.Visible = True + If ok Then + pic.BackgroundImage = My.Resources.ok + Else + pic.BackgroundImage = My.Resources.del + End If + End Sub Sub init() Dim sqlstr = "" + lblWarning.Text = "" + If master_Kasse Then Label9.Text = "ADMIN" pnlTop.BackColor = Color.Red @@ -102,9 +158,6 @@ Public Class frmKassenbuch btnBelegAusgang.Enabled = False pnl.Visible = True - - - 'sqlstr = "SELECT Sum(tblKassenbuch.Soll) AS Soll, Sum(tblKassenbuch.Haben) AS Haben, (Sum(tblKassenbuch.Soll)-Sum(tblKassenbuch.Haben)) AS Saldo " & ' " FROM Personal INNER JOIN tblKassenbuch ON Personal.ID = tblKassenbuch.Benutzer " & ' " WHERE tblKassenbuch.Mandant='" & PERSONAL.Mandant & "' AND tblKassenbuch.Niederlassung='" & PERSONAL.Niederlassung & "' " & @@ -153,10 +206,128 @@ Public Class frmKassenbuch End If + If PERSONAL.cRKSV_Kasse IsNot Nothing AndAlso PERSONAL.cRKSV_Kasse.rksv_FT_RestServiceURL IsNot Nothing AndAlso PERSONAL.cRKSV_Kasse.rksv_FT_CashboxID IsNot Nothing AndAlso PERSONAL.cRKSV_Kasse.rksv_FT_AccessToken IsNot Nothing AndAlso PERSONAL.cRKSV_Kasse.rksv_FT_Country IsNot Nothing Then + + Dim client_chilkat As New cFiskaltrustClient_chilkat(PERSONAL.cRKSV_Kasse.rksv_FT_RestServiceURL, PERSONAL.cRKSV_Kasse.rksv_FT_CashboxID, PERSONAL.cRKSV_Kasse.rksv_FT_AccessToken, PERSONAL.cRKSV_Kasse.rksv_FT_Country) + If client_chilkat.isFiskaltrust() Then + + resetFIskaltrust() + + lbldailyCashboxClosing.Visible = True + Button11.Visible = True + + Dim tagesabschluss As Integer = CInt(SQL.getValueTxtBySql("SELECT count(*) FROM [VERAG].[dbo].[tblRKSV_FT] where Day(ftReceiptMoment) = Day(GETDATE()) and ftEndOfDayReceipt is not null and ftCashBoxID = '" & PERSONAL.cRKSV_Kasse.rksv_FT_CashboxID & "'", "FMZOLL")) + If tagesabschluss > 0 Then tagesabschlussIsSet = True + + Dim monatsabschluss As Integer = CInt(SQL.getValueTxtBySql("SELECT count(*) FROM [VERAG].[dbo].[tblRKSV_FT] where Month(ftReceiptMoment) = Month(GETDATE()) and ftEndOfMonthReceipt is not null and ftCashBoxID = '" & PERSONAL.cRKSV_Kasse.rksv_FT_CashboxID & "'", "FMZOLL")) + If monatsabschluss > 0 Then monatsabschlussIsSet = True + + Dim jahresabschluss As Integer = CInt(SQL.getValueTxtBySql("SELECT count(*) FROM [VERAG].[dbo].[tblRKSV_FT] where Year(ftReceiptMoment) = Year(GETDATE()) and ftEndOfYearReceipt is not null and ftCashBoxID = '" & PERSONAL.cRKSV_Kasse.rksv_FT_CashboxID & "'", "FMZOLL")) + If jahresabschluss > 0 Then jahresabschlussIsSet = True + If PERSONAL.cRKSV_Kasse.rksv_FT_ZeroReceiptCreated Is Nothing OrElse IsDBNull(PERSONAL.cRKSV_Kasse.rksv_FT_ZeroReceiptCreated) Then + NULLBelegIsCreated = False + End If + + If Not (PERSONAL.cRKSV_Kasse.rksv_FT_OutOfOrderCreated Is Nothing OrElse IsDBNull(PERSONAL.cRKSV_Kasse.rksv_FT_OutOfOrderCreated)) Then + OutOfOrderIsCreated = True + End If + + + If PERSONAL.cRKSV_Kasse.rksv_FT_InitialStartCreated Is Nothing OrElse IsDBNull(PERSONAL.cRKSV_Kasse.rksv_FT_InitialStartCreated) Then + InitialStartIsCreated = False + End If + + Dim result As String = client_chilkat.Echo(PERSONAL.cRKSV_Kasse.rksv_bez & " " & PERSONAL.cRKSV_Kasse.rksv_FT_Country & " - ") + + If result IsNot Nothing Then + If result.Contains("VERBINDUNG OK") Then + TSEIsOnline = True + MiddlewareIsOnline = True + Else + TSEIsOnline = False + MiddlewareIsOnline = True + End If + Else + TSEIsOnline = False + MiddlewareIsOnline = False + + End If + + InitFiskaltrust(TSEIsOnline, tagesabschlussIsSet, monatsabschlussIsSet, jahresabschlussIsSet, NULLBelegIsCreated, InitialStartIsCreated) + + If Not MiddlewareIsOnline Then + diasableBarverkauf("MIDDLEWARE") + ElseIf Not InitialStartIsCreated Then + diasableBarverkauf("INITIALSTART") + ElseIf tagesabschlussIsSet Then + diasableBarverkauf("TAGESABSCHLUSS") + ElseIf OutOfOrderIsCreated Then + diasableBarverkauf("OUTOFORDER") + Else + + If Not TSEIsOnline Then + lbldailyCashboxClosing.Text = "TSE ist OFFLINE: Belege werden nachträglich signiert!" + End If + + If VERAG_PROG_ALLGEMEIN.cBerechtignunen.CHECK_BERECHTIGUNG_bool("KASSE", Me) Then + btnBelegKunde.Enabled = True + btnBelegAusgang.Enabled = True + btnBelegEingang.Enabled = True + btnBelegGSKunde.Enabled = True + btnBelegLeihgeld.Enabled = True + btnStorno.Enabled = True + End If + + + End If + + End If + + Else + lbldailyCashboxClosing.Text = "" + Button11.Visible = False + lblFiskaltrustHeader.Visible = False + End If + + + + ' Label9.Text = PERSONAL.Name DataGridView2.ClearSelection() End Sub + + Private Sub diasableBarverkauf(status) + + Select Case status + ' Case "NULLBELEG" : lbldailyCashboxClosing.Text = "Es wurde kein 0-Beleg erstellt (OPTIONAL)" + Case "INITIALSTART" : lbldailyCashboxClosing.Text = "Kasse wurde noch nicht gestartet!" + Case "TAGESABSCHLUSS" : lbldailyCashboxClosing.Text = "Tagesabschluss wurde bereits durchgeführt!" + Case "OUTOFORDER" : lbldailyCashboxClosing.Text = "STATUS: INAKTIV!" + Case "MIDDLEWARE" : lbldailyCashboxClosing.Text = "Middleware ist OFFLINE!" + End Select + + btnBelegKunde.Enabled = False + btnBelegAusgang.Enabled = False + btnBelegEingang.Enabled = False + btnBelegGSKunde.Enabled = False + btnBelegLeihgeld.Enabled = False + btnStorno.Enabled = False + + + End Sub + + Private Sub resetFIskaltrust() + + tagesabschlussIsSet = False + monatsabschlussIsSet = False + jahresabschlussIsSet = False + NULLBelegIsCreated = True + InitialStartIsCreated = True + OutOfOrderIsCreated = False + TSEIsOnline = False + + End Sub Private Sub Button3_Click(sender As Object, e As EventArgs) Handles Button3.Click searchdate = searchdate.AddMonths(1) initDate() @@ -175,7 +346,7 @@ Public Class frmKassenbuch End Sub Dim searchdate As Date = CDate("01." & Now.Month & "." & Now.Year) - Sub initDgv() + Sub initDgv(Optional isFiskaltrust As Boolean = False) With DataGridView2 .Columns.Clear() @@ -197,9 +368,10 @@ Public Class frmKassenbuch If PERSONAL.isLeihgeldkasse Then lgTxt = ",[Fahrer],[Passnummer] " End If + .SET_SQL("SELECT b.rksv_BelegId, b.BelegDat, CASE WHEN b.Belegart=1 THEN 'E' ELSE 'A' END as Belegart,CASE WHEN b.Beleg_TYP='E' THEN rksv_umsatz ELSE (SELECT sum( betrag ) FROM tblEABelegposition WHERE (b.BelegNr = tblEABelegposition.BelegNr) AND (b.BelegDat = tblEABelegposition.BelegDat) AND (b.Benutzer = tblEABelegposition.Benutzer) AND (b.Niederlassung = tblEABelegposition.Niederlassung) AND (b.Mandant = tblEABelegposition.Mandant ) ) END as Betrag, b.Ordnungsbegriff, b.BelegNr, b.Frachtführer, " & " CASE WHEN b.storniert=1 THEN 'JA' ELSE '' END as [storniert], b.Beleg_TYP ,b.Benutzer " & benutzerBezTMP & lgTxt & ", b.ECZahlungsPerAPI as EC,b.ECZahlungsNr as ECNr, mit_username as kassiert" & - " FROM tblEABelegnummer as b LEFT JOIN " & VERAG_PROG_ALLGEMEIN.cAllgemein.AVISO_SERVER & " .[ADMIN].[dbo].[tblMitarbeiter] on durchfuehrender_Benutzer = mit_id WHERE b.Mandant='" & PERSONAL.Mandant & "' AND b.Niederlassung='" & PERSONAL.Niederlassung & "' " & benutzerTMP & " AND BelegDat BETWEEN '" & datVon.Value.ToShortDateString & "' AND '" & datBis.Value.ToShortDateString & "' " & + " FROM tblEABelegnummer as b LEFT JOIN " & VERAG_PROG_ALLGEMEIN.cAllgemein.AVISO_SERVER & " .[ADMIN].[dbo].[tblMitarbeiter] on durchfuehrender_Benutzer = mit_id WHERE b.Mandant='" & PERSONAL.Mandant & "' AND b.Niederlassung='" & PERSONAL.Niederlassung & "' " & benutzerTMP & " AND BelegDat BETWEEN '" & datVon.Value.ToShortDateString & "' AND '" & datBis.Value.ToShortDateString & "' and b.rksv_BelegId >= 0 " & " ORDER BY b.rksv_BelegId DESC, b.[upsize_ts] desc;", "FMZOLL") ' .DataSource = SQL.loadDgvBySql("SELECT b.rksv_BelegId, b.BelegDat, CASE WHEN b.Belegart=1 THEN 'E' ELSE 'A' END as Belegart,CASE WHEN b.Beleg_TYP='E' THEN rksv_umsatz ELSE (SELECT sum( betrag ) FROM tblEABelegposition WHERE (b.BelegNr = tblEABelegposition.BelegNr) AND (b.BelegDat = tblEABelegposition.BelegDat) AND (b.Benutzer = tblEABelegposition.Benutzer) AND (b.Niederlassung = tblEABelegposition.Niederlassung) AND (b.Mandant = tblEABelegposition.Mandant ) ) END as Betrag, b.Ordnungsbegriff, b.BelegNr, b.Frachtführer, " & ' " CASE WHEN b.storniert=1 THEN 'JA' ELSE '' END as [storniert], b.Beleg_TYP ,b.Benutzer " & benutzerBezTMP & @@ -239,10 +411,22 @@ Public Class frmKassenbuch .Columns("Passnummer").Visible = False End If + If .Columns.Contains("FT_MissingSignature") Then + .Columns("FT_MissingSignature").HeaderText = "fehl Sig." + .Columns("FT_MissingSignature").Width = 45 + For Each r As DataGridViewRow In .Rows + If Not IsDBNull(r.Cells("FT_MissingSignature").Value) AndAlso r.Cells("FT_MissingSignature").Value Then + r.DefaultCellStyle.ForeColor = Color.Red + End If + Next + End If + If master_Kasse Then .Columns("BenutzerBez").HeaderText = "Benutzer" 'gibts bei bei master + .Columns("BenutzerBez").HeaderText = "Benutzer" 'gibts bei bei master End If + For Each r As DataGridViewRow In .Rows If r.Cells("storniert").Value = "JA" Then r.DefaultCellStyle.ForeColor = Color.Red @@ -1014,9 +1198,11 @@ Public Class frmKassenbuch If KASSETmp.rksv_FT_CashboxID IsNot Nothing AndAlso KASSETmp.rksv_FT_CashboxID <> "" AndAlso IsNumeric(KASSETmp.rksv_FT_CashboxID) AndAlso BELEGTmp.FT_ReceiptReference IsNot Nothing Then Dim client_chilkat As New cFiskaltrustClient_chilkat(KASSETmp.rksv_FT_RestServiceURL, KASSETmp.rksv_FT_CashboxID, KASSETmp.rksv_FT_AccessToken, KASSETmp.rksv_FT_Country) - If Not cRKSV.stornoRKSV_FT(KASSETmp, BELEGTmp, QRQString, LastJWS, answer) Then + If Not cRKSV.stornoRKSV_FT(KASSETmp, BELEGTmp, QRQString, LastJWS, answer, TSEIsOnline) Then MessageBox.Show("Fehler bei der RKSV-FT-Stornierung:" & vbNewLine & vbNewLine & answer, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error) Exit Sub + Else + BELEGTmp.rksv_qr = QRQString End If Else @@ -1096,7 +1282,7 @@ Public Class frmKassenbuch If KASSETmp.rksv_FT_CashboxID IsNot Nothing AndAlso KASSETmp.rksv_FT_CashboxID <> "" AndAlso BELEGTmp.FT_ReceiptReference IsNot Nothing Then Dim client_chilkat As New cFiskaltrustClient_chilkat(KASSETmp.rksv_FT_RestServiceURL, KASSETmp.rksv_FT_CashboxID, KASSETmp.rksv_FT_AccessToken, KASSETmp.rksv_FT_Country) - If Not cRKSV.stornoRKSV_FT(KASSETmp, BELEGTmp, QRQString, LastJWS, answer) Then + If Not cRKSV.stornoRKSV_FT(KASSETmp, BELEGTmp, QRQString, LastJWS, answer, TSEIsOnline) Then MessageBox.Show("Fehler bei der RKSV-FT-Stornierung:" & vbNewLine & vbNewLine & answer, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error) Exit Sub End If @@ -1177,16 +1363,17 @@ Public Class frmKassenbuch Dim KASSE As New cRKSV_Kasse(cboKassen._value) 'Laden der Kasse anhand der Auswahlbox - 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(RKSV.rksv_id) - Dim QR_CodeString As String = "" - client.saveRKSV_FT(result, QR_CodeString) + If KASSE.rksv_FT_Country IsNot Nothing AndAlso KASSE.rksv_FT_Country = "DE" Then + + cRKSV.printStatusBelegFiskaltrust(KASSE, PERSONAL, True, KASSE.rksv_firma, ReceiptCaseIntern.NULLBELEG) Else cRKSV.printNULLBeleg(KASSE, PERSONAL, True, KASSE.rksv_firma) - End If + + init() + + ' End If End Sub @@ -1217,7 +1404,7 @@ Public Class frmKassenbuch End If End Sub - + Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click Dim f As New frmKassenbuchPWD(PERSONAL) If f.ShowDialog() = Windows.Forms.DialogResult.OK Then @@ -1391,4 +1578,393 @@ Public Class frmKassenbuch f.Show() End Sub + + Private Sub Button17_Click(sender As Object, e As EventArgs) Handles Button17.Click + + Dim webAddress As String = "https://wiki.verag.ag/e/de/software/aviso/howtos/Barverkauf" + Process.Start(webAddress) + End Sub + + Private Sub Button11_Click_1(sender As Object, e As EventArgs) Handles Button11.Click + + cm_FT.Items.Clear() + + If VERAG_PROG_ALLGEMEIN.cAllgemein.TESTSYSTEM Then + 'nur im Testsystem! + If Not cm_FT.Items.ContainsKey("bar") AndAlso isADMIN 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") AndAlso isADMIN 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 + + End If + + 'If Not cm_FT.Items.ContainsKey("null") AndAlso isADMIN AndAlso Not OutOfOrderIsCreated 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("outoforder") AndAlso isADMIN AndAlso Not OutOfOrderIsCreated Then + Dim plose = New ToolStripMenuItem() With {.Text = "Out Of Order", .Name = "outoforder", .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("initialstart") AndAlso isADMIN AndAlso Not OutOfOrderIsCreated AndAlso Not InitialStartIsCreated Then + Dim plose = New ToolStripMenuItem() With {.Text = "Initial Start", .Name = "initialstart", .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") AndAlso Not monatsabschlussIsSet AndAlso Not OutOfOrderIsCreated 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") AndAlso Not tagesabschlussIsSet AndAlso Not OutOfOrderIsCreated 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") AndAlso Not jahresabschlussIsSet AndAlso Not OutOfOrderIsCreated 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("verbindungstest") Then + Dim ids = New ToolStripMenuItem() With {.Text = "Verbindungstest", .Name = "verbindungstest", .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("version") Then + Dim ids = New ToolStripMenuItem() With {.Text = "Journal - Version", .Name = "version", .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("signatures") AndAlso isADMIN Then + Dim ids = New ToolStripMenuItem() With {.Text = "Journal - Signaturen", .Name = "signatures", .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("action") AndAlso isADMIN Then + Dim ids = New ToolStripMenuItem() With {.Text = "Journal - Action", .Name = "action", .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("queueitem") AndAlso isADMIN Then + Dim ids = New ToolStripMenuItem() With {.Text = "Journal - Queue", .Name = "queueitem", .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("exportJournal") Then + Dim ids = New ToolStripMenuItem() With {.Text = "Journal - EXPORT", .Name = "exportJournal", .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("setMissingSignatures") Then + Dim ids = New ToolStripMenuItem() With {.Text = "fehlende Signaturen nachtragen", .Name = "setMissingSignatures", .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 + + 'PERSONAL.cRKSV_Kasse.LOAD(cboKassen._value) + + Dim client_chilkat As New cFiskaltrustClient_chilkat(PERSONAL.cRKSV_Kasse.rksv_FT_RestServiceURL, PERSONAL.cRKSV_Kasse.rksv_FT_CashboxID, PERSONAL.cRKSV_Kasse.rksv_FT_AccessToken, PERSONAL.cRKSV_Kasse.rksv_FT_Country) + + If item.Name = "setMissingSignatures" Then + + Dim dt As DataTable = SQL.loadDgvBySql("SELECT * FROM [tblEABelegnummer] WHERE [rksv_id]='" & PERSONAL.cRKSV_KasseID & "' AND isnull(FT_MissingSignature,0)=1", "FMZOLL") + + If dt.Rows.Count = 0 Then + MsgBox("Für die Kasse " & PERSONAL.cRKSV_Kasse.rksv_bez & " existieren keine unsignierten Belege!") + Return False + End If + + If vbYes = MsgBox("Möchten die " & dt.Rows.Count & " nicht signierten Belege an die TSE schicken?", vbYesNoCancel) Then + + Dim result As Boolean = False + For Each r As DataRow In dt.Rows + + Dim BELEG = New EABeleg("LOAD", r("Mandant"), r("Niederlassung"), r("Benutzer"), r("BelegNr"), r("BelegDat")) + Dim summeBRUTTO As Double = BELEG.rksv_umsatz + Dim QR_CodeString As String = "" + Dim LastJWS As String = "" + Dim EA As String = "" + Dim kindOfReceiptCase As String = "" + + Select Case BELEG.Beleg_TYP + Case "0" + Continue For 'null Belege nicht senden! + Case "E" 'Eingang/Ausgang + If BELEG.Belegart = "1" Then + EA = "E" + Else + EA = "A" + End If + Case "L" + If BELEG.Belegart = "1" Then + EA = "E" + Else + EA = "A" + End If + + Case Else + If BELEG.Belegart = "1" Then + EA = "E" + Else + EA = "A" + End If + End Select + + kindOfReceiptCase = ReceiptCaseIntern.WIEDERHOLUNG + + result = cRKSV.insertRKSVFiskaltrustAsync(PERSONAL.cRKSV_Kasse, BELEG, BELEG.rksv_BelegId, If(EA = "E", summeBRUTTO, summeBRUTTO * -1), False, QR_CodeString, LastJWS, kindOfReceiptCase, BELEG.FT_ReceiptReference) + + If result Then + BELEG.FT_MissingSignature = False + BELEG.SAVE() + Else + MsgBox("Fehler bei der nachträglichen Signierung von BelegNr: " & BELEG.BelegNr & vbNewLine & "Beleg wurde nicht in der QUEUE gefunden!" & vbNewLine & "Beleg muss erneut an Fiskaltrust gesendet werden!") + BELEG.FT_MissingSignature = False + BELEG.FT_setMissingSignatureFailed = True + BELEG.SAVE() + End If + + Next + + If result Then + init() + End If + + End If + + + + ElseIf item.Name = "tempoutoforder" Then + + + If vbYes = MsgBox("Möchten Sie einen temp. Ausfall an die TSE schicken?" & vbNewLine & "Falls die TSE zwar Online ist, jedoch ein technischer Fehler beim Signieren besteht", vbYesNoCancel) Then + + cRKSV.printStatusBelegFiskaltrust(PERSONAL.cRKSV_Kasse, PERSONAL, True, PERSONAL.cRKSV_Kasse.rksv_firma, ReceiptCaseIntern.TEMP_OUTOFOPERATIONBELEG) + init() + + End If + + + + ElseIf item.Name = "outoforder" Then + + + If vbYes = MsgBox("Möchten Sie einen OutOfOrder an die TSE schicken?" & vbNewLine & "Die Queue wird dauerhaft geschlossen und kann NICHT reaktiviert werden!", vbYesNoCancel) Then + cRKSV.printStatusBelegFiskaltrust(PERSONAL.cRKSV_Kasse, PERSONAL, True, PERSONAL.cRKSV_Kasse.rksv_firma, ReceiptCaseIntern.OUTOFOPERATIONBELEG) + init() + + + End If + + + ElseIf item.Name = "initialstart" Then + + + If vbYes = MsgBox("Möchten Sie einen Start an die TSE schicken?", vbYesNoCancel) Then + + cRKSV.printStatusBelegFiskaltrust(PERSONAL.cRKSV_Kasse, PERSONAL, True, PERSONAL.cRKSV_Kasse.rksv_firma, ReceiptCaseIntern.STARTBELEG) + init() + + End If + + + + ElseIf item.Name = "verbindungstest" Then + + Dim result As String = client_chilkat.Echo(PERSONAL.cRKSV_Kasse.rksv_bez & " " & PERSONAL.cRKSV_Kasse.rksv_FT_Country & " - ") + + If result <> "" Then + + MsgBox(client_chilkat.PrettyPrintJson(result)) + + End If + + + ElseIf item.Name = "storno" Then + If VERAG_PROG_ALLGEMEIN.cAllgemein.TESTSYSTEM AndAlso isADMIN Then + + If vbYes = MsgBox("Möchten Sie wirklich einen Teststorno durchführen?" & vbNewLine & "NIEMALS auf einer produktiven TSE durchführen!", vbYesNoCancel) Then + + Dim result As String = client_chilkat.ChancelReceipt_test("-1", PERSONAL.cRKSV_Kasse.rksv_id, TSEIsOnline) + + If result <> "" Then + + MsgBox(client_chilkat.PrettyPrintJson(result)) + + End If + + End If + + Else + MsgBox("ACHTUNG, im Produktivsystem nicht möglich!") + End If + + + ElseIf item.Name = "bar" Then + + If VERAG_PROG_ALLGEMEIN.cAllgemein.TESTSYSTEM AndAlso isADMIN Then + + If vbYes = MsgBox("Möchten Sie wirklich einen Testzahlung durchführen?" & vbNewLine & "NIEMALS auf einer produktiven TSE durchführen!", vbYesNoCancel) Then + + Dim result As String = client_chilkat.SignReceipt_test(PERSONAL.cRKSV_Kasse.rksv_id, TSEIsOnline) + + If result <> "" Then + + If vbYes = MsgBox(result & vbNewLine & vbNewLine & "Testdaten in DB speichern?", vbYesNoCancel) Then + Dim QR_CodeString As String = "" + client_chilkat.saveRKSV_FT(result, QR_CodeString, Nothing, False) + End If + Else + Return False + End If + + + If result <> "" Then + + MsgBox(client_chilkat.PrettyPrintJson(result)) + + End If + End If + Else + MsgBox("ACHTUNG, im Produktivsystem nicht möglich!") + + End If + + + + ElseIf item.Name = "monthly" Then + + If Not monatsabschlussIsSet Then + If vbYes = MsgBox("Möchten Sie einen Monatsbeleg an die TSE schicken, anschließend kann in diesem Monat kein Beleg mehr signiert werden!", vbYesNoCancel) Then + + Dim result As String = client_chilkat.SignClosingReceipt(item.Name, PERSONAL.cRKSV_Kasse.rksv_id, item.Name) + + If result <> "" Then + + MsgBox(client_chilkat.PrettyPrintJson(result)) + + SQL.doSQL("UPDATE [tblRKSV_FT] set ftEndOfMonthReceipt = getDate() where Month(ftReceiptMoment) = Month(GETDATE()) and ftEndOfMonthReceipt is null and ftCashBoxID = '" & PERSONAL.cRKSV_Kasse.rksv_FT_CashboxID & "' ", "FMZOLL") + + End If + + End If + Else + MsgBox("Für die Kasse " & PERSONAL.cRKSV_Kasse.rksv_bez & " wurde bereits ein Monatsabschluss erstellt!") + End If + + + ElseIf item.Name = "daily" And Not tagesabschlussIsSet Then + 'Nur DE + + If Not tagesabschlussIsSet Then + + If vbYes = MsgBox("Möchten Sie einen Tagesabschluss durchführen, anschließend kann heute kein Beleg mehr signiert werden!", vbYesNoCancel) Then + If PERSONAL.cRKSV_Kasse.rksv_FT_Country = "DE" Then + + cRKSV.printStatusBelegFiskaltrust(PERSONAL.cRKSV_Kasse, PERSONAL, True, PERSONAL.cRKSV_Kasse.rksv_firma, ReceiptCaseIntern.DAILYCLOSING) + + init() + + Else + MsgBox("nicht für AT-Kassen möglich!") + End If + End If + + + MsgBox("Für die Kasse " & PERSONAL.cRKSV_Kasse.rksv_bez & " wurde bereits ein Tagesabschluss erstellt!") + + End If + + ElseIf item.Name = "yearly" Then + + If Not jahresabschlussIsSet Then + + If vbYes = MsgBox("Möchten Sie einen Jahresbeleg an die TSE schicken, anschließend kann in diesem Jahr kein Beleg mehr signiert werden!", vbYesNoCancel) Then + + + Dim result As String = client_chilkat.SignClosingReceipt(item.Name, PERSONAL.cRKSV_Kasse.rksv_id, item.Name) + If result <> "" Then + + MsgBox(client_chilkat.PrettyPrintJson(result)) + + SQL.doSQL("UPDATE [tblRKSV_FT] set ftEndOfYearReceipt = getDate() where Year(ftReceiptMoment) = Year(GETDATE()) and ftEndOfYearReceipt is null and ftCashBoxID = '" & PERSONAL.cRKSV_Kasse.rksv_FT_CashboxID & "' ", "FMZOLL") + + End If + + End If + Else + MsgBox("Für die Kasse " & PERSONAL.cRKSV_Kasse.rksv_bez & " wurde bereits ein Jahresabschluss erstellt!") + + End If + + + + ElseIf (item.Name = "version" Or item.Name = "action" Or item.Name = "signatures" Or item.Name = "queueitem" Or item.Name = "exportJournal") Then + + Dim result As String = "" + Select Case item.Name + Case "version" : result = client_chilkat.Journal(FtJournalType.VersionInformation) + Case "action" : result = client_chilkat.Journal(FtJournalType.ActionJournal) + Case "signatures" : result = client_chilkat.Journal(FtJournalType.ReceiptJournal) + Case "queueitem" : result = client_chilkat.Journal(FtJournalType.QueueItemJournal) + Case "exportJournal" : result = client_chilkat.Journal(FtJournalType.ReceiptJournal) + End Select + + If result <> "" Then + + MsgBox(client_chilkat.PrettyPrintJson(result)) + + If item.Name = "exportJournal" Then + client_chilkat.exportJournal(result) + End If + + End If + + + + End If + + + End If + + + + End Function + + End Class \ No newline at end of file diff --git a/SDL/kassenbuch/frmNacherfassungLeihgeld.vb b/SDL/kassenbuch/frmNacherfassungLeihgeld.vb index 1f5c2d35..5db23dd8 100644 --- a/SDL/kassenbuch/frmNacherfassungLeihgeld.vb +++ b/SDL/kassenbuch/frmNacherfassungLeihgeld.vb @@ -1,5 +1,6 @@  Imports GrapeCity.ActiveReports +Imports java.security.acl Imports VERAG_PROG_ALLGEMEIN Public Class frmNacherfassungLeihgeld @@ -362,133 +363,159 @@ Public Class frmNacherfassungLeihgeld ' QR_Image = Nothing Dim QR_CodeString As String = "" Dim LastJWS As String = "" + Dim isFiskaltrust As Boolean = False + If KASSE IsNot Nothing AndAlso KASSE.rksv_FT_RestServiceURL IsNot Nothing AndAlso KASSE.rksv_FT_CashboxID IsNot Nothing AndAlso KASSE.rksv_FT_AccessToken IsNot Nothing AndAlso KASSE.rksv_FT_Country IsNot Nothing Then + Dim client_chilkat As New cFiskaltrustClient_chilkat(KASSE.rksv_FT_RestServiceURL, KASSE.rksv_FT_CashboxID, KASSE.rksv_FT_AccessToken, KASSE.rksv_FT_Country) + isFiskaltrust = client_chilkat.isFiskaltrust() + End If + If KASSE.rksv_aktiv Then ' WENN für die Kasse die RKSV gilt - Dim answer = "" - If Not cRKSV.insertRKSV(KASSE, KASSE.rksv_CompanyGUID, KASSE.rksv_Umsatzzaehler, BELEG.BelegDat, BELEG.Steuerschlüssel, RKSV_Beleg_Id, summeBRUTTO, QR_CodeString, LastJWS, TESTBUCHUNG, answer) Then 'Digitale Signierung und Erfassung in die RKSV-Datenbank mittels ITG-Service - If Not TESTBUCHUNG Then - KASSE.DECREASE_BELEG_UMSATZ(oldBelegZaehler, summeBRUTTO * -1) - cRKSV.DELETE(BELEG, KASSE.rksv_firma) - End If - MsgBox("Programmfehler bei der digitalen Signatur." & vbNewLine & vbNewLine & answer, MsgBoxStyle.Critical) - ' Me.Cursor = Cursors.Default - 'BELEG = cRKSV.STORNO(BELEG, "Programmfehler") - ' MsgBox("Programmfehler bei der digitalen Signatur.") - Me.Cursor = Cursors.Default : Me.Close() : Exit Sub - End If - KASSE.SET_LAST_QR_JWS(LastJWS, QR_CodeString) - End If + Dim answer = "" - - If KASSE.rksvDE_aktiv Then ' WENN für die Kasse die RKSV gilt - Dim answer = "" - If Not cRKSV_DE.insertRKSV_DE(PERSONAL, BELEG, KASSE, RKSV_Beleg_Id, summeBRUTTO, QR_CodeString, LastJWS, TESTBUCHUNG, answer) Then 'Digitale Signierung und Erfassung in die RKSV-Datenbank mittels ITG-Service - If Not TESTBUCHUNG Then - KASSE.DECREASE_BELEG_UMSATZ(oldBelegZaehler, summeBRUTTO * -1) - cRKSV.DELETE(BELEG, KASSE.rksv_firma) - End If - MsgBox("Programmfehler bei der digitalen Signatur." & vbNewLine & vbNewLine & answer, MsgBoxStyle.Critical) - ' Me.Cursor = Cursors.Default - 'BELEG = cRKSV.STORNO(BELEG, "Programmfehler") - ' MsgBox("Programmfehler bei der digitalen Signatur.") - Me.Cursor = Cursors.Default : Me.Close() : Exit Sub - End If - KASSE.SET_LAST_QR_JWS(LastJWS, QR_CodeString) - 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX - If KASSE.rksv_KassaGuid = "KASSE_01" Then - BELEG.rksv_jws = Nothing - BELEG.rksv_qr = Nothing - End If - 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX - - End If - 'RKSV-Daten beim Beleg ergänzen: - BELEG.rksv_jws = LastJWS - BELEG.rksv_qr = QR_CodeString - BELEG.rksv_BelegId = RKSV_Beleg_Id - BELEG.rksv_id = KASSE.rksv_id - BELEG.rksv_umsatz = summeBRUTTO - BELEG.rksv_aktiv = (KASSE.rksv_aktiv Or KASSE.rksvDE_aktiv) - BELEG.SAVE() - - 'Zuerst, damit Provisionsbetrag auf Aktendeckel gedruckt wird... - Dim barbetrag As Double = 0 - Dim BelegNrProvision = 0 - If cbxProvision.Checked Then - printProvision(barbetrag, BelegNrProvision, cbxProvinMAKassa.Checked) - End If - - - 'printBeleg(BELEG, KASSE, PERSONAL, cboPrinter.SelectedItem.ToString) 'Beleg drucken - cRKSV.printKundenBelegLG(BELEG, KASSE, PERSONAL, cboPrinter.SelectedItem.ToString, "LG") 'Beleg drucken - - If cboPrintAktendeckel.Checked Then printLGAktendeckel("PRINT", barbetrag, BelegNrProvision) - - - 'nur bei VERAG die fragen - If VERAG_PROG_ALLGEMEIN.cAllgemein.FIRMA = "IMEX" OrElse VERAG_PROG_ALLGEMEIN.cAllgemein.FIRMA = "ATILLA" OrElse vbYes = MsgBox("Daten ins Speditionsbuch eintragen?", vbYesNoCancel) Then - Dim abbruch As Boolean = False - If cRKSV.SpedBuchExists(BELEG) Then - If vbYes = MsgBox("Speditionsbuch Eintrag existiert bereits - Daten überschreiben?", vbYesNoCancel) Then - abbruch = True - End If - End If - - If Not abbruch Then - cRKSV.insertToSpedBuch(PERSONAL, PERSONAL_LG, BELEG, AvisoID, , barbetrag, BelegNrProvision) - Dim spedBuchExisting As Boolean = cRKSV.SpedBuchExists(BELEG) - If Not spedBuchExisting Then - MsgBox("Speditionsbuch-Eintrag fehlgeschlagen!!") + Dim verarbeitet As Boolean = False + If isFiskaltrust Then + Dim result = cRKSV.insertRKSVFiskaltrustAsync(KASSE, BELEG, RKSV_Beleg_Id, summeBRUTTO, TESTBUCHUNG, QR_CodeString, LastJWS, ReceiptCaseIntern.VERKAUF) + 'result.Wait() + verarbeitet = result Else - If VERAG_PROG_ALLGEMEIN.cAllgemein.FIRMA = "VERAG" Then 'nur bei VERAG - - If vbYes = MsgBox("Speditionsbuch anzeigen?", vbYesNoCancel) Then - Dim frmNacherfassung As New frmNacherfassungNEU() - frmNacherfassung.srchFiliale = BELEG.FilialenNr - frmNacherfassung.srchAbfertigungsnummer = BELEG.AbfertigungsNr - frmNacherfassung.srchUnterNr = 0 - frmNacherfassung.ShowDialog(Me) - End If - End If + verarbeitet = cRKSV.insertRKSV(KASSE, KASSE.rksv_CompanyGUID, KASSE.rksv_Umsatzzaehler, BELEG.BelegDat, BELEG.Steuerschlüssel, RKSV_Beleg_Id, summeBRUTTO, QR_CodeString, LastJWS, TESTBUCHUNG, answer) 'Digitale Signierung und Erfassung in die RKSV-Datenbank mittels ITG-Service End If + If Not verarbeitet Then 'Digitale Signierung und Erfassung in die RKSV-Datenbank mittels ITG-Service + If Not isFiskaltrust Then - - If VERAG_PROG_ALLGEMEIN.cAllgemein.FIRMA = "ATILLA" AndAlso spedBuchExisting Then - Dim verarbOK As Boolean = True - Dim SPEDBUCH As New VERAG_PROG_ALLGEMEIN.cSpeditionsbuch(BELEG.FilialenNr, BELEG.AbfertigungsNr) - SPEDBUCH.BelegNr = BelegNrFIBU - Dim RK_ID As Integer = -1 - - If Not gen_RECHNUNG_BySPEDBUCH(BELEG.KundenNr, SPEDBUCH, RK_ID, cbxOP_sofort_buchen.Checked, summeBRUTTO, summeNETTO, BELEG) Then verarbOK = False - If RK_ID > 0 Then - Dim RECHNUNG As New cRechnungsausgang(RK_ID) - RECHNUNG.KdAuftragsNr = BelegNrFIBU - If Not cFakturierung.doRechnungsDruck(RECHNUNG, Today(),, 4) Then verarbOK = False - If RECHNUNG.[DruckDatumZeit] IsNot Nothing Then - RECHNUNG.[DruckDatumZeit] = Nothing - RECHNUNG.SAVE_DruckDatumZeit() + If Not TESTBUCHUNG Then + KASSE.DECREASE_BELEG_UMSATZ(oldBelegZaehler, summeBRUTTO * -1) + cRKSV.DELETE(BELEG, KASSE.rksv_firma) End If - End If + MsgBox("Programmfehler bei der digitalen Signatur." & vbNewLine & vbNewLine & answer, MsgBoxStyle.Critical) + ' Me.Cursor = Cursors.Default + 'BELEG = cRKSV.STORNO(BELEG, "Programmfehler") + ' MsgBox("Programmfehler bei der digitalen Signatur.") + Me.Cursor = Cursors.Default : Me.Close() : Exit Sub - If verarbOK Then - 'MsgBox("Rechnung erstellt!") Else - MsgBox("Fehler bei Rechnungserstellung!") + BELEG.FT_MissingSignature = True End If + End If + If Not isFiskaltrust Then KASSE.SET_LAST_QR_JWS(LastJWS, QR_CodeString) + End If + + + If KASSE.rksvDE_aktiv Then ' WENN für die Kasse die RKSV gilt + Dim answer = "" + If Not cRKSV_DE.insertRKSV_DE(PERSONAL, BELEG, KASSE, RKSV_Beleg_Id, summeBRUTTO, QR_CodeString, LastJWS, TESTBUCHUNG, answer) Then 'Digitale Signierung und Erfassung in die RKSV-Datenbank mittels ITG-Service + If Not TESTBUCHUNG Then + KASSE.DECREASE_BELEG_UMSATZ(oldBelegZaehler, summeBRUTTO * -1) + cRKSV.DELETE(BELEG, KASSE.rksv_firma) + End If + MsgBox("Programmfehler bei der digitalen Signatur." & vbNewLine & vbNewLine & answer, MsgBoxStyle.Critical) + ' Me.Cursor = Cursors.Default + 'BELEG = cRKSV.STORNO(BELEG, "Programmfehler") + ' MsgBox("Programmfehler bei der digitalen Signatur.") + Me.Cursor = Cursors.Default : Me.Close() : Exit Sub + End If + If Not isFiskaltrust Then KASSE.SET_LAST_QR_JWS(LastJWS, QR_CodeString) + 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX + If KASSE.rksv_KassaGuid = "KASSE_01" Then + BELEG.rksv_jws = Nothing + BELEG.rksv_qr = Nothing + End If + 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX + End If + 'RKSV-Daten beim Beleg ergänzen: + BELEG.rksv_jws = LastJWS + BELEG.rksv_qr = QR_CodeString + BELEG.rksv_BelegId = RKSV_Beleg_Id + BELEG.rksv_id = KASSE.rksv_id + BELEG.rksv_umsatz = summeBRUTTO + BELEG.rksv_aktiv = (KASSE.rksv_aktiv Or KASSE.rksvDE_aktiv) + BELEG.SAVE() + + 'Zuerst, damit Provisionsbetrag auf Aktendeckel gedruckt wird... + Dim barbetrag As Double = 0 + Dim BelegNrProvision = 0 + If cbxProvision.Checked Then + printProvision(barbetrag, BelegNrProvision, cbxProvinMAKassa.Checked) + End If + + + 'printBeleg(BELEG, KASSE, PERSONAL, cboPrinter.SelectedItem.ToString) 'Beleg drucken + cRKSV.printKundenBelegLG(BELEG, KASSE, PERSONAL, cboPrinter.SelectedItem.ToString, "LG") 'Beleg drucken + + If cboPrintAktendeckel.Checked Then printLGAktendeckel("PRINT", barbetrag, BelegNrProvision) + + + 'nur bei VERAG die fragen + If VERAG_PROG_ALLGEMEIN.cAllgemein.FIRMA = "IMEX" OrElse VERAG_PROG_ALLGEMEIN.cAllgemein.FIRMA = "ATILLA" OrElse vbYes = MsgBox("Daten ins Speditionsbuch eintragen?", vbYesNoCancel) Then + Dim abbruch As Boolean = False + If cRKSV.SpedBuchExists(BELEG) Then + If vbYes = MsgBox("Speditionsbuch Eintrag existiert bereits - Daten überschreiben?", vbYesNoCancel) Then + abbruch = True + End If + End If + + If Not abbruch Then + cRKSV.insertToSpedBuch(PERSONAL, PERSONAL_LG, BELEG, AvisoID, , barbetrag, BelegNrProvision) + Dim spedBuchExisting As Boolean = cRKSV.SpedBuchExists(BELEG) + If Not spedBuchExisting Then + MsgBox("Speditionsbuch-Eintrag fehlgeschlagen!!") + Else + If VERAG_PROG_ALLGEMEIN.cAllgemein.FIRMA = "VERAG" Then 'nur bei VERAG + + If vbYes = MsgBox("Speditionsbuch anzeigen?", vbYesNoCancel) Then + Dim frmNacherfassung As New frmNacherfassungNEU() + frmNacherfassung.srchFiliale = BELEG.FilialenNr + frmNacherfassung.srchAbfertigungsnummer = BELEG.AbfertigungsNr + frmNacherfassung.srchUnterNr = 0 + frmNacherfassung.ShowDialog(Me) + End If + End If + End If + + + + + If VERAG_PROG_ALLGEMEIN.cAllgemein.FIRMA = "ATILLA" AndAlso spedBuchExisting Then + Dim verarbOK As Boolean = True + Dim SPEDBUCH As New VERAG_PROG_ALLGEMEIN.cSpeditionsbuch(BELEG.FilialenNr, BELEG.AbfertigungsNr) + SPEDBUCH.BelegNr = BelegNrFIBU + Dim RK_ID As Integer = -1 + + If Not gen_RECHNUNG_BySPEDBUCH(BELEG.KundenNr, SPEDBUCH, RK_ID, cbxOP_sofort_buchen.Checked, summeBRUTTO, summeNETTO, BELEG) Then verarbOK = False + If RK_ID > 0 Then + Dim RECHNUNG As New cRechnungsausgang(RK_ID) + RECHNUNG.KdAuftragsNr = BelegNrFIBU + If Not cFakturierung.doRechnungsDruck(RECHNUNG, Today(),, 4) Then verarbOK = False + If RECHNUNG.[DruckDatumZeit] IsNot Nothing Then + RECHNUNG.[DruckDatumZeit] = Nothing + RECHNUNG.SAVE_DruckDatumZeit() + End If + End If + + If verarbOK Then + 'MsgBox("Rechnung erstellt!") + Else + MsgBox("Fehler bei Rechnungserstellung!") + + End If + End If + + End If + End If + + + Me.Close() + Me.DialogResult = Windows.Forms.DialogResult.OK + Me.Cursor = Cursors.Default End If - - Me.Close() - Me.DialogResult = Windows.Forms.DialogResult.OK - Me.Cursor = Cursors.Default - End If - Catch ex As Exception Me.Cursor = Cursors.Default MsgBox("Allgemeiner Programmfehler - Belegerfassung wird geschlossen!" & If(BELEG.rksv_BelegId > 0, "ACHTUNG: BELEG BEREITS SIGNIERT!!!", "") & vbNewLine & vbNewLine & ex.Message & ex.StackTrace) diff --git a/SDL/kunden/Newsletter/frmNewsletter.Designer.vb b/SDL/kunden/Newsletter/frmNewsletter.Designer.vb index 2a94f416..bb53f2a2 100644 --- a/SDL/kunden/Newsletter/frmNewsletter.Designer.vb +++ b/SDL/kunden/Newsletter/frmNewsletter.Designer.vb @@ -53,6 +53,7 @@ Partial Class frmNewsletter Me.EmpfängerName = New System.Windows.Forms.DataGridViewTextBoxColumn() Me.ListBox1 = New System.Windows.Forms.ListBox() Me.Label8 = New System.Windows.Forms.Label() + Me.Button8 = New System.Windows.Forms.Button() CType(Me.MyDatagridview1, System.ComponentModel.ISupportInitialize).BeginInit() Me.SuspendLayout() ' @@ -290,6 +291,7 @@ Partial Class frmNewsletter Me.MyDatagridview1.Columns.AddRange(New System.Windows.Forms.DataGridViewColumn() {Me.Email, Me.EmailCC, Me.EmailBCC, Me.EmpfängerTitel, Me.EmpfängerName}) Me.MyDatagridview1.Location = New System.Drawing.Point(892, 119) Me.MyDatagridview1.Name = "MyDatagridview1" + Me.MyDatagridview1.SelectionMode = System.Windows.Forms.DataGridViewSelectionMode.FullRowSelect Me.MyDatagridview1.Size = New System.Drawing.Size(537, 498) Me.MyDatagridview1.TabIndex = 0 ' @@ -338,6 +340,15 @@ Partial Class frmNewsletter Me.Label8.TabIndex = 24 Me.Label8.Text = "Anhänge:" ' + 'Button8 + ' + Me.Button8.Location = New System.Drawing.Point(1230, 90) + Me.Button8.Name = "Button8" + Me.Button8.Size = New System.Drawing.Size(105, 23) + Me.Button8.TabIndex = 25 + Me.Button8.Text = "aus Clipboard imp." + Me.Button8.UseVisualStyleBackColor = True + ' 'frmNewsletter ' Me.AllowDrop = True @@ -345,6 +356,7 @@ Partial Class frmNewsletter Me.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font Me.BackColor = System.Drawing.Color.White Me.ClientSize = New System.Drawing.Size(1441, 720) + Me.Controls.Add(Me.Button8) Me.Controls.Add(Me.Label8) Me.Controls.Add(Me.ListBox1) Me.Controls.Add(Me.MyTextBox2) @@ -408,4 +420,5 @@ Partial Class frmNewsletter Friend WithEvents EmpfängerName As DataGridViewTextBoxColumn Friend WithEvents ListBox1 As ListBox Friend WithEvents Label8 As Label + Friend WithEvents Button8 As Button End Class diff --git a/SDL/kunden/Newsletter/frmNewsletter.vb b/SDL/kunden/Newsletter/frmNewsletter.vb index b951c360..364e11e8 100644 --- a/SDL/kunden/Newsletter/frmNewsletter.vb +++ b/SDL/kunden/Newsletter/frmNewsletter.vb @@ -14,12 +14,12 @@ Public Class frmNewsletter Try ProgressBar1.Minimum = 0 - ProgressBar1.Maximum = MyDatagridview1.SelectedRows.Count + ProgressBar1.Maximum = MyDataGridView1.SelectedRows.Count ProgressBar1.Value = 0 ProgressBar1.Visible = True ProgressBar1.Style = ProgressBarStyle.Continuous - If MyDatagridview1.SelectedRows.Count = 0 Then + If MyDataGridView1.SelectedRows.Count = 0 Then MsgBox("Bitte mindestens einen Eintrag auswählen.") Exit Sub End If @@ -29,10 +29,10 @@ Public Class frmNewsletter Dim Absender = getAbsender() Dim Subject = getSubject() - If MsgBox("Wirklich " & MyDatagridview1.SelectedRows.Count & " Mails senden?", vbYesNoCancel) = vbYes Then + If MsgBox("Wirklich " & MyDataGridView1.SelectedRows.Count & " Mails senden?", vbYesNoCancel) = vbYes Then VERAG_PROG_ALLGEMEIN.cProgramFunctions.sendMail(Absender, Subject, mailText, Absender,, False, "", "", ANHAENGE) - For Each row As DataGridViewRow In MyDatagridview1.SelectedRows + For Each row As DataGridViewRow In MyDataGridView1.SelectedRows Dim mail As String = getValidEmail(If(row.Cells("Email").Value, "").ToString()) Dim mailCC As String = getValidEmail(If(row.Cells("EmailCC").Value, "").ToString()) Dim mailBCC As String = getValidEmail(If(row.Cells("EmailBCC").Value, "").ToString()) @@ -305,18 +305,343 @@ Public Class frmNewsletter End Sub Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click - MyDatagridview1.Rows.Clear() + MyDataGridView1.Rows.Clear() End Sub Private Sub Button4_Click(sender As Object, e As EventArgs) Handles Button4.Click - MyDatagridview1.SelectAll() + MyDataGridView1.SelectAll() End Sub Private Sub Button5_Click(sender As Object, e As EventArgs) Handles Button5.Click - MyDatagridview1.ClearSelection() + MyDataGridView1.ClearSelection() + End Sub + + Private Sub MyDatagridview1_KeyDown(sender As Object, e As KeyEventArgs) Handles MyDataGridView1.KeyDown + If e.Control AndAlso e.KeyCode = Keys.C Then + CopyEntireDGV() + e.SuppressKeyPress = True + + ElseIf e.Control AndAlso e.KeyCode = Keys.V Then + PasteIntoDGV() + e.SuppressKeyPress = True + End If + End Sub + Private Sub CopyEntireDGV() + + Dim sb As New Text.StringBuilder() + + 'Headers + For col As Integer = 0 To MyDataGridView1.ColumnCount - 1 + If col > 0 Then sb.Append(vbTab) + + sb.Append(MyDataGridView1.Columns(col).HeaderText) + Next + + sb.AppendLine() + + 'All rows + For row As Integer = 0 To MyDataGridView1.Rows.Count - 1 + + 'Skip the "new row" at the bottom + If MyDataGridView1.Rows(row).IsNewRow Then Continue For + + For col As Integer = 0 To MyDataGridView1.ColumnCount - 1 + + If col > 0 Then sb.Append(vbTab) + + Dim value = MyDataGridView1.Rows(row).Cells(col).Value + + If value IsNot Nothing Then + sb.Append(value.ToString()) + End If + + Next + + sb.AppendLine() + Next + + Clipboard.SetText(sb.ToString()) + + End Sub + + + Private Sub PasteIntoDGV() + If Not Clipboard.ContainsText() Then Return + + Dim text As String = Clipboard.GetText() + + If String.IsNullOrWhiteSpace(text) Then Return + + Dim lines() As String = + text.Split({vbCrLf, vbLf}, StringSplitOptions.RemoveEmptyEntries) + + '========================================================== + ' IMMER bei Zeile 0 beginnen + '========================================================== + + Dim targetRow As Integer = 0 + Dim startCol As Integer = 0 + + + '========================================================== + ' Prüfen auf Pipe-/Markdown-Tabelle + '========================================================== + + Dim isPipeTable As Boolean = False + + If lines.Length >= 2 Then + + If lines(0).Trim().StartsWith("|") Then + isPipeTable = True + End If + + End If + + + '========================================================== + ' PIPE-TABELLE + '========================================================== + + If isPipeTable Then + + For i As Integer = 0 To lines.Length - 1 + + Dim line As String = lines(i).Trim() + + If String.IsNullOrWhiteSpace(line) Then + Continue For + End If + + + '-------------------------------------------------- + ' Header überspringen + '-------------------------------------------------- + + If i = 0 Then + Continue For + End If + + + '-------------------------------------------------- + ' Trennzeile überspringen + '-------------------------------------------------- + + If IsMarkdownSeparator(line) Then + Continue For + End If + + + '-------------------------------------------------- + ' | entfernen + '-------------------------------------------------- + + If line.StartsWith("|") Then + line = line.Substring(1) + End If + + If line.EndsWith("|") Then + line = line.Substring(0, line.Length - 1) + End If + + + '-------------------------------------------------- + ' Spalten zerlegen + '-------------------------------------------------- + + Dim values() As String = + line.Split("|"c) + + + '-------------------------------------------------- + ' Sicherstellen, dass eine beschreibbare Zeile + ' vorhanden ist + '-------------------------------------------------- + + Dim row As DataGridViewRow = + GetWritableRow(targetRow) + + If row Is Nothing Then + Exit For + End If + + + '-------------------------------------------------- + ' Werte schreiben + '-------------------------------------------------- + + For col As Integer = 0 To values.Length - 1 + + Dim targetCol As Integer = + startCol + col + + If targetCol >= MyDataGridView1.ColumnCount Then + Exit For + End If + + + Dim value As String = + values(col).Trim() + + ' \@ aus deinem Clipboard entfernen + value = value.Replace("\@", "@") + + + row.Cells(targetCol).Value = value + + Next + + + targetRow += 1 + + Next + + Return + + End If + + + '========================================================== + ' NORMALES EXCEL / TAB-SEPARATED + '========================================================== + + For Each line As String In lines + + If String.IsNullOrEmpty(line) Then + Continue For + End If + + + Dim values() As String = + line.Split(ControlChars.Tab) + + + Dim row As DataGridViewRow = + GetWritableRow(targetRow) + + If row Is Nothing Then + Exit For + End If + + + For col As Integer = 0 To values.Length - 1 + + Dim targetCol As Integer = + startCol + col + + If targetCol >= MyDataGridView1.ColumnCount Then + Exit For + End If + + + row.Cells(targetCol).Value = + values(col) + + Next + + + targetRow += 1 + + Next + + + End Sub + + Private Function GetWritableRow(rowIndex As Integer) _ + As DataGridViewRow + + '---------------------------------------------------------- + ' Gibt es die Zeile bereits? + '---------------------------------------------------------- + + If rowIndex < MyDataGridView1.Rows.Count Then + + Dim row As DataGridViewRow = + MyDataGridView1.Rows(rowIndex) + + 'Normale Zeile + If Not row.IsNewRow Then + Return row + End If + + End If + + + '---------------------------------------------------------- + ' Neue Zeile hinzufügen + '---------------------------------------------------------- + + If MyDataGridView1.AllowUserToAddRows Then + + Dim newIndex As Integer = + MyDatagridview1.Rows.Add() + + Return MyDatagridview1.Rows(newIndex) + + End If + + + Return Nothing + +End Function + + + + Private Function IsMarkdownSeparator(line As String) As Boolean + + Dim value As String = line.Trim() + + If value.StartsWith("|") Then + value = value.Substring(1) + End If + + If value.EndsWith("|") Then + value = value.Substring(0, value.Length - 1) + End If + + + Dim columns() As String = + value.Split("|"c) + + + For Each column As String In columns + + Dim cell As String = + column.Trim() + + If cell = "" Then + Continue For + End If + + + cell = cell.Replace(":", "").Trim() + + + If cell.Length = 0 Then + Continue For + End If + + + For Each ch As Char In cell + + If ch <> "-" Then + Return False + End If + + Next + + Next + + + Return True + +End Function + + Private Sub Button8_Click(sender As Object, e As EventArgs) Handles Button8.Click + PasteIntoDGV() + End Sub End Class diff --git a/SDL/kunden/frmKundenblatt.vb b/SDL/kunden/frmKundenblatt.vb index 6fefa980..ae95d5ca 100644 --- a/SDL/kunden/frmKundenblatt.vb +++ b/SDL/kunden/frmKundenblatt.vb @@ -469,23 +469,28 @@ Public Class frmKundenblatt End Sub Private Sub initFIBU() + + txtZinsbelastungTolInTagen.Enabled = False + txtZinsbelastungNew.Enabled = False + + If kdNr > 0 Then + rtbGespreachsbericht.Text = checkNullStr(KUNDE.Gesprächsbericht) + txtFIBUKuerzel.Text = checkNullStr(KUNDE_ERW.kde_BezFIBU) + txtZinsbelastungNew.Text = checkNullStr(KUNDE_ERW.kde_zinssatz) + txtZinsbelastungTolInTagen.Text = checkNullStr(KUNDE_ERW.kde_abwToleranzTage) + + initZNB() + + End If + If VERAG_PROG_ALLGEMEIN.cBerechtignunen.CHECK_BERECHTIGUNG("BH_Hauptmenü", Me) = 0 Then - If kdNr > 0 Then - rtbGespreachsbericht.Text = checkNullStr(KUNDE.Gesprächsbericht) - txtFIBUKuerzel.Text = checkNullStr(KUNDE_ERW.kde_BezFIBU) - txtZinsbelastungNew.Text = checkNullStr(KUNDE_ERW.kde_zinssatz) - txtZinsbelastungTolInTagen.Text = checkNullStr(KUNDE_ERW.kde_abwToleranzTage) + txtZinsbelastungTolInTagen.Enabled = True + txtZinsbelastungNew.Enabled = True - initZNB() - - End If - - Else - - setInfo("info", "Sie sind für den Bereich FIBU nicht freigeschaltet.", 3) - tbcntrMain.SelectedIndex = 0 End If + + End Sub Sub initTABLKW(Optional kz As String = "") diff --git a/SDL/kunden/frmKundenlogin.vb b/SDL/kunden/frmKundenlogin.vb index c1c54eb7..dab39640 100644 --- a/SDL/kunden/frmKundenlogin.vb +++ b/SDL/kunden/frmKundenlogin.vb @@ -115,9 +115,10 @@ Select Case txtPortal.Text Case "Q8-TRUCK" : link.AccessibleDescription = "https://iaccount.q8.com/" : link.Text = cboLieferant.Text & "-Link" - Case "UTA PORTAL" : link.AccessibleDescription = "https://meinedenred.at/login" : link.Text = cboLieferant.Text & "-Link" + 'Case "UTA PORTAL" : link.AccessibleDescription = "https://meinedenred.at/login" : link.Text = cboLieferant.Text & "-Link" Case "PLOSE APR" : link.AccessibleDescription = "https://www.apr.plose.it/login" : link.Text = cboLieferant.Text & "-Link" Case "MSTSTTOLLS" : link.AccessibleDescription = "https://iaccount.q8.com/" : link.Text = cboLieferant.Text & "-Link" + Case "UTA PORTAL" : link.AccessibleDescription = "https://sso.eu.edenred.io/web/session/step/password?returnUrl=%2Fconnect%2Fauthorize%2Fcallback%3Fscope%3Dopenid%2520uta-service-center-api%26acr_values%3Dtenant%253Auta-service-center%26state%3Dauthoauth2%257C_29893002dacb85543f3e1a66a7f91556dc1792c392%253Ahttps%253A%252F%252Fssoprod.uta.com%252Fsimplesamlphp%252Fsaml2%252Fidp%252FSSOService.php%253Fspentityid%253Dhttps%25253A%25252F%25252Fwww.uta.com%25252Fsamlsps%25252Fedenredproxy%2526cookieTime%253D1788790826%26response_type%3Dcode%26approval_prompt%3Dauto%26redirect_uri%3Dhttps%253A%252F%252Fssoprod.uta.com%252Fsimplesamlphp%252Fmodule.php%252Fauthoauth2%252Flinkback.php%26client_id%3De8d6c5eab5c64fc38f7f0764c0114083" : link.Text = cboLieferant.Text & "-Link" Case "HUB4TRUCKS" : link.AccessibleDescription = "https://truck.telepass.com/api/uaa/login" : link.Text = cboLieferant.Text & "-Link" Case Else : link.AccessibleDescription = "" : link.Text = cboLieferant.Text & "" diff --git a/SDL/kunden/usrcntlFiskaluebersicht.vb b/SDL/kunden/usrcntlFiskaluebersicht.vb index e46eaa9f..98bfa2b6 100644 --- a/SDL/kunden/usrcntlFiskaluebersicht.vb +++ b/SDL/kunden/usrcntlFiskaluebersicht.vb @@ -2,6 +2,7 @@ Imports System.Text.RegularExpressions Imports VERAG_PROG_ALLGEMEIN + Public Class usrcntlFiskaluebersicht Public kdNr As Integer = -1 @@ -362,8 +363,33 @@ Public Class usrcntlFiskaluebersicht If BA IsNot Nothing Then If BA.ba_datenarchivId > 0 Then files.Add(VERAG_PROG_ALLGEMEIN.cDATENSERVER.GET_PDFPath_BY_DocID(BA.ba_datenarchivId)) End If + + For Each r As DataGridViewRow In dgvUnterlagen.Rows - files.Add(VERAG_PROG_ALLGEMEIN.cDATENSERVER.GET_PDFPath_BY_DocID(r.Cells("fka_docId").Value)) + + Dim Path = VERAG_PROG_ALLGEMEIN.cDATENSERVER.GET_PDFPath_BY_DocID(r.Cells("fka_docId").Value) + + Dim extension As String = System.IO.Path.GetExtension(Path).ToLowerInvariant() + + Select Case extension + + Case ".pdf" + + files.Add(Path) + + Case ".png", ".jpg", ".jpeg", ".bmp", ".gif", ".tif", ".tiff" + + Dim PathTemp As String = VERAG_PROG_ALLGEMEIN.cFormularManager.convertPictureToPDF(Path) + + If Not String.IsNullOrEmpty(PathTemp) Then + files.Add(PathTemp) + End If + + End Select + + + + Next VERAG_PROG_ALLGEMEIN.cFormularManager.mergePDFs(files, outputFile) @@ -1065,7 +1091,7 @@ Public Class usrcntlFiskaluebersicht Dim DS As New VERAG_PROG_ALLGEMEIN.cDATENSERVER("DOKUMENTE", "FISKALKUNDENANHAENGE", fk.FK_Datum, "", "", ArtId, kdNr) - If DS.uploadDataToDATENSERVERFileDialog(, ".pdf", , "PDF") Then + If DS.uploadDataToDATENSERVERFileDialog() <> "" Then Dim ANH = New VERAG_PROG_ALLGEMEIN.cFiskalkundenAnhaenge() ANH.fka_Art = ArtId diff --git a/SDL/kunden/usrcntlKundeBearbeitenFull.Designer.vb b/SDL/kunden/usrcntlKundeBearbeitenFull.Designer.vb index 12faa4a8..3b6e3ea6 100644 --- a/SDL/kunden/usrcntlKundeBearbeitenFull.Designer.vb +++ b/SDL/kunden/usrcntlKundeBearbeitenFull.Designer.vb @@ -22,7 +22,6 @@ Partial Class usrcntlKundeBearbeitenFull '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() Dim DataGridViewCellStyle3 As System.Windows.Forms.DataGridViewCellStyle = New System.Windows.Forms.DataGridViewCellStyle() @@ -115,7 +114,7 @@ Partial Class usrcntlKundeBearbeitenFull Me.btnAddKundeUID = New System.Windows.Forms.Button() Me.cboUSt_UstIdNrLand2 = New VERAG_PROG_ALLGEMEIN.MyComboBox() Me.txtUSt_UstIdNr2 = New VERAG_PROG_ALLGEMEIN.MyTextBox() - Me.dgvKundenUID = New VERAG_PROG_ALLGEMEIN.MyDatagridview(Me.components) + Me.dgvKundenUID = New VERAG_PROG_ALLGEMEIN.MyDatagridview() Me.Label117 = New System.Windows.Forms.Label() Me.Panel2 = New System.Windows.Forms.Panel() Me.Label115 = New System.Windows.Forms.Label() @@ -291,6 +290,7 @@ Partial Class usrcntlKundeBearbeitenFull Me.txtUSt_GVAusgestelltAm = New VERAG_PROG_ALLGEMEIN.MyTextBox() Me.txtUSt_GVAngefordertAm = New VERAG_PROG_ALLGEMEIN.MyTextBox() Me.tbSonstiges = New System.Windows.Forms.TabPage() + Me.cbxIDSMautberichtNachOrt = New System.Windows.Forms.CheckBox() Me.txtSonst_weitereKdNrWOELFL = New System.Windows.Forms.TextBox() Me.lblIDS_Rabatte = New System.Windows.Forms.Label() Me.PictureBox7 = New System.Windows.Forms.PictureBox() @@ -441,13 +441,14 @@ Partial Class usrcntlKundeBearbeitenFull Me.txtERROR = New System.Windows.Forms.TextBox() Me.btnDatevExport = New System.Windows.Forms.Button() Me.Label98 = New System.Windows.Forms.Label() - Me.cnsBankverbindungen = New System.Windows.Forms.ContextMenuStrip(Me.components) + Me.cnsBankverbindungen = New System.Windows.Forms.ContextMenuStrip() Me.ArchivierenToolStripMenuItem = New System.Windows.Forms.ToolStripMenuItem() Me.DokumentHinzufügenToolStripMenuItem = New System.Windows.Forms.ToolStripMenuItem() Me.DokumentLöschenToolStripMenuItem = New System.Windows.Forms.ToolStripMenuItem() Me.cboFirma = New VERAG_PROG_ALLGEMEIN.MyComboBox() Me.cboAuswahl = New VERAG_PROG_ALLGEMEIN.MyComboBox() Me.DataGridViewTextBoxColumn2 = New System.Windows.Forms.DataGridViewTextBoxColumn() + Me.PictureBox1 = New System.Windows.Forms.PictureBox() Me.tbcntrDetails.SuspendLayout() Me.tbAbfertigung.SuspendLayout() Me.tbcntrAbf.SuspendLayout() @@ -497,6 +498,7 @@ Partial Class usrcntlKundeBearbeitenFull Me.TabPage11.SuspendLayout() Me.pnlNeukunde.SuspendLayout() Me.cnsBankverbindungen.SuspendLayout() + CType(Me.PictureBox1, System.ComponentModel.ISupportInitialize).BeginInit() Me.SuspendLayout() ' 'tbcntrDetails @@ -4162,6 +4164,8 @@ Partial Class usrcntlKundeBearbeitenFull ' 'tbSonstiges ' + Me.tbSonstiges.Controls.Add(Me.PictureBox1) + Me.tbSonstiges.Controls.Add(Me.cbxIDSMautberichtNachOrt) Me.tbSonstiges.Controls.Add(Me.txtSonst_weitereKdNrWOELFL) Me.tbSonstiges.Controls.Add(Me.lblIDS_Rabatte) Me.tbSonstiges.Controls.Add(Me.PictureBox7) @@ -4212,6 +4216,16 @@ Partial Class usrcntlKundeBearbeitenFull Me.tbSonstiges.Text = "Sonstiges" Me.tbSonstiges.UseVisualStyleBackColor = True ' + 'cbxIDSMautberichtNachOrt + ' + Me.cbxIDSMautberichtNachOrt.AutoSize = True + Me.cbxIDSMautberichtNachOrt.Location = New System.Drawing.Point(119, 194) + Me.cbxIDSMautberichtNachOrt.Name = "cbxIDSMautberichtNachOrt" + Me.cbxIDSMautberichtNachOrt.Size = New System.Drawing.Size(164, 17) + Me.cbxIDSMautberichtNachOrt.TabIndex = 149 + Me.cbxIDSMautberichtNachOrt.Text = "IDS-Mautbericht AT nach Ort" + Me.cbxIDSMautberichtNachOrt.UseVisualStyleBackColor = True + ' 'txtSonst_weitereKdNrWOELFL ' Me.txtSonst_weitereKdNrWOELFL.Location = New System.Drawing.Point(179, 53) @@ -4597,9 +4611,9 @@ Partial Class usrcntlKundeBearbeitenFull Me.cbxSonst_CsvMautbericht.AutoSize = True Me.cbxSonst_CsvMautbericht.Location = New System.Drawing.Point(428, 141) Me.cbxSonst_CsvMautbericht.Name = "cbxSonst_CsvMautbericht" - Me.cbxSonst_CsvMautbericht.Size = New System.Drawing.Size(82, 17) + Me.cbxSonst_CsvMautbericht.Size = New System.Drawing.Size(106, 17) Me.cbxSonst_CsvMautbericht.TabIndex = 2 - Me.cbxSonst_CsvMautbericht.Text = "Mautbericht" + Me.cbxSonst_CsvMautbericht.Text = "CSV-Mautbericht" Me.cbxSonst_CsvMautbericht.UseVisualStyleBackColor = True ' 'txtSonst_KdNrUTA @@ -6151,6 +6165,17 @@ Partial Class usrcntlKundeBearbeitenFull Me.DataGridViewTextBoxColumn2.HeaderText = "E-Mail" Me.DataGridViewTextBoxColumn2.Name = "DataGridViewTextBoxColumn2" ' + 'PictureBox1 + ' + Me.PictureBox1.BackgroundImageLayout = System.Windows.Forms.ImageLayout.None + Me.PictureBox1.Image = Global.SDL.My.Resources.Resources.pdf_s + Me.PictureBox1.Location = New System.Drawing.Point(290, 191) + Me.PictureBox1.Name = "PictureBox1" + Me.PictureBox1.Size = New System.Drawing.Size(20, 20) + Me.PictureBox1.SizeMode = System.Windows.Forms.PictureBoxSizeMode.Zoom + Me.PictureBox1.TabIndex = 150 + Me.PictureBox1.TabStop = False + ' 'usrcntlKundeBearbeitenFull ' Me.AutoScaleDimensions = New System.Drawing.SizeF(6.0!, 13.0!) @@ -6260,6 +6285,7 @@ Partial Class usrcntlKundeBearbeitenFull Me.pnlNeukunde.ResumeLayout(False) Me.pnlNeukunde.PerformLayout() Me.cnsBankverbindungen.ResumeLayout(False) + CType(Me.PictureBox1, System.ComponentModel.ISupportInitialize).EndInit() Me.ResumeLayout(False) Me.PerformLayout() @@ -6661,4 +6687,6 @@ Partial Class usrcntlKundeBearbeitenFull Friend WithEvents cbxSammelrechnung_IM_EX As CheckBox Friend WithEvents cbxPDFMerge As CheckBox Friend WithEvents cbxHR_autoselect As CheckBox + Friend WithEvents cbxIDSMautberichtNachOrt As CheckBox + Friend WithEvents PictureBox1 As PictureBox End Class diff --git a/SDL/kunden/usrcntlKundeBearbeitenFull.vb b/SDL/kunden/usrcntlKundeBearbeitenFull.vb index eeb51e8e..45bb9998 100644 --- a/SDL/kunden/usrcntlKundeBearbeitenFull.vb +++ b/SDL/kunden/usrcntlKundeBearbeitenFull.vb @@ -1,4 +1,7 @@ -Imports MDM_Worker +Imports com.sun.xml.internal.rngom +Imports DAKOSY_Worker +Imports MDM_Worker +Imports Tamir.SharpSsh.jsch Imports VERAG_PROG_ALLGEMEIN Public Class usrcntlKundeBearbeitenFull @@ -402,8 +405,10 @@ Public Class usrcntlKundeBearbeitenFull cbxSonst_CsvMautbericht.Checked = loadValue(ADRESSE.ExportMautberichtCSV, False) cbxSonst_CsvMSE.Checked = loadValue(ADRESSE.MSEExportCSV, False) cbxSonst_CsvUTA.Checked = loadValue(ADRESSE.UTAExportCSV, False) + cbxSonst_CsvUTA.Checked = loadValue(ADRESSE.UTAExportCSV, False) cbxUIDMehrfachverwendung.Checked = KUNDE_ERW.kde_UIDMehrfachverwendung cbxkeineMWSt.Checked = loadValue(KUNDE_ERW.kde_keineMWSt, False) + cbxIDSMautberichtNachOrt.Checked = loadValue(ADRESSE.IDSMautbericht_nachOrt, False) ' ----- Provision Dienstleistungen ----- cbxProvDL.Checked = KUNDE_ERW.kde_Provisionsverguetung @@ -860,6 +865,7 @@ Public Class usrcntlKundeBearbeitenFull ADRESSE.ExportMautberichtCSV = cbxSonst_CsvMautbericht.Checked ADRESSE.MSEExportCSV = cbxSonst_CsvMSE.Checked ADRESSE.UTAExportCSV = cbxSonst_CsvUTA.Checked + ADRESSE.IDSMautbericht_nachOrt = cbxIDSMautberichtNachOrt.Checked KUNDE_ERW.kde_betreuer = isLeerNothing(cbxBetreuer.Text) @@ -2369,7 +2375,7 @@ Public Class usrcntlKundeBearbeitenFull lblIDS_Rabatte.Text = "IDS-Rabatte/Preise" & IIf(KundeOhneRabatt > 0, " - KUNDE OHNE RABATT", "") - Dim dt_IDS As DataTable = sql.loadDgvBySql("SELECT P.ProductDescription, C.OutletCountry,S.OutletCode, S.OutletName, RW.Rechenwert, Kz, RW.KategorieNr as KatNr FROM [VERAG].[dbo].[tbl_IDS_Rechenwerte] as RW + Dim dt_IDS As DataTable = sql.loadDgvBySql("SELECT P.ProductDescription, C.OutletCountry,S.OutletCode, S.OutletName,S.OutletOrt, RW.Rechenwert, Kz, RW.KategorieNr as KatNr FROM [VERAG].[dbo].[tbl_IDS_Rechenwerte] as RW left join [VERAG].[dbo].[tbl_IDS_Produkte] as P on P.ProductTypeCode = RW.ProductTypeCode left join [VERAG].[dbo].[tbl_IDS_Länder] as C on C.OutletCountryCode = RW.OutletCountryCode left join [VERAG].[dbo].[tbl_IDS_Stationen] as S on S.[OutletCode] = RW.OutletCode and S.OutletCountryCode = RW.OutletCountryCode where CustomerCode is null order by KZ", "FMZOLL") @@ -2387,8 +2393,10 @@ Public Class usrcntlKundeBearbeitenFull .Columns(2).HeaderText = "S-Nr" .Columns(2).Width = 50 .Columns(3).HeaderText = "Station" - .Columns(4).HeaderText = "Rab-/Pr." - .Columns(6).Width = 50 + .Columns(4).HeaderText = "Ort" + .Columns(4).Width = 50 + .Columns(5).HeaderText = "Rab-/Pr." + .Columns(7).Width = 50 .Columns(3).AutoSizeMode = DataGridViewAutoSizeColumnMode.Fill End With @@ -2824,8 +2832,8 @@ Public Class usrcntlKundeBearbeitenFull End If Button6.Enabled = True - Else - Button6.Enabled = False + Else + Button6.Enabled = False End If End Sub @@ -2839,7 +2847,7 @@ Public Class usrcntlKundeBearbeitenFull For Each r As DataGridViewRow In dgvKundenUID.SelectedRows Dim UID_KUNDE As New cKundenveranlagungUID(KUNDE.KundenNr, r.Cells("UstIdKz").Value) - UID_KUNDE.DELETE + UID_KUNDE.DELETE() Next initdgvKUNDENUID(KUNDE.KundenNr) @@ -2850,5 +2858,216 @@ Public Class usrcntlKundeBearbeitenFull End If + End Sub + + Private Sub PictureBox1_Click(sender As Object, e As EventArgs) Handles PictureBox1.Click + Dim ids As New cIDS + Dim gruppierungNachOrt As Boolean = False + If ADRESSE.IDSMautbericht_nachOrt IsNot Nothing AndAlso Not IsDBNull(ADRESSE.IDSMautbericht_nachOrt) Then + gruppierungNachOrt = ADRESSE.IDSMautbericht_nachOrt + End If + + Dim rechnungsdatum = ids.getCurrentInvoicedate(KUNDE.KundenNr) + + If rechnungsdatum <> "" AndAlso IsDate(rechnungsdatum) Then + + Dim f As New frmDatumsabfrage("IDS-Mautbericht Datum ", True) + f.dtp_date.Value = CDate(rechnungsdatum) + f.ShowDialog() + If f.DialogResult = DialogResult.OK Then + + + Dim dt_ids = ids.genIDSMautberichtDatatByKdNr(KUNDE.KundenNr, CDate(rechnungsdatum), "IDS", False) ' + Dim dt_ids_at = ids.genIDSMautberichtDatatByKdNr(KUNDE.KundenNr, CDate(rechnungsdatum), "IDS_AT", gruppierungNachOrt) + + If dt_ids.Rows.Count = 0 AndAlso dt_ids_at.Rows.Count = 0 Then + MsgBox("Zum eingegebenen Datum existieren keine Daten!") + Exit Sub + End If + + + If dt_ids.Rows.Count > 0 Then createBericht(dt_ids, KUNDE.KundenNr, -1, CDate(rechnungsdatum), False) + If dt_ids_at.Rows.Count > 0 Then createBericht(dt_ids_at, KUNDE.KundenNr, -1, CDate(rechnungsdatum), gruppierungNachOrt) + + End If + + Else + + End If + + + + + + + + + End Sub + + Private Sub createBericht(dt As DataTable, kdnr As String, idsKdnr As String, rechnungsdatum As Date, Gruppierung_nach_Ort As Boolean) + Try + + Dim sql As New VERAG_PROG_ALLGEMEIN.SQL + + Dim rpt As New rptIDS_Anhang + + rpt.DataSource = dt + + rpt.txtKunde.Text = kdnr & " " & New VERAG_PROG_ALLGEMEIN.cAdressen(kdnr).FullName + + rpt.lblIDSKdNr.Text = idsKdnr + + rpt.lblRgDatum.Text = rechnungsdatum.ToShortDateString + + rpt.GroupHeaderKz.DataField = "OutletCountry" + + rpt.Label4.Text = rechnungsdatum.ToShortDateString + + + Dim curRabattbetragProLiter As Double = 0 + Dim curRabattbetrag As Double = 0 + Dim curGesamtbetrag As Double = 0 + + + Dim sumLiter As Double = 0 + + Dim sumBrutto As Double = 0 + + Dim sumLiterLand As Double = 0 + + Dim sumLiterKat As Double = 0 + + Dim sumBruttoLand As Double = 0 + + Dim sumBruttoKat As Double = 0 + + Dim sumLiterGes As Double = 0 + + Dim sumBruttoGes As Double = 0 + + Dim cntKat = 0 + Dim cnt = 0 + + rpt.GroupFooterKat.Visible = False + + AddHandler rpt.Detail.Format, Sub() + ' If cnt = 0 Then + curRabattbetrag = 0 - sql.isDbnullEmptyDbl(rpt.Fields.Item("SummevonRabattbetrag").Value, 2, "") '=0-[Summe von Rabattbetrag] + curRabattbetragProLiter = 0 - IIf(sql.isDbnullEmpty(rpt.Fields.Item("KZ").Value, "") = "P", sql.isDbnullEmptyDbl(rpt.Fields.Item("RabattbetragProLiter").Value, 4, 0), sql.isDbnullEmptyDbl(rpt.Fields.Item("Rechenwert").Value, 4, 0)) '=0-Wenn([Kz]="P";[RabattbetragProLiter];[Rechenwert]) + curGesamtbetrag = CDbl(sql.isDbnullEmptyDbl(rpt.Fields.Item("Nettobetrag").Value, 2, 0) + curRabattbetrag + sql.isDbnullEmptyDbl(rpt.Fields.Item("Steuerbetrag").Value, 2, 0)) '=[Nettobetrag]+[curRabattbetrag]+[Steuerbetrag] + + rpt.txtKunde.Text = sql.isDbnullEmpty(rpt.Fields.Item("AdressenNr").Value, "") + rpt.txtKunde.Text &= " " & sql.isDbnullEmpty(rpt.Fields.Item("Name 1").Value, "") + + Dim Station As String = "" + If Gruppierung_nach_Ort Then + Station = sql.isDbnullEmpty(rpt.Fields.Item("OutletOrt").Value, "") + If Station <> "" Then + Station = " (" & Station & ")" + End If + End If + + + rpt.txtProduktBeschreibung.Text = sql.isDbnullEmpty(rpt.Fields.Item("ProductDescription").Value, "") & Station + + rpt.txtLiter.Text = sql.isDbnullEmpty(rpt.Fields.Item("Liter").Value, "") + rpt.txtPreis.Text = sql.isDbnullEmptyDbl(rpt.Fields.Item("NettopreisProLiter").Value, 4, "") + rpt.txtBetrag.Text = sql.isDbnullEmptyDbl(rpt.Fields.Item("Nettobetrag").Value, 2, "") + + rpt.txtRabattPreis.Text = curRabattbetragProLiter + rpt.txtRabattBetrag.Text = curRabattbetrag + + rpt.lblMWST.Text = "zuzüglich MWST " + + 'SPANIEN, POLEN : für alle Produkte gilt eine Reduzierung der MwSt. auf 10 % bzw. 8%, mit Ausnahme von AdBlue (bleibt bei 21 % MwSt.) -> Regelung der MWST-Anzeige erfolgt über IDS-Länder, allerdings wird auf Datenbasis hier kein Unterschied zw. ProductCode gemacht, daher hardcodiert -> weil es nur um Anzeige geht! + + '20.07.2026 -> Änderungen wieder deaktivert! + + 'If (SQL.isDbnullEmpty(rpt.Fields.Item("OutletCountry").Value, "") = "Spain" Or SQL.isDbnullEmpty(rpt.Fields.Item("OutletCountry").Value, "") = "Poland") And SQL.isDbnullEmpty(rpt.Fields.Item("ProductDescription").Value, "") <> "Ad Blue" Then + + ' Select Case SQL.isDbnullEmpty(rpt.Fields.Item("OutletCountry").Value, "") + ' Case "Spain" : rpt.lblMWST.Text &= "10 %" + ' Case "Poland" : rpt.lblMWST.Text &= "8 %" + ' End Select + + 'Else + + rpt.lblMWST.Text &= IIf(sql.isDbnullEmptyDbl(rpt.Fields.Item("Steuersatz").Value, 2, "") <> "", sql.isDbnullEmptyDbl(rpt.Fields.Item("Steuersatz").Value, 2, "") * 100 & " %", "") + + 'End If + + rpt.txtMWST.Text = sql.isDbnullEmptyDbl(rpt.Fields.Item("Steuerbetrag").Value, 2, "") + + rpt.txtPreisProLiter.Text = sql.isDbnullEmptyDbl(rpt.Fields.Item("NettopreisProLiter").Value, 4, 0) + curRabattbetragProLiter '=[NettopreisProLiter]+[curRabattbetragProLiter] + + rpt.txtGesamtbetrag.Text = curGesamtbetrag + + sumLiter += sql.isDbnullEmptyDbl(rpt.Fields.Item("Liter").Value, 2, 0) + + sumBrutto += curGesamtbetrag + + cnt += 1 + End Sub + + + + AddHandler rpt.GroupHeaderKz.Format, Sub() + rpt.txtOutletCountry.Text = sql.isDbnullEmpty(rpt.Fields.Item("OutletCountry").Value, "") + End Sub + + AddHandler rpt.GroupFooterKz.Format, Sub() + + sumLiterLand += sumLiter + sumBruttoLand += sumBrutto + + + rpt.txtNettoKzSum.Text = sumLiterLand.ToString("N2") + rpt.txtMWSTKzSum.Text = "" + rpt.txtBruttoKzSum.Text = sumBruttoLand.ToString("N2") + cntKat += 1 + + sumLiter = 0 + sumBrutto = 0 + + sumLiterGes += sumLiterLand + sumBruttoGes += sumBruttoLand + + sumLiterLand = 0 + sumBruttoLand = 0 + + rpt.txtOutletCountry.Text = rpt.txtOutletCountry.Text.Replace("Land", sql.isDbnullEmpty(rpt.Fields.Item("OutletCountry").Value, "")) + + End Sub + + + + AddHandler rpt.ReportFooter1.Format, Sub() + + rpt.txtNettoGesSum.Text = sumLiterGes.ToString("N2") + rpt.txtBruttoGesSum.Text = sumBruttoGes.ToString("N2") + + If cntKat <= 1 Then + rpt.GroupFooterKat.Visible = False + End If + End Sub + + + + Dim tmpPath = VERAG_PROG_ALLGEMEIN.DATENVERVER_OPTIONS.getTMPPath("IDS_ " & kdnr & "_IDS_Mautbericht.pdf", ".pdf", , False) + Dim p As New GrapeCity.ActiveReports.Export.Pdf.Section.PdfExport + rpt.Run(False) + p.Export(rpt.Document, tmpPath) + Process.Start(tmpPath) + rpt.Dispose() + + + + + + Catch ex As System.Exception + VERAG_PROG_ALLGEMEIN.cErrorHandler.ERR(ex.Message, ex.StackTrace, System.Reflection.MethodInfo.GetCurrentMethod.Name) + End Try + + End Sub End Class diff --git a/SDL/mdm/frmMDMDatenverarbetiung.Designer.vb b/SDL/mdm/frmMDMDatenverarbetiung.Designer.vb index daf4027c..e174fa5f 100644 --- a/SDL/mdm/frmMDMDatenverarbetiung.Designer.vb +++ b/SDL/mdm/frmMDMDatenverarbetiung.Designer.vb @@ -25,6 +25,7 @@ Partial Class frmMDMDatenverarbetiung Me.components = New System.ComponentModel.Container() Dim resources As System.ComponentModel.ComponentResourceManager = New System.ComponentModel.ComponentResourceManager(GetType(frmMDMDatenverarbetiung)) Me.pnl = New System.Windows.Forms.Panel() + Me.btnImportdet = New System.Windows.Forms.Button() Me.pb_importOK = New System.Windows.Forms.PictureBox() Me.cbxIDSmitVerag = New System.Windows.Forms.CheckBox() Me.Panel5 = New System.Windows.Forms.Panel() @@ -52,7 +53,7 @@ Partial Class frmMDMDatenverarbetiung Me.pnlAsfinag = New System.Windows.Forms.Panel() Me.bntDatumzuruecksetzen = New System.Windows.Forms.Button() Me.bntDatumsetzen = New System.Windows.Forms.Button() - Me.Panel3 = New System.Windows.Forms.Panel() + Me.pnlMDMDetailberichte = New System.Windows.Forms.Panel() Me.Button6 = New System.Windows.Forms.Button() Me.pnlIDS = New System.Windows.Forms.Panel() Me.Button10 = New System.Windows.Forms.Button() @@ -85,7 +86,6 @@ Partial Class frmMDMDatenverarbetiung Me.Button2 = New System.Windows.Forms.Button() Me.ContextMenuStrip1 = New System.Windows.Forms.ContextMenuStrip(Me.components) Me.MyDatagridview1 = New VERAG_PROG_ALLGEMEIN.MyDatagridview(Me.components) - Me.btnImportdet = New System.Windows.Forms.Button() Me.pnl.SuspendLayout() CType(Me.pb_importOK, System.ComponentModel.ISupportInitialize).BeginInit() Me.Panel5.SuspendLayout() @@ -94,7 +94,7 @@ Partial Class frmMDMDatenverarbetiung Me.FlowLayoutPanel.SuspendLayout() Me.Panel1.SuspendLayout() Me.pnlAsfinag.SuspendLayout() - Me.Panel3.SuspendLayout() + Me.pnlMDMDetailberichte.SuspendLayout() Me.pnlIDS.SuspendLayout() CType(Me.PictureBox1, System.ComponentModel.ISupportInitialize).BeginInit() CType(Me.pic, System.ComponentModel.ISupportInitialize).BeginInit() @@ -124,6 +124,17 @@ Partial Class frmMDMDatenverarbetiung Me.pnl.Size = New System.Drawing.Size(1163, 100) Me.pnl.TabIndex = 1 ' + 'btnImportdet + ' + Me.btnImportdet.Anchor = CType((System.Windows.Forms.AnchorStyles.Top Or System.Windows.Forms.AnchorStyles.Right), System.Windows.Forms.AnchorStyles) + Me.btnImportdet.FlatStyle = System.Windows.Forms.FlatStyle.Flat + Me.btnImportdet.Location = New System.Drawing.Point(985, 8) + Me.btnImportdet.Name = "btnImportdet" + Me.btnImportdet.Size = New System.Drawing.Size(166, 23) + Me.btnImportdet.TabIndex = 132 + Me.btnImportdet.Text = "Einarbeitungsdetails" + Me.btnImportdet.UseVisualStyleBackColor = True + ' 'pb_importOK ' Me.pb_importOK.BackgroundImage = Global.SDL.My.Resources.Resources.ok @@ -371,7 +382,7 @@ Partial Class frmMDMDatenverarbetiung 'Panel1 ' Me.Panel1.Controls.Add(Me.pnlAsfinag) - Me.Panel1.Controls.Add(Me.Panel3) + Me.Panel1.Controls.Add(Me.pnlMDMDetailberichte) Me.Panel1.Controls.Add(Me.pnlIDS) Me.Panel1.Controls.Add(Me.lblTTRSum) Me.Panel1.Controls.Add(Me.txtTTRSum) @@ -427,14 +438,14 @@ Partial Class frmMDMDatenverarbetiung Me.bntDatumsetzen.Text = "Abr-datum setzen" Me.bntDatumsetzen.UseVisualStyleBackColor = True ' - 'Panel3 + 'pnlMDMDetailberichte ' - Me.Panel3.BackColor = System.Drawing.Color.White - Me.Panel3.Controls.Add(Me.Button6) - Me.Panel3.Location = New System.Drawing.Point(603, 9) - Me.Panel3.Name = "Panel3" - Me.Panel3.Size = New System.Drawing.Size(313, 139) - Me.Panel3.TabIndex = 48 + Me.pnlMDMDetailberichte.BackColor = System.Drawing.Color.White + Me.pnlMDMDetailberichte.Controls.Add(Me.Button6) + Me.pnlMDMDetailberichte.Location = New System.Drawing.Point(603, 9) + Me.pnlMDMDetailberichte.Name = "pnlMDMDetailberichte" + Me.pnlMDMDetailberichte.Size = New System.Drawing.Size(313, 139) + Me.pnlMDMDetailberichte.TabIndex = 48 ' 'Button6 ' @@ -826,17 +837,6 @@ Partial Class frmMDMDatenverarbetiung Me.MyDatagridview1.Size = New System.Drawing.Size(1163, 547) Me.MyDatagridview1.TabIndex = 0 ' - 'btnImportdet - ' - Me.btnImportdet.Anchor = CType((System.Windows.Forms.AnchorStyles.Top Or System.Windows.Forms.AnchorStyles.Right), System.Windows.Forms.AnchorStyles) - Me.btnImportdet.FlatStyle = System.Windows.Forms.FlatStyle.Flat - Me.btnImportdet.Location = New System.Drawing.Point(985, 8) - Me.btnImportdet.Name = "btnImportdet" - Me.btnImportdet.Size = New System.Drawing.Size(166, 23) - Me.btnImportdet.TabIndex = 132 - Me.btnImportdet.Text = "Einarbeitungsdetails" - Me.btnImportdet.UseVisualStyleBackColor = True - ' 'frmMDMDatenverarbetiung ' Me.AutoScaleDimensions = New System.Drawing.SizeF(6.0!, 13.0!) @@ -862,7 +862,7 @@ Partial Class frmMDMDatenverarbetiung Me.Panel1.ResumeLayout(False) Me.Panel1.PerformLayout() Me.pnlAsfinag.ResumeLayout(False) - Me.Panel3.ResumeLayout(False) + Me.pnlMDMDetailberichte.ResumeLayout(False) Me.pnlIDS.ResumeLayout(False) CType(Me.PictureBox1, System.ComponentModel.ISupportInitialize).EndInit() CType(Me.pic, System.ComponentModel.ISupportInitialize).EndInit() @@ -905,7 +905,7 @@ Partial Class frmMDMDatenverarbetiung Friend WithEvents btnKunde As Button Friend WithEvents Button1 As Button Friend WithEvents Button5 As Button - Friend WithEvents Panel3 As Panel + Friend WithEvents pnlMDMDetailberichte As Panel Friend WithEvents PictureBox1 As PictureBox Friend WithEvents pic As PictureBox Friend WithEvents Button6 As Button diff --git a/SDL/mdm/frmMDMDatenverarbetiung.vb b/SDL/mdm/frmMDMDatenverarbetiung.vb index b148f700..61fc1262 100644 --- a/SDL/mdm/frmMDMDatenverarbetiung.vb +++ b/SDL/mdm/frmMDMDatenverarbetiung.vb @@ -1239,7 +1239,7 @@ Public Class frmMDMDatenverarbetiung Sub initLieferant(l As String, btn As Button) MyDatagridview1.DataSource = Nothing Me.LIEFERANT = l - Panel3.Controls.Clear() + pnlMDMDetailberichte.Controls.Clear() For Each c As Button In FlowLayoutPanel.Controls If c Is btn Then @@ -1264,12 +1264,12 @@ Public Class frmMDMDatenverarbetiung Case "PLOSE" Panel4.Visible = True Dim c As New usrCntlMDMDatenverarbeitungAuswertungen_divers(Me, Me.LIEFERANT) - Panel3.Controls.Add(c) + pnlMDMDetailberichte.Controls.Add(c) c.Dock = DockStyle.Fill Case "UTA" Panel5.Visible = True Dim c As New usrCntlMDMDatenverarbeitungAuswertungen_divers(Me, Me.LIEFERANT) - Panel3.Controls.Add(c) + pnlMDMDetailberichte.Controls.Add(c) c.Dock = DockStyle.Fill Case "ASFINAG" cbxASFINAGAbgerechnet.Visible = True @@ -1280,7 +1280,7 @@ Public Class frmMDMDatenverarbetiung Case "IDS" Panel5.Visible = True Dim c As New usrCntlMDMDatenverarbeitungAuswertungen_divers(Me, Me.LIEFERANT) - Panel3.Controls.Add(c) + pnlMDMDetailberichte.Controls.Add(c) c.Dock = DockStyle.Fill pnlIDS.Visible = True cbxKopie.Visible = True @@ -1289,7 +1289,7 @@ Public Class frmMDMDatenverarbetiung Case "MSE" Panel5.Visible = True Dim c As New usrCntlMDMDatenverarbeitungAuswertungen_divers(Me, Me.LIEFERANT) - Panel3.Controls.Add(c) + pnlMDMDetailberichte.Controls.Add(c) c.Dock = DockStyle.Fill End Select @@ -1686,7 +1686,8 @@ Public Class frmMDMDatenverarbetiung distinct(tblIDSTransactionsNew.KdNrVERAG), tblIDSTransactionsNew.CustomerCode, Adressen.Rechnungsdruck, - isNULL(tblIDSInvoicesNew.daId,0) as InvoiceID + isNULL(tblIDSInvoicesNew.daId,0) as InvoiceID, + isnull(IDSMautbericht_nachOrt,0) as IDSMautbericht_nachOrt FROM tblIDSTransactionsNew INNER JOIN @@ -1737,7 +1738,7 @@ Public Class frmMDMDatenverarbetiung If IDS("Rechnungsdruck") = 2 Then - Dim pathfile = genIDSAttachmentByKdNr(IDS("KdNrVERAG"), IDS("CustomerCode"), dir, datPloseAnhang.Value, art) + Dim pathfile = genIDSAttachmentByKdNr(IDS("KdNrVERAG"), IDS("CustomerCode"), dir, datPloseAnhang.Value, art, IDS("IDSMautbericht_nachOrt")) If Not AddAttachementToRE(pathfile, IDS("KdNrVERAG"), RECHNUNG, "IDS") Then verarbOK = False End If @@ -3126,35 +3127,47 @@ LEFT JOIN VERAG.dbo.tbl_IDS_Länder land End Function - Function genIDSAttachmentByKdNr(KdNr As String, IDSKdNr As String, dir As String, von As Date, art As String) + Function genIDSAttachmentByKdNr(KdNr As String, IDSKdNr As String, dir As String, von As Date, art As String, Gruppierung_nach_Ort As Boolean) Try Dim displayFilter = False Dim sqlstr As String = "" - Dim sqlWhere As String = "" - Dim sqlSelect As String = "" - Dim sqlGroup As String = "" + + Dim sqljoin_nachOrt As String = "" + Dim sqlgroup_nachOrt = "" + Dim sqlselect_nachOrt = "" + If Gruppierung_nach_Ort Then + sqljoin_nachOrt = "INNER JOIN tbl_IDS_Stationen ON tblIDSTransactionsNew.OutletCountryCode = tbl_IDS_Stationen.OutletCountryCode and tblIDSTransactionsNew.OutletCode = tbl_IDS_Stationen.OutletCode and tbl_IDS_Stationen.[OutletCountryCode]=740543" + sqlgroup_nachOrt = ",tbl_IDS_Stationen.OutletOrt" + sqlselect_nachOrt = "tbl_IDS_Stationen.OutletOrt," + End If + Select Case art Case "IDS" 'Offert17 - sqlWhere = " AND tblIDSTransactionsNew.[OutletCountryCode]<>740543" - sqlSelect = " tblIDSTransactionsNew.[OutletCountry]" - sqlGroup = " tblIDSTransactionsNew.[OutletCountry]" + + sqlstr = "SELECT Adressen.AdressenNr, Adressen.[Name 1], Adressen.[Name 2], Adressen.Straße, Adressen.LandKz, Adressen.PLZ, Adressen.Ort, Adressen.UstIdKz, Adressen.UstIdNr, tblIDSTransactionsNew.[CustomerCode], tblIDSTransactionsNew.[OutletCountry], tbl_IDS_Produkte.ProductDescription, tbl_IDS_Länder.Steuersatz, tblIDSTransactionsNew.Rechenwert, tblIDSTransactionsNew.Kz, Sum(tblIDSTransactionsNew.[TransactionVolume]) AS Liter, Sum(tblIDSTransactionsNew.[TotalNetAmount]) AS Nettobetrag, Sum(tblIDSTransactionsNew.[VATAmount]) AS Steuerbetrag, + Case when Sum([TransactionVolume]) =0 THEN 0 ELSE Sum([TotalNetAmount])/Sum([TransactionVolume]) END AS NettopreisProLiter, + Sum(tblIDSTransactionsNew.Rabattbetrag) As [SummevonRabattbetrag], + Case when Sum([TransactionVolume]) =0 THEN 0 ELSE Sum([Rabattbetrag])/Sum([TransactionVolume]) END AS RabattbetragProLiter + FROM((tblIDSTransactionsNew INNER JOIN tbl_IDS_Länder ON tblIDSTransactionsNew.[OutletCountryCode] = tbl_IDS_Länder.OutletCountryCode) INNER JOIN tbl_IDS_Produkte On tblIDSTransactionsNew.[ProductTypeCode] = tbl_IDS_Produkte.ProductTypeCode ) INNER JOIN Adressen On tblIDSTransactionsNew.KdNrVERAG = Adressen.AdressenNr + Where cast(tblIDSTransactionsNew.YearMonthDay As Date) = '" & DateTimePicker2.Text & "' AND tblIDSTransactionsNew.[OutletCountryCode]<>740543 AND tblIDSTransactionsNew.KdNrVERAG = " & KdNr & " + GROUP BY Adressen.AdressenNr, Adressen.[Name 1], Adressen.[Name 2], Adressen.Straße, Adressen.LandKz, Adressen.PLZ, Adressen.Ort, Adressen.UstIdKz, Adressen.UstIdNr, tblIDSTransactionsNew.[CustomerCode], tblIDSTransactionsNew.[OutletCountry], tbl_IDS_Produkte.ProductDescription, tbl_IDS_Länder.Steuersatz, tblIDSTransactionsNew.Rechenwert, tblIDSTransactionsNew.Kz" + + Case "IDS_AT" 'Offert21 - sqlWhere = " AND tblIDSTransactionsNew.[OutletCountryCode]=740543" - sqlSelect = " CASE WHEN tblIDSTransactionsNew.OutletCode BETWEEN 4473 AND 4474 THEN 'Austria Suben' ELSE tblIDSTransactionsNew.OutletCountry END AS OutletCountry" - sqlGroup = " CASE WHEN tblIDSTransactionsNew.OutletCode BETWEEN 4473 AND 4474 THEN 'Austria Suben' ELSE tblIDSTransactionsNew.OutletCountry END" + + sqlstr = " SELECT Adressen.AdressenNr, Adressen.[Name 1], Adressen.[Name 2], Adressen.Straße, Adressen.LandKz, Adressen.PLZ, Adressen.Ort, Adressen.UstIdKz, Adressen.UstIdNr, tblIDSTransactionsNew.[CustomerCode], CASE WHEN tblIDSTransactionsNew.OutletCode BETWEEN 4473 And 4474 THEN 'Austria Suben' ELSE tblIDSTransactionsNew.OutletCountry END AS OutletCountry, tbl_IDS_Produkte.ProductDescription," & sqlselect_nachOrt & " tbl_IDS_Länder.Steuersatz, tblIDSTransactionsNew.Rechenwert, tblIDSTransactionsNew.Kz, Sum(tblIDSTransactionsNew.[TransactionVolume]) AS Liter, Sum(tblIDSTransactionsNew.[TotalNetAmount]) AS Nettobetrag, Sum(tblIDSTransactionsNew.[VATAmount]) AS Steuerbetrag, + Case when Sum([TransactionVolume]) =0 THEN 0 ELSE Sum([TotalNetAmount])/Sum([TransactionVolume]) END AS NettopreisProLiter, + Sum(tblIDSTransactionsNew.Rabattbetrag) As [SummevonRabattbetrag], + Case when Sum([TransactionVolume]) =0 THEN 0 ELSE Sum([Rabattbetrag])/Sum([TransactionVolume]) END AS RabattbetragProLiter + FROM tblIDSTransactionsNew INNER JOIN tbl_IDS_Länder ON tblIDSTransactionsNew.[OutletCountryCode] = tbl_IDS_Länder.OutletCountryCode INNER JOIN tbl_IDS_Produkte On tblIDSTransactionsNew.[ProductTypeCode] = tbl_IDS_Produkte.ProductTypeCode " & sqljoin_nachOrt & " INNER JOIN Adressen On tblIDSTransactionsNew.KdNrVERAG = Adressen.AdressenNr + Where cast(tblIDSTransactionsNew.YearMonthDay As Date) = '" & DateTimePicker2.Text & "' And tblIDSTransactionsNew.[OutletCountryCode]=740543 AND tblIDSTransactionsNew.KdNrVERAG = " & KdNr & " + GROUP BY Adressen.AdressenNr, Adressen.[Name 1], Adressen.[Name 2], Adressen.Straße, Adressen.LandKz, Adressen.PLZ, Adressen.Ort, Adressen.UstIdKz, Adressen.UstIdNr, tblIDSTransactionsNew.[CustomerCode], CASE WHEN tblIDSTransactionsNew.OutletCode BETWEEN 4473 AND 4474 THEN 'Austria Suben' ELSE tblIDSTransactionsNew.OutletCountry END, tbl_IDS_Produkte.ProductDescription, tbl_IDS_Länder.Steuersatz, tblIDSTransactionsNew.Rechenwert, tblIDSTransactionsNew.Kz" & sqlgroup_nachOrt + End Select - sqlstr &= " SELECT Adressen.AdressenNr, Adressen.[Name 1], Adressen.[Name 2], Adressen.Straße, Adressen.LandKz, Adressen.PLZ, Adressen.Ort, Adressen.UstIdKz, Adressen.UstIdNr, tblIDSTransactionsNew.[CustomerCode], " & sqlSelect & ", tbl_IDS_Produkte.ProductDescription, tbl_IDS_Länder.Steuersatz, tblIDSTransactionsNew.Rechenwert, tblIDSTransactionsNew.Kz, Sum(tblIDSTransactionsNew.[TransactionVolume]) AS Liter, Sum(tblIDSTransactionsNew.[TotalNetAmount]) AS Nettobetrag, Sum(tblIDSTransactionsNew.[VATAmount]) AS Steuerbetrag, - case when Sum([TransactionVolume]) =0 THEN 0 ELSE Sum([TotalNetAmount])/Sum([TransactionVolume]) END AS NettopreisProLiter, - Sum(tblIDSTransactionsNew.Rabattbetrag) AS [SummevonRabattbetrag], - case when Sum([TransactionVolume]) =0 THEN 0 ELSE Sum([Rabattbetrag])/Sum([TransactionVolume]) END AS RabattbetragProLiter - FROM ((tblIDSTransactionsNew INNER JOIN tbl_IDS_Länder ON tblIDSTransactionsNew.[OutletCountryCode] = tbl_IDS_Länder.OutletCountryCode) INNER JOIN tbl_IDS_Produkte ON tblIDSTransactionsNew.[ProductTypeCode] = tbl_IDS_Produkte.ProductTypeCode) INNER JOIN Adressen ON tblIDSTransactionsNew.KdNrVERAG = Adressen.AdressenNr - WHERE cast(tblIDSTransactionsNew.YearMonthDay as Date) = '" & DateTimePicker2.Text & "' AND tblIDSTransactionsNew.KdNrVERAG = " & KdNr & sqlWhere & " - GROUP BY Adressen.AdressenNr, Adressen.[Name 1], Adressen.[Name 2], Adressen.Straße, Adressen.LandKz, Adressen.PLZ, Adressen.Ort, Adressen.UstIdKz, Adressen.UstIdNr, tblIDSTransactionsNew.[CustomerCode], " & sqlGroup & ", tbl_IDS_Produkte.ProductDescription, tbl_IDS_Länder.Steuersatz, tblIDSTransactionsNew.Rechenwert, tblIDSTransactionsNew.Kz; - " Dim dt As DataTable = SQL.loadDgvBySql_Param(sqlstr, "FMZOLL") If dt Is DBNull.Value Then Return "" @@ -3210,7 +3223,16 @@ LEFT JOIN VERAG.dbo.tbl_IDS_Länder land rpt.txtKunde.Text = SQL.isDbnullEmpty(rpt.Fields.Item("AdressenNr").Value, "") rpt.txtKunde.Text &= " " & SQL.isDbnullEmpty(rpt.Fields.Item("Name 1").Value, "") - rpt.txtProduktBeschreibung.Text = SQL.isDbnullEmpty(rpt.Fields.Item("ProductDescription").Value, "") + Dim Station As String = "" + If Gruppierung_nach_Ort Then + Station = SQL.isDbnullEmpty(rpt.Fields.Item("OutletOrt").Value, "") + If Station <> "" Then + Station = " (" & Station & ")" + End If + End If + + + rpt.txtProduktBeschreibung.Text = SQL.isDbnullEmpty(rpt.Fields.Item("ProductDescription").Value, "") & Station rpt.txtLiter.Text = SQL.isDbnullEmpty(rpt.Fields.Item("Liter").Value, "") rpt.txtPreis.Text = SQL.isDbnullEmptyDbl(rpt.Fields.Item("NettopreisProLiter").Value, 4, "") @@ -4715,6 +4737,27 @@ LEFT JOIN VERAG.dbo.tbl_IDS_Länder land + + Dim IDSfehlendeStationen_AUSTRIA As Integer = 0 + + IDSfehlendeStationen_AUSTRIA = CInt((New SQL).getValueTxtBySql("select COUNT(*) from ( + select tblIDSTransactionsNew.OutletCode, tblIDSTransactionsNew.OutletCountry, tblIDSTransactionsNew.OutletName + from tblIDSTransactionsNew where cast(tblIDSTransactionsNew.YearMonthDay As Date) = '" & DateTimePicker2.Text & "' and OutletCountry = 'Austria' and tblIDSTransactionsNew.OutletCode not in (select tbl_IDS_Stationen.OutletCode from tbl_IDS_Stationen) + group by tblIDSTransactionsNew.OutletCode, tblIDSTransactionsNew.OutletCountry, tblIDSTransactionsNew.OutletName ) as temp", "FMZOLL")) + + If IDSfehlendeStationen_AUSTRIA >= 1 Then + pruefData_IDS = False + Dim hint As String = "" + ' If IDSfehlendeStationen_AUSTRIA <= 10 Then + ' hint &= SQL.getValueTxtBySql("select tblIDSTransactionsNew.OutletCode, tblIDSTransactionsNew.OutletCountry + 'from tblIDSTransactionsNew where cast(tblIDSTransactionsNew.YearMonthDay As Date) = '" & DateTimePicker2.Text & "' and OutletCountry = 'Austria' and tblIDSTransactionsNew.OutletCode not in (select tbl_IDS_Stationen.OutletCode from tbl_IDS_Stationen) + 'group by tblIDSTransactionsNew.OutletCode, tblIDSTransactionsNew.OutletCountry ", "FMZOLL") + ' End If + MsgBox("Es befinden sich unter den Transaktionen " & IDSfehlendeStationen_AUSTRIA & " österrreichische Stationen, die nicht in der Tabelle IDS_STATIONEN angelegt wurden " & vbNewLine & "Diese STATIONEN müssen nachgetragen werden, um den AT Mautbericht korrekt zu erstellen (bitte an Administrator wenden)." & IIf(hint <> "", vbNewLine & hint, "")) + End If + + + Dim fehlendeRechnungen As Integer = 0 fehlendeRechnungen = CInt((New SQL).getValueTxtBySql("select count(*) from tblIDSInvoicesNew where DocumentName is null and cast(YearMonthDay as Date) = '" & DateTimePicker2.Text & "'", "FMZOLL")) @@ -4841,7 +4884,7 @@ LEFT JOIN VERAG.dbo.tbl_IDS_Länder land If Not vbYes = MsgBox("Aktuell ist der Testlauf aktiviert, wirklich fortfahren?", vbYesNoCancel) Then Exit Sub End If - If vbYes = MsgBox("Möchten Sie den Vorgang wirklich manuell ausgeführen (wird bei Rechnungserstellung automatisch ausgeführt)", vbYesNoCancel) Then + If vbYes = MsgBox("Möchten Sie den Vorgang wirklich manuell ausführen (wird bei Rechnungserstellung automatisch ausgeführt)", vbYesNoCancel) Then If Not checkAbrechnungsdatum(datPloseAnhang.Value) Then Exit Sub diff --git a/SDL/mdm/rptPOS_ZNB.Designer.vb b/SDL/mdm/rptPOS_ZNB.Designer.vb new file mode 100644 index 00000000..435b4878 --- /dev/null +++ b/SDL/mdm/rptPOS_ZNB.Designer.vb @@ -0,0 +1,758 @@ + +Partial Public Class rptPOS_ZNB + Inherits GrapeCity.ActiveReports.SectionReport + + 'Form overrides dispose to clean up the component list. + Protected Overloads Overrides Sub Dispose(ByVal disposing As Boolean) + If disposing Then + End If + MyBase.Dispose(disposing) + End Sub + + 'NOTE: The following procedure is required by the ActiveReports Designer + 'It can be modified using the ActiveReports Designer. + 'Do not modify it using the code editor. + Private WithEvents PageHeader As GrapeCity.ActiveReports.SectionReportModel.PageHeader + Private WithEvents PageFooter As GrapeCity.ActiveReports.SectionReportModel.PageFooter + + Private Sub InitializeComponent() + Dim resources As System.ComponentModel.ComponentResourceManager = New System.ComponentModel.ComponentResourceManager(GetType(rptPOS_ZNB)) + Me.PageHeader = New GrapeCity.ActiveReports.SectionReportModel.PageHeader() + Me.lblReNr = New GrapeCity.ActiveReports.SectionReportModel.Label() + Me.lblReDat = New GrapeCity.ActiveReports.SectionReportModel.Label() + Me.lblReBetrag = New GrapeCity.ActiveReports.SectionReportModel.Label() + Me.lblZahlungsdat = New GrapeCity.ActiveReports.SectionReportModel.Label() + Me.lblTage = New GrapeCity.ActiveReports.SectionReportModel.Label() + Me.lblZinsen = New GrapeCity.ActiveReports.SectionReportModel.Label() + Me.lblVZ = New GrapeCity.ActiveReports.SectionReportModel.Label() + Me.Label5 = New GrapeCity.ActiveReports.SectionReportModel.Label() + Me.Detail = New GrapeCity.ActiveReports.SectionReportModel.Detail() + Me.txt_Anmerkung = New GrapeCity.ActiveReports.SectionReportModel.TextBox() + Me.txtREnr = New GrapeCity.ActiveReports.SectionReportModel.TextBox() + Me.txtReDat = New GrapeCity.ActiveReports.SectionReportModel.TextBox() + Me.txtZE = New GrapeCity.ActiveReports.SectionReportModel.TextBox() + Me.txtReBetrag = New GrapeCity.ActiveReports.SectionReportModel.TextBox() + Me.txtTage = New GrapeCity.ActiveReports.SectionReportModel.TextBox() + Me.txtZinsen = New GrapeCity.ActiveReports.SectionReportModel.TextBox() + Me.txtVZ = New GrapeCity.ActiveReports.SectionReportModel.TextBox() + Me.txtFaellig = New GrapeCity.ActiveReports.SectionReportModel.TextBox() + Me.PageFooter = New GrapeCity.ActiveReports.SectionReportModel.PageFooter() + Me.Line2 = New GrapeCity.ActiveReports.SectionReportModel.Line() + Me.ReportInfo2 = New GrapeCity.ActiveReports.SectionReportModel.ReportInfo() + Me.ReportHeader1 = New GrapeCity.ActiveReports.SectionReportModel.ReportHeader() + Me.lblRgDatum = New GrapeCity.ActiveReports.SectionReportModel.Label() + Me.txtKunde = New GrapeCity.ActiveReports.SectionReportModel.TextBox() + Me.Label16 = New GrapeCity.ActiveReports.SectionReportModel.Label() + Me.Picture1 = New GrapeCity.ActiveReports.SectionReportModel.Picture() + Me.picVERAG = New GrapeCity.ActiveReports.SectionReportModel.Picture() + Me.lblUeberschriftRG_GS = New GrapeCity.ActiveReports.SectionReportModel.Label() + Me.Line3 = New GrapeCity.ActiveReports.SectionReportModel.Line() + Me.lblFirmaOrt = New GrapeCity.ActiveReports.SectionReportModel.Label() + Me.lblFirmaStrasse = New GrapeCity.ActiveReports.SectionReportModel.Label() + Me.lblFirmaTel = New GrapeCity.ActiveReports.SectionReportModel.Label() + Me.lblFirmaFax = New GrapeCity.ActiveReports.SectionReportModel.Label() + Me.lblFirmaEmail = New GrapeCity.ActiveReports.SectionReportModel.Label() + Me.lblFirmaWeb = New GrapeCity.ActiveReports.SectionReportModel.Label() + Me.Label18 = New GrapeCity.ActiveReports.SectionReportModel.Label() + Me.Label1 = New GrapeCity.ActiveReports.SectionReportModel.Label() + Me.TextBox1 = New GrapeCity.ActiveReports.SectionReportModel.TextBox() + Me.Label2 = New GrapeCity.ActiveReports.SectionReportModel.Label() + Me.Label3 = New GrapeCity.ActiveReports.SectionReportModel.Label() + Me.Label4 = New GrapeCity.ActiveReports.SectionReportModel.Label() + Me.lblHeader = New GrapeCity.ActiveReports.SectionReportModel.Label() + Me.ReportFooter1 = New GrapeCity.ActiveReports.SectionReportModel.ReportFooter() + Me.txtBruttoGesSum = New GrapeCity.ActiveReports.SectionReportModel.Label() + Me.lblGessumme = New GrapeCity.ActiveReports.SectionReportModel.Label() + Me.Line7 = New GrapeCity.ActiveReports.SectionReportModel.Line() + Me.Line8 = New GrapeCity.ActiveReports.SectionReportModel.Line() + CType(Me.lblReNr, System.ComponentModel.ISupportInitialize).BeginInit() + CType(Me.lblReDat, System.ComponentModel.ISupportInitialize).BeginInit() + CType(Me.lblReBetrag, System.ComponentModel.ISupportInitialize).BeginInit() + CType(Me.lblZahlungsdat, System.ComponentModel.ISupportInitialize).BeginInit() + CType(Me.lblTage, System.ComponentModel.ISupportInitialize).BeginInit() + CType(Me.lblZinsen, System.ComponentModel.ISupportInitialize).BeginInit() + CType(Me.lblVZ, System.ComponentModel.ISupportInitialize).BeginInit() + CType(Me.Label5, System.ComponentModel.ISupportInitialize).BeginInit() + CType(Me.txt_Anmerkung, System.ComponentModel.ISupportInitialize).BeginInit() + CType(Me.txtREnr, System.ComponentModel.ISupportInitialize).BeginInit() + CType(Me.txtReDat, System.ComponentModel.ISupportInitialize).BeginInit() + CType(Me.txtZE, System.ComponentModel.ISupportInitialize).BeginInit() + CType(Me.txtReBetrag, System.ComponentModel.ISupportInitialize).BeginInit() + CType(Me.txtTage, System.ComponentModel.ISupportInitialize).BeginInit() + CType(Me.txtZinsen, System.ComponentModel.ISupportInitialize).BeginInit() + CType(Me.txtVZ, System.ComponentModel.ISupportInitialize).BeginInit() + CType(Me.txtFaellig, System.ComponentModel.ISupportInitialize).BeginInit() + CType(Me.ReportInfo2, System.ComponentModel.ISupportInitialize).BeginInit() + CType(Me.lblRgDatum, System.ComponentModel.ISupportInitialize).BeginInit() + CType(Me.txtKunde, System.ComponentModel.ISupportInitialize).BeginInit() + CType(Me.Label16, System.ComponentModel.ISupportInitialize).BeginInit() + CType(Me.Picture1, System.ComponentModel.ISupportInitialize).BeginInit() + CType(Me.picVERAG, System.ComponentModel.ISupportInitialize).BeginInit() + CType(Me.lblUeberschriftRG_GS, System.ComponentModel.ISupportInitialize).BeginInit() + CType(Me.lblFirmaOrt, System.ComponentModel.ISupportInitialize).BeginInit() + CType(Me.lblFirmaStrasse, System.ComponentModel.ISupportInitialize).BeginInit() + CType(Me.lblFirmaTel, System.ComponentModel.ISupportInitialize).BeginInit() + CType(Me.lblFirmaFax, System.ComponentModel.ISupportInitialize).BeginInit() + CType(Me.lblFirmaEmail, System.ComponentModel.ISupportInitialize).BeginInit() + CType(Me.lblFirmaWeb, System.ComponentModel.ISupportInitialize).BeginInit() + CType(Me.Label18, System.ComponentModel.ISupportInitialize).BeginInit() + CType(Me.Label1, System.ComponentModel.ISupportInitialize).BeginInit() + CType(Me.TextBox1, System.ComponentModel.ISupportInitialize).BeginInit() + CType(Me.Label2, System.ComponentModel.ISupportInitialize).BeginInit() + CType(Me.Label3, System.ComponentModel.ISupportInitialize).BeginInit() + CType(Me.Label4, System.ComponentModel.ISupportInitialize).BeginInit() + CType(Me.lblHeader, System.ComponentModel.ISupportInitialize).BeginInit() + CType(Me.txtBruttoGesSum, System.ComponentModel.ISupportInitialize).BeginInit() + CType(Me.lblGessumme, System.ComponentModel.ISupportInitialize).BeginInit() + CType(Me, System.ComponentModel.ISupportInitialize).BeginInit() + ' + 'PageHeader + ' + Me.PageHeader.Controls.AddRange(New GrapeCity.ActiveReports.SectionReportModel.ARControl() {Me.lblReNr, Me.lblReDat, Me.lblReBetrag, Me.lblZahlungsdat, Me.lblTage, Me.lblZinsen, Me.lblVZ, Me.Label5}) + Me.PageHeader.Height = 0.1458333! + Me.PageHeader.Name = "PageHeader" + ' + 'lblReNr + ' + Me.lblReNr.Height = 0.1433071! + Me.lblReNr.HyperLink = Nothing + Me.lblReNr.Left = 0.01417351! + Me.lblReNr.Name = "lblReNr" + Me.lblReNr.Style = "font-size: 6.75pt; font-weight: bold; text-align: left; text-justify: auto; ddo-c" & + "har-set: 0" + Me.lblReNr.Text = "RENR" + Me.lblReNr.Top = 0! + Me.lblReNr.Width = 0.9220473! + ' + 'lblReDat + ' + Me.lblReDat.Height = 0.1433071! + Me.lblReDat.HyperLink = Nothing + Me.lblReDat.Left = 0.9362205! + Me.lblReDat.Name = "lblReDat" + Me.lblReDat.Style = "font-size: 6.75pt; font-weight: bold; text-align: left; text-justify: auto; ddo-c" & + "har-set: 0" + Me.lblReDat.Text = "RE Datum" + Me.lblReDat.Top = 0! + Me.lblReDat.Width = 0.9842521! + ' + 'lblReBetrag + ' + Me.lblReBetrag.Height = 0.1433071! + Me.lblReBetrag.HyperLink = Nothing + Me.lblReBetrag.Left = 4.343308! + Me.lblReBetrag.Name = "lblReBetrag" + Me.lblReBetrag.Style = "font-size: 6.75pt; font-weight: bold; text-align: left; text-justify: auto; ddo-c" & + "har-set: 0" + Me.lblReBetrag.Text = "RE Betrag" + Me.lblReBetrag.Top = 0! + Me.lblReBetrag.Width = 1.181102! + ' + 'lblZahlungsdat + ' + Me.lblZahlungsdat.Height = 0.1433071! + Me.lblZahlungsdat.HyperLink = Nothing + Me.lblZahlungsdat.Left = 2.64252! + Me.lblZahlungsdat.Name = "lblZahlungsdat" + Me.lblZahlungsdat.Style = "font-size: 6.75pt; font-weight: bold; text-align: left; text-justify: auto; ddo-c" & + "har-set: 0" + Me.lblZahlungsdat.Text = "Zahlung" + Me.lblZahlungsdat.Top = 0! + Me.lblZahlungsdat.Width = 0.9661417! + ' + 'lblTage + ' + Me.lblTage.Height = 0.1433071! + Me.lblTage.HyperLink = Nothing + Me.lblTage.Left = 3.608661! + Me.lblTage.Name = "lblTage" + Me.lblTage.Style = "font-size: 6.75pt; font-weight: bold; text-align: left; text-justify: auto; ddo-c" & + "har-set: 0" + Me.lblTage.Text = "VZ Tage" + Me.lblTage.Top = 0! + Me.lblTage.Width = 0.7346458! + ' + 'lblZinsen + ' + Me.lblZinsen.Height = 0.1433071! + Me.lblZinsen.HyperLink = Nothing + Me.lblZinsen.Left = 5.936615! + Me.lblZinsen.Name = "lblZinsen" + Me.lblZinsen.Style = "font-size: 6.75pt; font-weight: bold; text-align: left; text-justify: auto; ddo-c" & + "har-set: 0" + Me.lblZinsen.Text = "Zinsen p.a." + Me.lblZinsen.Top = 0.002362205! + Me.lblZinsen.Width = 0.7374014! + ' + 'lblVZ + ' + Me.lblVZ.Height = 0.1433071! + Me.lblVZ.HyperLink = Nothing + Me.lblVZ.Left = 6.674016! + Me.lblVZ.Name = "lblVZ" + Me.lblVZ.Style = "font-size: 6.75pt; font-weight: bold; text-align: right; text-justify: auto; ddo-" & + "char-set: 0" + Me.lblVZ.Text = "Verzugszinsen" + Me.lblVZ.Top = 0! + Me.lblVZ.Width = 0.8169292! + ' + 'Label5 + ' + Me.Label5.Height = 0.1433071! + Me.Label5.HyperLink = Nothing + Me.Label5.Left = 1.920473! + Me.Label5.Name = "Label5" + Me.Label5.Style = "font-size: 6.75pt; font-weight: bold; text-align: left; text-justify: auto; ddo-c" & + "har-set: 0" + Me.Label5.Text = "Fällig" + Me.Label5.Top = 0! + Me.Label5.Width = 0.7220473! + ' + 'Detail + ' + Me.Detail.Controls.AddRange(New GrapeCity.ActiveReports.SectionReportModel.ARControl() {Me.txt_Anmerkung, Me.txtREnr, Me.txtReDat, Me.txtZE, Me.txtReBetrag, Me.txtTage, Me.txtZinsen, Me.txtVZ, Me.txtFaellig}) + Me.Detail.Height = 0.1338583! + Me.Detail.KeepTogether = True + Me.Detail.Name = "Detail" + ' + 'txt_Anmerkung + ' + Me.txt_Anmerkung.Height = 0.1338583! + Me.txt_Anmerkung.Left = 1.903543! + Me.txt_Anmerkung.Name = "txt_Anmerkung" + Me.txt_Anmerkung.Padding = New GrapeCity.ActiveReports.PaddingEx(6, 0, 0, 0) + Me.txt_Anmerkung.Style = "color: #202020; font-size: 6.75pt; font-style: italic; text-align: center; ddo-ch" & + "ar-set: 0" + Me.txt_Anmerkung.Text = "-" + Me.txt_Anmerkung.Top = 0! + Me.txt_Anmerkung.Visible = False + Me.txt_Anmerkung.Width = 3.620866! + ' + 'txtREnr + ' + Me.txtREnr.Height = 0.1338583! + Me.txtREnr.Left = 0.01417323! + Me.txtREnr.Name = "txtREnr" + Me.txtREnr.Style = "color: #202020; font-size: 6.75pt; font-style: italic; text-align: left; ddo-char" & + "-set: 0" + Me.txtREnr.Text = "-" + Me.txtREnr.Top = 0! + Me.txtREnr.Width = 0.9220473! + ' + 'txtReDat + ' + Me.txtReDat.Height = 0.1338583! + Me.txtReDat.Left = 0.9362202! + Me.txtReDat.Name = "txtReDat" + Me.txtReDat.Style = "color: #202020; font-size: 6.75pt; font-style: italic; text-align: left; ddo-char" & + "-set: 0" + Me.txtReDat.Text = "-" + Me.txtReDat.Top = 0! + Me.txtReDat.Width = 0.9842521! + ' + 'txtZE + ' + Me.txtZE.Height = 0.1338583! + Me.txtZE.Left = 2.64252! + Me.txtZE.Name = "txtZE" + Me.txtZE.Style = "color: #202020; font-size: 6.75pt; font-style: italic; text-align: left; ddo-char" & + "-set: 0" + Me.txtZE.Text = "-" + Me.txtZE.Top = 0! + Me.txtZE.Width = 0.9661417! + ' + 'txtReBetrag + ' + Me.txtReBetrag.Height = 0.1338583! + Me.txtReBetrag.Left = 4.343308! + Me.txtReBetrag.Name = "txtReBetrag" + Me.txtReBetrag.Style = "color: #202020; font-size: 6.75pt; font-style: italic; text-align: left; ddo-char" & + "-set: 0" + Me.txtReBetrag.Text = "-" + Me.txtReBetrag.Top = 0! + Me.txtReBetrag.Width = 0.8267722! + ' + 'txtTage + ' + Me.txtTage.Height = 0.1338583! + Me.txtTage.Left = 3.608661! + Me.txtTage.Name = "txtTage" + Me.txtTage.Style = "color: #202020; font-size: 6.75pt; font-style: italic; text-align: left; ddo-char" & + "-set: 0" + Me.txtTage.Text = "-" + Me.txtTage.Top = 0! + Me.txtTage.Width = 0.6618112! + ' + 'txtZinsen + ' + Me.txtZinsen.Height = 0.1338583! + Me.txtZinsen.Left = 6.753544! + Me.txtZinsen.Name = "txtZinsen" + Me.txtZinsen.Style = "color: #202020; font-size: 6.75pt; font-style: italic; text-align: right; ddo-cha" & + "r-set: 0" + Me.txtZinsen.Text = "-" + Me.txtZinsen.Top = 0! + Me.txtZinsen.Width = 0.7374014! + ' + 'txtVZ + ' + Me.txtVZ.Height = 0.1338583! + Me.txtVZ.Left = 5.936615! + Me.txtVZ.Name = "txtVZ" + Me.txtVZ.Style = "color: #202020; font-size: 6.75pt; font-style: italic; text-align: center; ddo-ch" & + "ar-set: 0" + Me.txtVZ.Text = "-" + Me.txtVZ.Top = 0! + Me.txtVZ.Width = 0.7492127! + ' + 'txtFaellig + ' + Me.txtFaellig.Height = 0.1338583! + Me.txtFaellig.Left = 1.920472! + Me.txtFaellig.Name = "txtFaellig" + Me.txtFaellig.Style = "color: #202020; font-size: 6.75pt; font-style: italic; text-align: left; ddo-char" & + "-set: 0" + Me.txtFaellig.Text = "-" + Me.txtFaellig.Top = 0! + Me.txtFaellig.Width = 0.7220473! + ' + 'PageFooter + ' + Me.PageFooter.Controls.AddRange(New GrapeCity.ActiveReports.SectionReportModel.ARControl() {Me.Line2, Me.ReportInfo2}) + Me.PageFooter.Height = 0.2503937! + Me.PageFooter.Name = "PageFooter" + ' + 'Line2 + ' + Me.Line2.Height = 0! + Me.Line2.Left = 0! + Me.Line2.LineWeight = 1.0! + Me.Line2.Name = "Line2" + Me.Line2.Top = 0.07401575! + Me.Line2.Width = 7.480313! + Me.Line2.X1 = 0! + Me.Line2.X2 = 7.480313! + Me.Line2.Y1 = 0.07401575! + Me.Line2.Y2 = 0.07401575! + ' + 'ReportInfo2 + ' + Me.ReportInfo2.FormatString = "Seite {PageNumber} von {PageCount} Seiten " + Me.ReportInfo2.Height = 0.1330709! + Me.ReportInfo2.Left = 5.480315! + Me.ReportInfo2.Name = "ReportInfo2" + Me.ReportInfo2.Style = "font-size: 8pt; text-align: right" + Me.ReportInfo2.Top = 0.1173228! + Me.ReportInfo2.Width = 1.994928! + ' + 'ReportHeader1 + ' + Me.ReportHeader1.Controls.AddRange(New GrapeCity.ActiveReports.SectionReportModel.ARControl() {Me.lblRgDatum, Me.txtKunde, Me.Label16, Me.Picture1, Me.picVERAG, Me.lblUeberschriftRG_GS, Me.Line3, Me.lblFirmaOrt, Me.lblFirmaStrasse, Me.lblFirmaTel, Me.lblFirmaFax, Me.lblFirmaEmail, Me.lblFirmaWeb, Me.Label18, Me.Label1, Me.TextBox1, Me.Label2, Me.Label3, Me.Label4, Me.lblHeader}) + Me.ReportHeader1.Height = 1.405906! + Me.ReportHeader1.Name = "ReportHeader1" + ' + 'lblRgDatum + ' + Me.lblRgDatum.Height = 0.1574803! + Me.lblRgDatum.HyperLink = Nothing + Me.lblRgDatum.Left = 6.674016! + Me.lblRgDatum.Name = "lblRgDatum" + Me.lblRgDatum.Style = "font-size: 8pt; font-weight: bold; text-align: right; vertical-align: middle; ddo" & + "-char-set: 1" + Me.lblRgDatum.Text = "01.01.2019" + Me.lblRgDatum.Top = 0.6716536! + Me.lblRgDatum.Width = 0.7921257! + ' + 'txtKunde + ' + Me.txtKunde.Height = 0.1574802! + Me.txtKunde.HyperLink = Nothing + Me.txtKunde.Left = 5.111811! + Me.txtKunde.Name = "txtKunde" + Me.txtKunde.Style = "font-size: 8pt; font-weight: bold; text-align: right; vertical-align: middle; ddo" & + "-char-set: 1" + Me.txtKunde.Text = "1000000 TEST" + Me.txtKunde.Top = 0.8291339! + Me.txtKunde.Width = 2.354331! + ' + 'Label16 + ' + Me.Label16.Height = 0.1574803! + Me.Label16.HyperLink = Nothing + Me.Label16.Left = 4.304331! + Me.Label16.Name = "Label16" + Me.Label16.Style = "font-size: 8pt; font-weight: normal; text-align: left; vertical-align: middle; dd" & + "o-char-set: 1" + Me.Label16.Text = "Kunde:" + Me.Label16.Top = 0.8291339! + Me.Label16.Width = 0.8114175! + ' + 'Picture1 + ' + Me.Picture1.Height = 0.6102362! + Me.Picture1.HyperLink = Nothing + Me.Picture1.ImageBase64String = resources.GetString("Picture1.ImageBase64String") + Me.Picture1.Left = 3.244882! + Me.Picture1.Name = "Picture1" + Me.Picture1.SizeMode = GrapeCity.ActiveReports.SectionReportModel.SizeModes.Zoom + Me.Picture1.Top = 0! + Me.Picture1.Visible = False + Me.Picture1.Width = 1.059449! + ' + 'picVERAG + ' + Me.picVERAG.Height = 0.4169292! + Me.picVERAG.HyperLink = Nothing + Me.picVERAG.ImageBase64String = resources.GetString("picVERAG.ImageBase64String") + Me.picVERAG.Left = 0.01023622! + Me.picVERAG.Name = "picVERAG" + Me.picVERAG.SizeMode = GrapeCity.ActiveReports.SectionReportModel.SizeModes.Zoom + Me.picVERAG.Top = 0.1220473! + Me.picVERAG.Width = 2.198425! + ' + 'lblUeberschriftRG_GS + ' + Me.lblUeberschriftRG_GS.Height = 0.2311024! + Me.lblUeberschriftRG_GS.HyperLink = Nothing + Me.lblUeberschriftRG_GS.Left = 4.500394! + Me.lblUeberschriftRG_GS.Name = "lblUeberschriftRG_GS" + Me.lblUeberschriftRG_GS.Style = "font-size: 12pt; font-weight: bold; text-align: right; ddo-char-set: 1" + Me.lblUeberschriftRG_GS.Text = "Anlage zur Sammelrechnung" + Me.lblUeberschriftRG_GS.Top = 0.3870079! + Me.lblUeberschriftRG_GS.Width = 2.969686! + ' + 'Line3 + ' + Me.Line3.Height = 0! + Me.Line3.Left = 0.002755864! + Me.Line3.LineColor = System.Drawing.Color.DimGray + Me.Line3.LineWeight = 1.0! + Me.Line3.Name = "Line3" + Me.Line3.Top = 0.6102362! + Me.Line3.Width = 7.475196! + Me.Line3.X1 = 0.002755864! + Me.Line3.X2 = 7.477952! + Me.Line3.Y1 = 0.6102362! + Me.Line3.Y2 = 0.6102362! + ' + 'lblFirmaOrt + ' + Me.lblFirmaOrt.Height = 0.1181102! + Me.lblFirmaOrt.HyperLink = Nothing + Me.lblFirmaOrt.Left = 0.01417317! + Me.lblFirmaOrt.Name = "lblFirmaOrt" + Me.lblFirmaOrt.Style = "font-size: 7pt; font-weight: normal; text-align: left; vertical-align: middle; dd" & + "o-char-set: 1" + Me.lblFirmaOrt.Text = "A-4975 Suben" + Me.lblFirmaOrt.Top = 0.7503937! + Me.lblFirmaOrt.Width = 1.19685! + ' + 'lblFirmaStrasse + ' + Me.lblFirmaStrasse.Height = 0.1181102! + Me.lblFirmaStrasse.HyperLink = Nothing + Me.lblFirmaStrasse.Left = 0.01417319! + Me.lblFirmaStrasse.Name = "lblFirmaStrasse" + Me.lblFirmaStrasse.Style = "font-size: 7pt; font-weight: normal; text-align: left; vertical-align: middle; dd" & + "o-char-set: 1" + Me.lblFirmaStrasse.Text = "Suben Nr. 100" + Me.lblFirmaStrasse.Top = 0.8685039! + Me.lblFirmaStrasse.Width = 1.19685! + ' + 'lblFirmaTel + ' + Me.lblFirmaTel.Height = 0.1181103! + Me.lblFirmaTel.HyperLink = Nothing + Me.lblFirmaTel.Left = 1.211024! + Me.lblFirmaTel.Name = "lblFirmaTel" + Me.lblFirmaTel.Style = "font-size: 7pt; font-weight: normal; text-align: left; vertical-align: middle; dd" & + "o-char-set: 1" + Me.lblFirmaTel.Text = "Tel. +43 7711 2777 - 0" + Me.lblFirmaTel.Top = 0.7503937! + Me.lblFirmaTel.Width = 1.28189! + ' + 'lblFirmaFax + ' + Me.lblFirmaFax.Height = 0.1181103! + Me.lblFirmaFax.HyperLink = Nothing + Me.lblFirmaFax.Left = 1.211024! + Me.lblFirmaFax.Name = "lblFirmaFax" + Me.lblFirmaFax.Style = "font-size: 7pt; font-weight: normal; text-align: left; vertical-align: middle; dd" & + "o-char-set: 1" + Me.lblFirmaFax.Text = "Fax +43 7711 31600" + Me.lblFirmaFax.Top = 0.868504! + Me.lblFirmaFax.Width = 1.28189! + ' + 'lblFirmaEmail + ' + Me.lblFirmaEmail.Height = 0.1181103! + Me.lblFirmaEmail.HyperLink = Nothing + Me.lblFirmaEmail.Left = 2.492913! + Me.lblFirmaEmail.Name = "lblFirmaEmail" + Me.lblFirmaEmail.Style = "font-size: 7pt; font-weight: normal; text-align: right; vertical-align: middle; d" & + "do-char-set: 1" + Me.lblFirmaEmail.Text = "s.kriegner@verag.ag" + Me.lblFirmaEmail.Top = 0.868504! + Me.lblFirmaEmail.Width = 1.436614! + ' + 'lblFirmaWeb + ' + Me.lblFirmaWeb.Height = 0.1181102! + Me.lblFirmaWeb.HyperLink = Nothing + Me.lblFirmaWeb.Left = 2.492913! + Me.lblFirmaWeb.Name = "lblFirmaWeb" + Me.lblFirmaWeb.Style = "font-size: 7pt; font-weight: normal; text-align: right; vertical-align: middle; d" & + "do-char-set: 1" + Me.lblFirmaWeb.Text = "www.verag.ag" + Me.lblFirmaWeb.Top = 0.7503937! + Me.lblFirmaWeb.Width = 1.436614! + ' + 'Label18 + ' + Me.Label18.Height = 0.1574803! + Me.Label18.HyperLink = Nothing + Me.Label18.Left = 6.237402! + Me.Label18.Name = "Label18" + Me.Label18.Style = "font-size: 8pt; font-weight: normal; text-align: left; vertical-align: middle; dd" & + "o-char-set: 1" + Me.Label18.Text = "Datum:" + Me.Label18.Top = 0.6716536! + Me.Label18.Width = 0.436614! + ' + 'Label1 + ' + Me.Label1.Height = 0.2311024! + Me.Label1.HyperLink = Nothing + Me.Label1.Left = 4.496457! + Me.Label1.Name = "Label1" + Me.Label1.Style = "font-size: 12pt; font-weight: bold; text-align: right; ddo-char-set: 1" + Me.Label1.Text = "-" + Me.Label1.Top = 0.0523622! + Me.Label1.Width = 2.969686! + ' + 'TextBox1 + ' + Me.TextBox1.Height = 0.1574803! + Me.TextBox1.Left = 5.0! + Me.TextBox1.Name = "TextBox1" + Me.TextBox1.Style = "font-size: 8pt; font-weight: bold; text-align: right; vertical-align: middle; ddo" & + "-char-set: 1" + Me.TextBox1.Text = "1000000" + Me.TextBox1.Top = 0.9866142! + Me.TextBox1.Width = 0.8688979! + ' + 'Label2 + ' + Me.Label2.Height = 0.1574803! + Me.Label2.HyperLink = Nothing + Me.Label2.Left = 4.304331! + Me.Label2.Name = "Label2" + Me.Label2.Style = "font-size: 8pt; font-weight: normal; text-align: left; vertical-align: middle; dd" & + "o-char-set: 1" + Me.Label2.Text = "Partner-Kunden-Nr:" + Me.Label2.Top = 0.9866142! + Me.Label2.Width = 1.020079! + ' + 'Label3 + ' + Me.Label3.Height = 0.1574803! + Me.Label3.HyperLink = Nothing + Me.Label3.Left = 5.983465! + Me.Label3.Name = "Label3" + Me.Label3.Style = "font-size: 8pt; font-weight: normal; text-align: left; vertical-align: middle; dd" & + "o-char-set: 1" + Me.Label3.Text = "Zeitraum bis:" + Me.Label3.Top = 0.9866142! + Me.Label3.Width = 0.6905512! + ' + 'Label4 + ' + Me.Label4.Height = 0.1574803! + Me.Label4.HyperLink = Nothing + Me.Label4.Left = 6.670079! + Me.Label4.Name = "Label4" + Me.Label4.Style = "font-size: 8pt; font-weight: bold; text-align: right; vertical-align: middle; ddo" & + "-char-set: 1" + Me.Label4.Text = "01.01.2019" + Me.Label4.Top = 0.9866142! + Me.Label4.Width = 0.7960634! + ' + 'lblHeader + ' + Me.lblHeader.Height = 0.2094488! + Me.lblHeader.HyperLink = Nothing + Me.lblHeader.Left = 0! + Me.lblHeader.Name = "lblHeader" + Me.lblHeader.Padding = New GrapeCity.ActiveReports.PaddingEx(6, 0, 0, 0) + Me.lblHeader.Style = "background-color: #003680; color: White; font-size: 10pt; font-weight: bold; text" & + "-align: left; text-justify: auto; vertical-align: middle; ddo-char-set: 1" + Me.lblHeader.Text = "VERZUGSZINSEN" + Me.lblHeader.Top = 1.196457! + Me.lblHeader.Width = 7.466146! + ' + 'ReportFooter1 + ' + Me.ReportFooter1.Controls.AddRange(New GrapeCity.ActiveReports.SectionReportModel.ARControl() {Me.txtBruttoGesSum, Me.lblGessumme, Me.Line7, Me.Line8}) + Me.ReportFooter1.Height = 0.6578248! + Me.ReportFooter1.KeepTogether = True + Me.ReportFooter1.Name = "ReportFooter1" + ' + 'txtBruttoGesSum + ' + Me.txtBruttoGesSum.Height = 0.1417323! + Me.txtBruttoGesSum.HyperLink = Nothing + Me.txtBruttoGesSum.Left = 6.563386! + Me.txtBruttoGesSum.Name = "txtBruttoGesSum" + Me.txtBruttoGesSum.Style = "font-size: 8pt; font-weight: bold; text-align: right; ddo-char-set: 1" + Me.txtBruttoGesSum.Text = "Betrag" + Me.txtBruttoGesSum.Top = 0.1098426! + Me.txtBruttoGesSum.Width = 0.9169284! + ' + 'lblGessumme + ' + Me.lblGessumme.Height = 0.1417323! + Me.lblGessumme.HyperLink = Nothing + Me.lblGessumme.Left = 3.244878! + Me.lblGessumme.Name = "lblGessumme" + Me.lblGessumme.Style = "font-size: 8pt; font-weight: bold; text-align: right; ddo-char-set: 1; ddo-font-v" & + "ertical: none" + Me.lblGessumme.Text = "Gesamtsumme:" + Me.lblGessumme.Top = 0.1098426! + Me.lblGessumme.Width = 1.484645! + ' + 'Line7 + ' + Me.Line7.Height = 0! + Me.Line7.Left = 0.002752304! + Me.Line7.LineWeight = 2.0! + Me.Line7.Name = "Line7" + Me.Line7.Top = 0! + Me.Line7.Width = 7.475196! + Me.Line7.X1 = 0.002752304! + Me.Line7.X2 = 7.477948! + Me.Line7.Y1 = 0! + Me.Line7.Y2 = 0! + ' + 'Line8 + ' + Me.Line8.Height = 0! + Me.Line8.Left = 0.002752304! + Me.Line8.LineWeight = 2.0! + Me.Line8.Name = "Line8" + Me.Line8.Top = 0.03543304! + Me.Line8.Width = 7.475196! + Me.Line8.X1 = 0.002752304! + Me.Line8.X2 = 7.477948! + Me.Line8.Y1 = 0.03543304! + Me.Line8.Y2 = 0.03543304! + ' + 'rptPOS_ZNB + ' + Me.MasterReport = False + Me.PageSettings.Margins.Bottom = 0.3937008! + Me.PageSettings.Margins.Left = 0.3937008! + Me.PageSettings.Margins.Right = 0.3937008! + Me.PageSettings.Margins.Top = 0.3937008! + Me.PageSettings.PaperHeight = 11.0! + Me.PageSettings.PaperWidth = 8.5! + Me.PrintWidth = 7.490945! + Me.Sections.Add(Me.ReportHeader1) + Me.Sections.Add(Me.PageHeader) + Me.Sections.Add(Me.Detail) + Me.Sections.Add(Me.PageFooter) + Me.Sections.Add(Me.ReportFooter1) + Me.StyleSheet.Add(New DDCssLib.StyleSheetRule("font-family: Arial; font-style: normal; text-decoration: none; font-weight: norma" & + "l; font-size: 10pt; color: Black; ddo-char-set: 204", "Normal")) + Me.StyleSheet.Add(New DDCssLib.StyleSheetRule("font-size: 16pt; font-weight: bold", "Heading1", "Normal")) + Me.StyleSheet.Add(New DDCssLib.StyleSheetRule("font-family: Times New Roman; font-size: 14pt; font-weight: bold; font-style: ita" & + "lic", "Heading2", "Normal")) + Me.StyleSheet.Add(New DDCssLib.StyleSheetRule("font-size: 13pt; font-weight: bold", "Heading3", "Normal")) + CType(Me.lblReNr, System.ComponentModel.ISupportInitialize).EndInit() + CType(Me.lblReDat, System.ComponentModel.ISupportInitialize).EndInit() + CType(Me.lblReBetrag, System.ComponentModel.ISupportInitialize).EndInit() + CType(Me.lblZahlungsdat, System.ComponentModel.ISupportInitialize).EndInit() + CType(Me.lblTage, System.ComponentModel.ISupportInitialize).EndInit() + CType(Me.lblZinsen, System.ComponentModel.ISupportInitialize).EndInit() + CType(Me.lblVZ, System.ComponentModel.ISupportInitialize).EndInit() + CType(Me.Label5, System.ComponentModel.ISupportInitialize).EndInit() + CType(Me.txt_Anmerkung, System.ComponentModel.ISupportInitialize).EndInit() + CType(Me.txtREnr, System.ComponentModel.ISupportInitialize).EndInit() + CType(Me.txtReDat, System.ComponentModel.ISupportInitialize).EndInit() + CType(Me.txtZE, System.ComponentModel.ISupportInitialize).EndInit() + CType(Me.txtReBetrag, System.ComponentModel.ISupportInitialize).EndInit() + CType(Me.txtTage, System.ComponentModel.ISupportInitialize).EndInit() + CType(Me.txtZinsen, System.ComponentModel.ISupportInitialize).EndInit() + CType(Me.txtVZ, System.ComponentModel.ISupportInitialize).EndInit() + CType(Me.txtFaellig, System.ComponentModel.ISupportInitialize).EndInit() + CType(Me.ReportInfo2, System.ComponentModel.ISupportInitialize).EndInit() + CType(Me.lblRgDatum, System.ComponentModel.ISupportInitialize).EndInit() + CType(Me.txtKunde, System.ComponentModel.ISupportInitialize).EndInit() + CType(Me.Label16, System.ComponentModel.ISupportInitialize).EndInit() + CType(Me.Picture1, System.ComponentModel.ISupportInitialize).EndInit() + CType(Me.picVERAG, System.ComponentModel.ISupportInitialize).EndInit() + CType(Me.lblUeberschriftRG_GS, System.ComponentModel.ISupportInitialize).EndInit() + CType(Me.lblFirmaOrt, System.ComponentModel.ISupportInitialize).EndInit() + CType(Me.lblFirmaStrasse, System.ComponentModel.ISupportInitialize).EndInit() + CType(Me.lblFirmaTel, System.ComponentModel.ISupportInitialize).EndInit() + CType(Me.lblFirmaFax, System.ComponentModel.ISupportInitialize).EndInit() + CType(Me.lblFirmaEmail, System.ComponentModel.ISupportInitialize).EndInit() + CType(Me.lblFirmaWeb, System.ComponentModel.ISupportInitialize).EndInit() + CType(Me.Label18, System.ComponentModel.ISupportInitialize).EndInit() + CType(Me.Label1, System.ComponentModel.ISupportInitialize).EndInit() + CType(Me.TextBox1, System.ComponentModel.ISupportInitialize).EndInit() + CType(Me.Label2, System.ComponentModel.ISupportInitialize).EndInit() + CType(Me.Label3, System.ComponentModel.ISupportInitialize).EndInit() + CType(Me.Label4, System.ComponentModel.ISupportInitialize).EndInit() + CType(Me.lblHeader, System.ComponentModel.ISupportInitialize).EndInit() + CType(Me.txtBruttoGesSum, System.ComponentModel.ISupportInitialize).EndInit() + CType(Me.lblGessumme, System.ComponentModel.ISupportInitialize).EndInit() + CType(Me, System.ComponentModel.ISupportInitialize).EndInit() + + End Sub + Private WithEvents ReportHeader1 As GrapeCity.ActiveReports.SectionReportModel.ReportHeader + Private WithEvents Line2 As GrapeCity.ActiveReports.SectionReportModel.Line + Public WithEvents Detail As GrapeCity.ActiveReports.SectionReportModel.Detail + Public WithEvents lblUeberschriftRG_GS As GrapeCity.ActiveReports.SectionReportModel.Label + Public WithEvents ReportInfo2 As GrapeCity.ActiveReports.SectionReportModel.ReportInfo + Public WithEvents ReportFooter1 As GrapeCity.ActiveReports.SectionReportModel.ReportFooter + Private WithEvents Line3 As GrapeCity.ActiveReports.SectionReportModel.Line + Private WithEvents Label18 As GrapeCity.ActiveReports.SectionReportModel.Label + Public WithEvents txtKunde As GrapeCity.ActiveReports.SectionReportModel.TextBox + Public WithEvents lblRgDatum As GrapeCity.ActiveReports.SectionReportModel.Label + Public WithEvents Picture1 As GrapeCity.ActiveReports.SectionReportModel.Picture + Public WithEvents picVERAG As GrapeCity.ActiveReports.SectionReportModel.Picture + Public WithEvents lblFirmaOrt As GrapeCity.ActiveReports.SectionReportModel.Label + Public WithEvents lblFirmaStrasse As GrapeCity.ActiveReports.SectionReportModel.Label + Public WithEvents lblFirmaTel As GrapeCity.ActiveReports.SectionReportModel.Label + Public WithEvents lblFirmaFax As GrapeCity.ActiveReports.SectionReportModel.Label + Public WithEvents lblFirmaEmail As GrapeCity.ActiveReports.SectionReportModel.Label + Public WithEvents lblFirmaWeb As GrapeCity.ActiveReports.SectionReportModel.Label + Public WithEvents Label16 As GrapeCity.ActiveReports.SectionReportModel.Label + Private WithEvents Line7 As GrapeCity.ActiveReports.SectionReportModel.Line + Private WithEvents Line8 As GrapeCity.ActiveReports.SectionReportModel.Line + Public WithEvents txtBruttoGesSum As GrapeCity.ActiveReports.SectionReportModel.Label + Public WithEvents lblGessumme As GrapeCity.ActiveReports.SectionReportModel.Label + Public WithEvents Label1 As GrapeCity.ActiveReports.SectionReportModel.Label + Public WithEvents TextBox1 As GrapeCity.ActiveReports.SectionReportModel.TextBox + Public WithEvents Label2 As GrapeCity.ActiveReports.SectionReportModel.Label + Public WithEvents Label3 As GrapeCity.ActiveReports.SectionReportModel.Label + Public WithEvents Label4 As GrapeCity.ActiveReports.SectionReportModel.Label + Public WithEvents lblHeader As GrapeCity.ActiveReports.SectionReportModel.Label + Private WithEvents lblReNr As GrapeCity.ActiveReports.SectionReportModel.Label + Private WithEvents lblReDat As GrapeCity.ActiveReports.SectionReportModel.Label + Private WithEvents lblReBetrag As GrapeCity.ActiveReports.SectionReportModel.Label + Private WithEvents lblZahlungsdat As GrapeCity.ActiveReports.SectionReportModel.Label + Private WithEvents lblTage As GrapeCity.ActiveReports.SectionReportModel.Label + Private WithEvents lblZinsen As GrapeCity.ActiveReports.SectionReportModel.Label + Private WithEvents lblVZ As GrapeCity.ActiveReports.SectionReportModel.Label + Private WithEvents Label5 As GrapeCity.ActiveReports.SectionReportModel.Label + Public WithEvents txt_Anmerkung As GrapeCity.ActiveReports.SectionReportModel.TextBox + Public WithEvents txtREnr As GrapeCity.ActiveReports.SectionReportModel.TextBox + Public WithEvents txtReDat As GrapeCity.ActiveReports.SectionReportModel.TextBox + Public WithEvents txtZE As GrapeCity.ActiveReports.SectionReportModel.TextBox + Public WithEvents txtReBetrag As GrapeCity.ActiveReports.SectionReportModel.TextBox + Public WithEvents txtTage As GrapeCity.ActiveReports.SectionReportModel.TextBox + Public WithEvents txtZinsen As GrapeCity.ActiveReports.SectionReportModel.TextBox + Public WithEvents txtVZ As GrapeCity.ActiveReports.SectionReportModel.TextBox + Public WithEvents txtFaellig As GrapeCity.ActiveReports.SectionReportModel.TextBox +End Class diff --git a/SDL/mdm/rptPOS_ZNB.resx b/SDL/mdm/rptPOS_ZNB.resx new file mode 100644 index 00000000..d44ec9f5 --- /dev/null +++ b/SDL/mdm/rptPOS_ZNB.resx @@ -0,0 +1,132 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + 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 + + + 0, 0 + + + 0, 0 + + \ No newline at end of file diff --git a/SDL/mdm/rptPOS_ZNB.vb b/SDL/mdm/rptPOS_ZNB.vb new file mode 100644 index 00000000..f909f366 --- /dev/null +++ b/SDL/mdm/rptPOS_ZNB.vb @@ -0,0 +1,120 @@ +Imports GrapeCity.ActiveReports +Imports GrapeCity.ActiveReports.Document + +Public Class rptPOS_ZNB + + Dim RECHNUNG As VERAG_PROG_ALLGEMEIN.cRechnungsausgang = Nothing + Dim Betrag As Double + Dim SQL As New VERAG_PROG_ALLGEMEIN.SQL + Sub New(RECHNUNG As VERAG_PROG_ALLGEMEIN.cRechnungsausgang, Betrag As Double) + + ' Dieser Aufruf ist für den Designer erforderlich. + InitializeComponent() + Me.RECHNUNG = RECHNUNG + Me.Betrag = Betrag + ' Fügen Sie Initialisierungen nach dem InitializeComponent()-Aufruf hinzu. + End Sub + + + Private Sub Detail_Format(sender As Object, e As EventArgs) Handles Detail.Format + If Me.DataSource IsNot Nothing AndAlso Me.Fields IsNot Nothing Then + txtREnr.Text = "" + txtReDat.Text = "" + txtReBetrag.Text = "" + + txtZE.Text = "" + txtTage.Text = "" + txtZinsen.Text = "" + txtVZ.Text = "" + txtFaellig.Text = "" + txt_Anmerkung.Text = "" + + If Me.Fields.Item("clmnReNr") IsNot Nothing AndAlso Me.Fields.Item("clmnReNr").Value IsNot Nothing Then txtREnr.Text &= Me.Fields.Item("clmnReNr").Value.ToString + If Me.Fields.Item("clmnReDatum") IsNot Nothing AndAlso Me.Fields.Item("clmnReDatum").Value IsNot Nothing AndAlso IsDate(Me.Fields.Item("clmnReDatum").Value) Then txtReDat.Text &= CDate(Me.Fields.Item("clmnReDatum").Value).ToShortDateString + If Me.Fields.Item("clmnReBetrag") IsNot Nothing AndAlso Me.Fields.Item("clmnReBetrag").Value IsNot Nothing AndAlso IsNumeric(Me.Fields.Item("clmnReBetrag").Value) AndAlso CDbl(Me.Fields.Item("clmnReBetrag").Value) <> 0 Then txtReBetrag.Text &= Math.Abs(CDbl(Me.Fields.Item("clmnReBetrag").Value)).ToString("N2") + If Me.Fields.Item("clmnFaellig") IsNot Nothing AndAlso Me.Fields.Item("clmnFaellig").Value IsNot Nothing AndAlso IsDate(Me.Fields.Item("clmnFaellig").Value) Then txtFaellig.Text &= CDate(Me.Fields.Item("clmnFaellig").Value).ToShortDateString + If Me.Fields.Item("clmnZE") IsNot Nothing AndAlso Me.Fields.Item("clmnZE").Value IsNot Nothing Then + If IsDate(Me.Fields.Item("clmnZE").Value) Then + txtZE.Text &= CDate(Me.Fields.Item("clmnZE").Value).ToShortDateString + txt_Anmerkung.Visible = False + txtZE.Visible = True + txtFaellig.Visible = True + txtTage.Visible = True + txtReBetrag.Visible = True + Else + txt_Anmerkung.Text &= Me.Fields.Item("clmnZE").Value + txt_Anmerkung.Visible = True + txtZE.Visible = False + txtFaellig.Visible = False + txtTage.Visible = False + txtReBetrag.Visible = False + End If + End If + If Me.Fields.Item("clmnTage") IsNot Nothing AndAlso Me.Fields.Item("clmnTage").Value IsNot Nothing Then txtTage.Text &= Me.Fields.Item("clmnTage").Value.ToString + If Me.Fields.Item("clmnZinsen") IsNot Nothing AndAlso Me.Fields.Item("clmnZinsen").Value IsNot Nothing AndAlso IsNumeric(Me.Fields.Item("clmnZinsen").Value) AndAlso CDbl(Me.Fields.Item("clmnZinsen").Value) <> 0 Then txtZinsen.Text &= CDbl(Me.Fields.Item("clmnZinsen").Value).ToString("N2") + If Me.Fields.Item("clmnVZ") IsNot Nothing AndAlso Me.Fields.Item("clmnVZ").Value IsNot Nothing AndAlso IsNumeric(Me.Fields.Item("clmnVZ").Value) Then txtVZ.Text &= Me.Fields.Item("clmnVZ").Value.ToString() & "%" + + End If + End Sub + + + Private Sub rptAuswertung_ReportStart(sender As System.Object, e As System.EventArgs) Handles MyBase.ReportStart + + + Dim dt As New DataTable + dt.Columns.Add("clmnID") + dt.Columns.Add("clmnReNr") + dt.Columns.Add("clmnReDatum") + dt.Columns.Add("clmnAbfNr") + dt.Columns.Add("clmnReBetrag") + dt.Columns.Add("clmnZE") + dt.Columns.Add("clmnTage") + dt.Columns.Add("clmnZinsen") + dt.Columns.Add("clmnVZ") + dt.Columns.Add("clmnFaellig") + + + If Betrag < 0 Then + + Dim Rabatt As String = "Rabatt" + + Select Case RECHNUNG.RechnungSprache + Case "EN" : Rabatt = "Discount" + Case "RO" : Rabatt = "Reducere" + Case "TR" : Rabatt = "İndirim" + Case Else + Rabatt = "Rabatt" + + End Select + + + dt.Rows.Add("0", Rabatt, RECHNUNG.Abfertigungsdatum.ToShortDateString, "", "", "", "", Betrag.ToString, "", "") + 'dt.Rows.Add(rg.Item("clmnID"), rg.Item("clmnReNr"), rg.Item("clmnReDatum"), rg.Item("clmnAbfNr"), rg.Item("clmnReBetrag"), rg.Item("clmnZE"), rg.Item("clmnTage"), rg.Item("clmnZinsen"), rg.Item("clmnVZ"), rg.Item("clmnFaellig")) + + Else + + + If RECHNUNG.BelegartenKz <> "AG" Then + + ' Dim dtTemp As DataTable + ' dtTemp = SQL.loadDgvBySql_Param("select [id] as clmnID,[belegNr] as clmnReNr,[buchungstext] as clmnAbfNr,[zinssatz] clmnVZ,[belegZahlungsziel],[ueberschreitungInTagen] clmnTage,[zinsbetrag] clmnZinsen,[belegDatum] as clmnReDatum,[zahlungsBetrag] as clmnReBetrag,[zahlungDatum] as clmnZE, [faelligkeitsDatum] as clmnFaellig from tblMDM_Zinsberechnung where RK_ID =" & RECHNUNG.RK_ID, "FMZOLL") + + For Each rg As DataRow In Me.DataSource.Rows + dt.Rows.Add(rg.Item("id"), rg.Item("belegNr"), rg.Item("belegDatum"), rg.Item("buchungstext"), rg.Item("zahlungsBetrag"), rg.Item("zahlungDatum"), rg.Item("ueberschreitungInTagen"), rg.Item("zinsbetrag"), rg.Item("zinssatz"), rg.Item("faelligkeitsDatum")) + Next + Else + dt.Rows.Add("0", "", RECHNUNG.Abfertigungsdatum.ToShortDateString, "", "", "", "", Betrag.ToString, "", "") + + End If + + End If + + + + Me.DataSource = dt + + End Sub + + + +End Class diff --git a/SDL/mdm/usrCntlMDMDatenverarbeitungAuswertungen_divers.Designer.vb b/SDL/mdm/usrCntlMDMDatenverarbeitungAuswertungen_divers.Designer.vb index aaf70db4..d957d703 100644 --- a/SDL/mdm/usrCntlMDMDatenverarbeitungAuswertungen_divers.Designer.vb +++ b/SDL/mdm/usrCntlMDMDatenverarbeitungAuswertungen_divers.Designer.vb @@ -1,9 +1,9 @@ - _ + Partial Class usrCntlMDMDatenverarbeitungAuswertungen_divers Inherits System.Windows.Forms.UserControl 'UserControl überschreibt den Löschvorgang, um die Komponentenliste zu bereinigen. - _ + Protected Overrides Sub Dispose(ByVal disposing As Boolean) Try If disposing AndAlso components IsNot Nothing Then @@ -20,9 +20,9 @@ Partial Class usrCntlMDMDatenverarbeitungAuswertungen_divers 'Hinweis: Die folgende Prozedur ist für den Windows Form-Designer erforderlich. 'Das Bearbeiten ist mit dem Windows Form-Designer möglich. 'Das Bearbeiten mit dem Code-Editor ist nicht möglich. - _ + Private Sub InitializeComponent() - Me.Button6 = New System.Windows.Forms.Button() + Me.Button4 = New System.Windows.Forms.Button() Me.Button1 = New System.Windows.Forms.Button() Me.cbxNurEULander = New System.Windows.Forms.CheckBox() Me.Button2 = New System.Windows.Forms.Button() @@ -30,19 +30,19 @@ Partial Class usrCntlMDMDatenverarbeitungAuswertungen_divers Me.Button3 = New System.Windows.Forms.Button() Me.SuspendLayout() ' - 'Button6 + 'Button4 ' - Me.Button6.FlatStyle = System.Windows.Forms.FlatStyle.Flat - Me.Button6.Image = Global.SDL.My.Resources.Resources.statistik_small - Me.Button6.ImageAlign = System.Drawing.ContentAlignment.MiddleLeft - Me.Button6.Location = New System.Drawing.Point(6, 3) - Me.Button6.Name = "Button6" - Me.Button6.Padding = New System.Windows.Forms.Padding(0, 0, 2, 0) - Me.Button6.Size = New System.Drawing.Size(149, 41) - Me.Button6.TabIndex = 48 - Me.Button6.Text = "Auswertung IT Maut " & Global.Microsoft.VisualBasic.ChrW(13) & Global.Microsoft.VisualBasic.ChrW(10) & "(Konsortium)" - Me.Button6.TextAlign = System.Drawing.ContentAlignment.MiddleRight - Me.Button6.UseVisualStyleBackColor = True + Me.Button4.FlatStyle = System.Windows.Forms.FlatStyle.Flat + Me.Button4.Image = Global.SDL.My.Resources.Resources.statistik_small + Me.Button4.ImageAlign = System.Drawing.ContentAlignment.MiddleLeft + Me.Button4.Location = New System.Drawing.Point(6, 3) + Me.Button4.Name = "Button4" + Me.Button4.Padding = New System.Windows.Forms.Padding(0, 0, 2, 0) + Me.Button4.Size = New System.Drawing.Size(149, 41) + Me.Button4.TabIndex = 48 + Me.Button4.Text = "Auswertung IT Maut " & Global.Microsoft.VisualBasic.ChrW(13) & Global.Microsoft.VisualBasic.ChrW(10) & "(Konsortium)" + Me.Button4.TextAlign = System.Drawing.ContentAlignment.MiddleRight + Me.Button4.UseVisualStyleBackColor = True ' 'Button1 ' @@ -120,15 +120,15 @@ Partial Class usrCntlMDMDatenverarbeitungAuswertungen_divers Me.Controls.Add(Me.Button2) Me.Controls.Add(Me.cbxNurEULander) Me.Controls.Add(Me.Button1) - Me.Controls.Add(Me.Button6) + Me.Controls.Add(Me.Button4) Me.Name = "usrCntlMDMDatenverarbeitungAuswertungen_divers" - Me.Size = New System.Drawing.Size(295, 104) + Me.Size = New System.Drawing.Size(295, 114) Me.ResumeLayout(False) Me.PerformLayout() End Sub - Friend WithEvents Button6 As Button + Friend WithEvents Button4 As Button Friend WithEvents Button1 As Button Friend WithEvents cbxNurEULander As CheckBox Friend WithEvents Button2 As Button diff --git a/SDL/mdm/usrCntlMDMDatenverarbeitungAuswertungen_divers.vb b/SDL/mdm/usrCntlMDMDatenverarbeitungAuswertungen_divers.vb index 736f032c..9dc1ee18 100644 --- a/SDL/mdm/usrCntlMDMDatenverarbeitungAuswertungen_divers.vb +++ b/SDL/mdm/usrCntlMDMDatenverarbeitungAuswertungen_divers.vb @@ -27,41 +27,81 @@ Public Class usrCntlMDMDatenverarbeitungAuswertungen_divers Sub init() + Button1.Visible = True + Button2.Visible = True + Button3.Visible = True + Button4.Visible = True + + Select Case Lieferant Case "PLOSE" - Button6.Text = "Auswertung IT Maut (Konsortium)" - Button2.Text = "Auswert. Kunden (Konsortium)" - Button1.Text = "Auswertung nach Länder EU Kunden" + + Button1.Text = "nach Länder EU Kunden" + Button1.Image = My.Resources.statistik_small Button1.Visible = False + + Button2.Text = "Kunden (Konsortium)" + Button2.Image = My.Resources.statistik_small + + Button3.Visible = False + + Button4.Text = "IT Maut (Konsortium)" + Button4.Image = My.Resources.statistik_small + cbxConsFakt.Visible = True cbxNurEULander.Visible = True - Case "UTA" + Case "UTA" 'alles excel + + Button4.Text = "fehl. KdNr" + Button4.Image = My.Resources.Excel_logo + + Button2.Text = "fehl. Fakt-warenart" + Button2.Image = My.Resources.Excel_logo + + + + Button1.Text = "fehl Offertenpos." + Button1.Image = My.Resources.Excel_logo + - Button6.Text = "fehlende KdNr" - Button2.Text = "fehlende Fakt.warenart" - Button1.Text = "fehlende Offertenpos." Button3.Text = "Vergleich Bericht" - Button3.Visible = True + Button3.Image = My.Resources.Excel_logo - Case "MSE" - Button6.Text = "Nach Spezifikation" - Button2.Text = "Leistungsnummern" + Case "MSE" 'alles excel + Button1.Text = "Kunden" - Button3.Text = "fehlende Transakt." - Button3.Visible = True + Button1.Image = My.Resources.Excel_logo + + Button2.Text = "Leistung-Nr." + Button2.Image = My.Resources.Excel_logo + + Button3.Text = "fehl. Transakt." + Button3.Image = My.Resources.Excel_logo + + Button4.Text = "Nach Spezifikation" + Button4.Image = My.Resources.Excel_logo + + + + + Case "IDS" 'alles excel - Case "IDS" - Button2.Visible = False - Button6.Visible = True - Button2.Text = "Nach Spezifikation" - Button6.Text = "fehl. Offerten" Button1.Text = "Kunden" + Button1.Image = My.Resources.Excel_logo + + Button2.Text = "fehl. Stationen AT" + Button2.Image = My.Resources.Excel_logo + Button3.Text = "Ländercodes" - Button3.Visible = True + Button3.Image = My.Resources.Excel_logo + + Button4.Text = "fehl. Offerten" + Button4.Image = My.Resources.Excel_logo + Case Else @@ -87,7 +127,7 @@ Public Class usrCntlMDMDatenverarbeitungAuswertungen_divers End Function - Private Sub Button6_Click(sender As Object, e As EventArgs) Handles Button6.Click + Private Sub Button6_Click(sender As Object, e As EventArgs) Handles Button4.Click Select Case Lieferant @@ -154,6 +194,9 @@ Public Class usrCntlMDMDatenverarbeitungAuswertungen_divers Case "MSE" genMSEBericht("LENR") + Case "IDS" + genIDSBericht("STATIONEN_AT") + End Select @@ -608,6 +651,14 @@ Public Class usrCntlMDMDatenverarbeitungAuswertungen_divers ORDER BY tblIDSTransactionsNew.[CustomerCode];" + + Case "STATIONEN_AT" + + sqlstr = "select tblIDSTransactionsNew.OutletCode, tblIDSTransactionsNew.OutletCountry, tblIDSTransactionsNew.OutletName + from tblIDSTransactionsNew where cast(tblIDSTransactionsNew.YearMonthDay As Date) = '" & MAIN.DateTimePicker2.Text & "' and OutletCountry = 'Austria' and tblIDSTransactionsNew.OutletCode not in (select tbl_IDS_Stationen.OutletCode from tbl_IDS_Stationen) + group by tblIDSTransactionsNew.OutletCode, tblIDSTransactionsNew.OutletCountry, tblIDSTransactionsNew.OutletName " + + Case "OFFERTEN" Dim dtKunden = SQL.loadDgvBySql("Select distinct(tblIDSTransactionsNew.KdNrVERAG) from tblIDSTransactionsNew where cast(tblIDSTransactionsNew.YearMonthDay As Date) = '" & MAIN.DateTimePicker2.Text & "'", "FMZOLL") diff --git a/SDL/seriendruck/usrCntlFakturierung.Designer.vb b/SDL/seriendruck/usrCntlFakturierung.Designer.vb index 565cfdc7..906be5f9 100644 --- a/SDL/seriendruck/usrCntlFakturierung.Designer.vb +++ b/SDL/seriendruck/usrCntlFakturierung.Designer.vb @@ -25,9 +25,9 @@ Partial Class usrcntlFakturierung Me.components = New System.ComponentModel.Container() Dim resources As System.ComponentModel.ComponentResourceManager = New System.ComponentModel.ComponentResourceManager(GetType(usrcntlFakturierung)) Me.gb_fakturierung = New System.Windows.Forms.GroupBox() - Me.btnLieferantenrechnungen = New System.Windows.Forms.Button() Me.btnMDMSammelrechnung = New System.Windows.Forms.Button() Me.btnFakturierung = New System.Windows.Forms.Button() + Me.btnLieferantenrechnungen = New System.Windows.Forms.Button() Me.btnRechnugnsdaten = New System.Windows.Forms.Button() Me.Label3 = New System.Windows.Forms.Label() Me.Label61 = New System.Windows.Forms.Label() @@ -107,6 +107,8 @@ Partial Class usrcntlFakturierung Me.btnWikiStatusmails = New System.Windows.Forms.Button() Me.gb_MDM_Rechnungen = New System.Windows.Forms.GroupBox() Me.Label14 = New System.Windows.Forms.Label() + Me.PictureBox13 = New System.Windows.Forms.PictureBox() + Me.Label15 = New System.Windows.Forms.Label() Me.gb_fakturierung.SuspendLayout() Me.GBMautberichte.SuspendLayout() CType(Me.dgvMautbericht, System.ComponentModel.ISupportInitialize).BeginInit() @@ -124,6 +126,7 @@ Partial Class usrcntlFakturierung CType(Me.PictureBox2, System.ComponentModel.ISupportInitialize).BeginInit() CType(Me.PictureBox1, System.ComponentModel.ISupportInitialize).BeginInit() Me.gb_MDM_Rechnungen.SuspendLayout() + CType(Me.PictureBox13, System.ComponentModel.ISupportInitialize).BeginInit() Me.SuspendLayout() ' 'gb_fakturierung @@ -136,18 +139,6 @@ Partial Class usrcntlFakturierung Me.gb_fakturierung.TabIndex = 0 Me.gb_fakturierung.TabStop = False ' - 'btnLieferantenrechnungen - ' - Me.btnLieferantenrechnungen.Enabled = False - Me.btnLieferantenrechnungen.FlatStyle = System.Windows.Forms.FlatStyle.Flat - Me.btnLieferantenrechnungen.ForeColor = System.Drawing.Color.Black - Me.btnLieferantenrechnungen.Location = New System.Drawing.Point(230, 16) - Me.btnLieferantenrechnungen.Name = "btnLieferantenrechnungen" - Me.btnLieferantenrechnungen.Size = New System.Drawing.Size(175, 44) - Me.btnLieferantenrechnungen.TabIndex = 52 - Me.btnLieferantenrechnungen.Text = "MDM Lieferantenrechnungen" - Me.btnLieferantenrechnungen.UseVisualStyleBackColor = True - ' 'btnMDMSammelrechnung ' Me.btnMDMSammelrechnung.Enabled = False @@ -172,6 +163,18 @@ Partial Class usrcntlFakturierung Me.btnFakturierung.Text = "Fakturierung" Me.btnFakturierung.UseVisualStyleBackColor = True ' + 'btnLieferantenrechnungen + ' + Me.btnLieferantenrechnungen.Enabled = False + Me.btnLieferantenrechnungen.FlatStyle = System.Windows.Forms.FlatStyle.Flat + Me.btnLieferantenrechnungen.ForeColor = System.Drawing.Color.Black + Me.btnLieferantenrechnungen.Location = New System.Drawing.Point(230, 16) + Me.btnLieferantenrechnungen.Name = "btnLieferantenrechnungen" + Me.btnLieferantenrechnungen.Size = New System.Drawing.Size(175, 44) + Me.btnLieferantenrechnungen.TabIndex = 52 + Me.btnLieferantenrechnungen.Text = "MDM Lieferantenrechnungen" + Me.btnLieferantenrechnungen.UseVisualStyleBackColor = True + ' 'btnRechnugnsdaten ' Me.btnRechnugnsdaten.Enabled = False @@ -352,6 +355,8 @@ Partial Class usrcntlFakturierung ' 'GBSammelrechnung ' + Me.GBSammelrechnung.Controls.Add(Me.PictureBox13) + Me.GBSammelrechnung.Controls.Add(Me.Label15) Me.GBSammelrechnung.Controls.Add(Me.PictureBox12) Me.GBSammelrechnung.Controls.Add(Me.Label13) Me.GBSammelrechnung.Controls.Add(Me.PictureBox11) @@ -535,7 +540,7 @@ Partial Class usrcntlFakturierung ' 'Label8 ' - Me.Label8.Location = New System.Drawing.Point(168, 239) + Me.Label8.Location = New System.Drawing.Point(168, 245) Me.Label8.Name = "Label8" Me.Label8.Size = New System.Drawing.Size(151, 16) Me.Label8.TabIndex = 120 @@ -545,7 +550,7 @@ Partial Class usrcntlFakturierung ' Me.PictureBox10.BackgroundImage = Global.SDL.My.Resources.Resources.ok Me.PictureBox10.BackgroundImageLayout = System.Windows.Forms.ImageLayout.Zoom - Me.PictureBox10.Location = New System.Drawing.Point(148, 239) + Me.PictureBox10.Location = New System.Drawing.Point(148, 245) Me.PictureBox10.Name = "PictureBox10" Me.PictureBox10.Size = New System.Drawing.Size(14, 14) Me.PictureBox10.TabIndex = 119 @@ -604,7 +609,7 @@ Partial Class usrcntlFakturierung ' Me.PictureBox9.BackgroundImage = Global.SDL.My.Resources.Resources.ok Me.PictureBox9.BackgroundImageLayout = System.Windows.Forms.ImageLayout.Zoom - Me.PictureBox9.Location = New System.Drawing.Point(148, 221) + Me.PictureBox9.Location = New System.Drawing.Point(148, 227) Me.PictureBox9.Name = "PictureBox9" Me.PictureBox9.Size = New System.Drawing.Size(14, 14) Me.PictureBox9.TabIndex = 113 @@ -613,7 +618,7 @@ Partial Class usrcntlFakturierung ' 'Label2 ' - Me.Label2.Location = New System.Drawing.Point(168, 221) + Me.Label2.Location = New System.Drawing.Point(168, 227) Me.Label2.Name = "Label2" Me.Label2.Size = New System.Drawing.Size(224, 17) Me.Label2.TabIndex = 112 @@ -623,7 +628,7 @@ Partial Class usrcntlFakturierung ' Me.PictureBox8.BackgroundImage = Global.SDL.My.Resources.Resources.ok Me.PictureBox8.BackgroundImageLayout = System.Windows.Forms.ImageLayout.Zoom - Me.PictureBox8.Location = New System.Drawing.Point(148, 204) + Me.PictureBox8.Location = New System.Drawing.Point(148, 210) Me.PictureBox8.Name = "PictureBox8" Me.PictureBox8.Size = New System.Drawing.Size(14, 14) Me.PictureBox8.TabIndex = 111 @@ -632,7 +637,7 @@ Partial Class usrcntlFakturierung ' 'Label1 ' - Me.Label1.Location = New System.Drawing.Point(168, 204) + Me.Label1.Location = New System.Drawing.Point(168, 210) Me.Label1.Name = "Label1" Me.Label1.Size = New System.Drawing.Size(224, 17) Me.Label1.TabIndex = 110 @@ -762,8 +767,6 @@ Partial Class usrcntlFakturierung 'cbxVorschau ' Me.cbxVorschau.AutoSize = True - Me.cbxVorschau.Checked = True - Me.cbxVorschau.CheckState = System.Windows.Forms.CheckState.Checked Me.cbxVorschau.Location = New System.Drawing.Point(491, 310) Me.cbxVorschau.Name = "cbxVorschau" Me.cbxVorschau.Size = New System.Drawing.Size(109, 17) @@ -1038,6 +1041,25 @@ Partial Class usrcntlFakturierung Me.Label14.TabIndex = 73 Me.Label14.Text = "Rechnungsdaten" ' + 'PictureBox13 + ' + Me.PictureBox13.BackgroundImage = CType(resources.GetObject("PictureBox13.BackgroundImage"), System.Drawing.Image) + Me.PictureBox13.BackgroundImageLayout = System.Windows.Forms.ImageLayout.Zoom + Me.PictureBox13.Location = New System.Drawing.Point(148, 187) + Me.PictureBox13.Name = "PictureBox13" + Me.PictureBox13.Size = New System.Drawing.Size(14, 14) + Me.PictureBox13.TabIndex = 134 + Me.PictureBox13.TabStop = False + Me.PictureBox13.Visible = False + ' + 'Label15 + ' + Me.Label15.Location = New System.Drawing.Point(168, 187) + Me.Label15.Name = "Label15" + Me.Label15.Size = New System.Drawing.Size(429, 14) + Me.Label15.TabIndex = 133 + Me.Label15.Text = "8. Hängt ZNB-Liste an." + ' 'usrcntlFakturierung ' Me.AutoScaleDimensions = New System.Drawing.SizeF(6.0!, 13.0!) @@ -1073,6 +1095,7 @@ Partial Class usrcntlFakturierung CType(Me.PictureBox2, System.ComponentModel.ISupportInitialize).EndInit() CType(Me.PictureBox1, System.ComponentModel.ISupportInitialize).EndInit() Me.gb_MDM_Rechnungen.ResumeLayout(False) + CType(Me.PictureBox13, System.ComponentModel.ISupportInitialize).EndInit() Me.ResumeLayout(False) Me.PerformLayout() @@ -1160,4 +1183,6 @@ Partial Class usrcntlFakturierung Friend WithEvents Label13 As Label Friend WithEvents gb_MDM_Rechnungen As GroupBox Friend WithEvents Label14 As Label + Friend WithEvents PictureBox13 As PictureBox + Friend WithEvents Label15 As Label End Class diff --git a/SDL/seriendruck/usrCntlFakturierung.resx b/SDL/seriendruck/usrCntlFakturierung.resx index 32e578b1..cac4d60c 100644 --- a/SDL/seriendruck/usrCntlFakturierung.resx +++ b/SDL/seriendruck/usrCntlFakturierung.resx @@ -118,6 +118,30 @@ System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + iVBORw0KGgoAAAANSUhEUgAAABwAAAAcCAYAAAByDd+UAAAABGdBTUEAALGPC/xhBQAABGdJREFUSEtj + YKAyYOFk4Za0knSzzrXOd8x2jJeUlGRgZ2dHV0YFwMjAKKInomlUYJRl32e/wn+Z/0Gf2T4L9eP1rQRV + BQWZ2JnQdVAGBNQEFI2KjHLCj4Qfjz0f+zX+Uvz/iKMR9z2XeU7USdNxENYVFmZkYWRE10c2sGqyKgg/ + FH4s7mLcPxAGWQhjR5+Pnm5Wa+bAxs/Ggq6PbODQ77Aw5mzMO5BF6DjuYtzDoB1BU5ynO9uh6yMZcIpy + Sin5KsX5rva9gMWiP3EX4354LPDYb9VkVWpSZmKIrp8kwMrDyifnLBcUtCPoYfSp6G9oln2PPh39InRf + 6EXVYNUYLjEuCXT9JAMFT4UI5+nO22POxPyMuxD3F83CK/4b/CdoJ2hb8CnwiTIyM5Iff8yczNxSVlJu + Nm02i8P2h72EJRKwRRfifsScibnts9Kn0yjfyIZfkZ+bhZOFGd0MkgC7ALuIXppeDXq8xZ6L/Rl+MPyR + 2xy3iXpperai+qLUyfG4LIw8GvnGY57HVnFDcTk2bjZ0beQBHikeeWV/5QTvpd4nI49FfoRZFnM+5rdd + j91KEV0REzY+Ng5GZgJ5nJmDmZtPgU9dwUPBUsZeRoNLgosNXRO7ILsIOKFMdd4adTzqE7Lv/Pf6b9JM + 1wxB0YALgFIQrxyvmlacVrHfer/prnNccxW9FWXZBdhZGZCKQEENQUOzKrMpaKnxR9zFuOeWMyy9JDwl + WJHNxQk4xTilVAJVkkP2hjyLPhP9NvJE5C7PJZ7J4ibikqw8rPDkjMPCazEXYorkveWVWHiISPnMHMxc + qsGqKe7z3Q+Cy75LcSBDXkQcjdjuMMEhStJKUo6JlYmVlZdVQD9Lv8F3je9FeKq8EHvZf5N/j26Grg6P + LA8PutlYgYKbQqjzVOdtyK6GuvxD7IXYlea15v5ixmISXBJcsm5z3PZC5X7FXYx7Grg9cKpZlZkzuxA7 + GxMrE4FUAgXIpTuahWDxmPMx011mudiiWQhyzBKzSjMvQQ1BXnQz8QJpG2lPZX/lKMs6y464i3H34y/F + g+syJIsfhh8KPw6yLPxQ+GuQWOSRyNc27Tbd0rbSZizcZJQibHxsvBImEsamFaaVrjNdNwXvDH6A7mMY + BlnqNtttj5yrXDAosaGbRTKQdZYNsOu2WxZ9MvpD3IW43/GX4hHl5MW4n75rfI/pZ+kXsouwC6HrJQuw + cLPwKngqeLvPc18adTLqRfyl+F9IFt73We0zQTdd14BdkIotI25JbgkZBxkHtVC1JLc5brtjz8f+jL0Q + +z1oZ9B6syqzaGEdYX5mdmYqt4qgQDVINcVjocfByBORr63brCulbaW10NVQHYibiNsHbQ+6L24q7oAu + RxPAxs8mJG4iDmp1USehIAMuLi4GeXl5NlNTU347OzsRe3t7UWRsZ2cnbG5uzicrK8vKxcVFXOmCD0hK + SjJ6enoK1NXVqU6aNMlg2rRpxsh48uTJus3NzYqurq68EhISJGd6ADkzAttxL7feAAAAAElFTkSuQmCC + + iVBORw0KGgoAAAANSUhEUgAAABwAAAAcCAYAAAByDd+UAAAABGdBTUEAALGPC/xhBQAABGdJREFUSEtj diff --git a/SDL/seriendruck/usrCntlFakturierung.vb b/SDL/seriendruck/usrCntlFakturierung.vb index ed34996f..2c97dc2b 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 Imports VERAG_PROG_ALLGEMEIN Public Class usrcntlFakturierung @@ -372,6 +373,12 @@ Public Class usrcntlFakturierung Dim okMaut As Boolean = False okMaut = setMautgesamtberichtInRechnung(Sachbearbeiter, rechnungsdatum, dtSammelrechnungen) + + 'Gesamtmautberichte an Sammelrechnung anhängen + Dim okEZB As Boolean = False + okEZB = setZNBerichtInRechnung(Sachbearbeiter, rechnungsdatum, dtSammelrechnungen) + + showPic(okMaut, PictureBox7) If Not okMaut Then @@ -743,7 +750,7 @@ Public Class usrcntlFakturierung Dim ok As Boolean = False - Dim dtSelectedSammelrechnungen As DataTable = (New SQL).loadDgvBySql("SELECT [Firma_ID], [Status], [Sammelrechnung], [Sachbearbeiter], [RechnungsKundenNr], [Währungscode], isnull([Steuersatz %],0) as [Steuersatz %], cast([Lastschrift] as bit) as Lastschrift, [RK_ID], [BelegartenNr],cast([Vorkasse] as bit) as Vorkasse, [Nettozahlungsziel], [OffertenNr], [RechnungsLandKz], [Text] + Dim dtSelectedSammelrechnungen As DataTable = (New SQL).loadDgvBySql("SELECT [Firma_ID], [Status],[FilialenNr], [Sammelrechnung], [Sachbearbeiter], [RechnungsKundenNr], [Währungscode], isnull([Steuersatz %],0) as [Steuersatz %], cast([Lastschrift] as bit) as Lastschrift, [RK_ID], [BelegartenNr],cast([Vorkasse] as bit) as Vorkasse, [Nettozahlungsziel], [OffertenNr], [RechnungsLandKz], [Text] FROM Rechnungsausgang WHERE " & IIf(setTextifNull, "[Status] = 4 AND Text is null", "[Status] = 0") & " AND [Sammelrechnung] = 6 AND UPPER([Sachbearbeiter]) = '" & Sachbearbeiter & "' AND ([SteuerpflichtigerGesamtbetrag] <> 0 OR [SteuerfreierGesamtbetrag] <> 0) AND cast(Abfertigungsdatum as Date) = '" & rechnungsdatum & "' ORDER BY [Firma_ID], [Status], [Sammelrechnung], [Sachbearbeiter], [RechnungsKundenNr], [Währungscode], [Steuersatz %], [Lastschrift], [RK_ID]", "FMZOLL") @@ -1109,6 +1116,145 @@ Public Class usrcntlFakturierung End Function + + + Private Function setZNBerichtInRechnung(Sachbearbeiter As String, rechnungsdatum As Date, dtSammelRechnugen As DataTable) As Boolean + Try + Dim counterAnhang As Integer = 0 + Dim hatFehler As Boolean = False + + If dtSammelRechnugen.Rows.Count = 0 Then + MsgBox("Keine Rechnungen für die Anlage der ZNB-Berichte gefunden!" & vbNewLine & "Vorgang wird abgebrochen.") + Return False + End If + + Dim dtSammelRechnugen_EZB As DataTable + + Dim rows = dtSammelRechnugen.Select("FilialenNr = 8001 AND OffertenNr = 95") + + If rows.Length > 0 Then + dtSammelRechnugen_EZB = rows.CopyToDataTable() + Else + dtSammelRechnugen_EZB = dtSammelRechnugen.Clone() + End If + + If dtSammelRechnugen_EZB.Rows.Count = 0 Then + MsgBox("Keine Rechnungen der Filiale 8001 für die Anlage der ZNB-Berichte gefunden!" & vbNewLine & "Vorgang wird abgebrochen.") + Return False + End If + + For Each row In dtSammelRechnugen_EZB.Rows + + Dim kdNr = row("RechnungsKundenNr") + Dim RK_ID = row("RK_ID") + + Dim RG As New cRechnungsausgang(RK_ID) + + If RG Is Nothing Then + VERAG_PROG_ALLGEMEIN.cErrorHandler.ERR("Rechnung RK_ID " & RK_ID & " konnte nicht geladen werden.", "", System.Reflection.MethodInfo.GetCurrentMethod.Name) + hatFehler = True + Continue For + End If + + Dim dtZNBList = (New SQL).loadDgvBySql("select [id] ,[belegNr] ,[buchungstext] ,[zinssatz] ,[belegZahlungsziel],[ueberschreitungInTagen] ,[zinsbetrag] ,[belegDatum] ,[zahlungsBetrag] ,[zahlungDatum] , [faelligkeitsDatum] from tblMDM_Zinsberechnung where RK_ID =" & RG.RK_ID, "FMZOLL") + + If dtZNBList.Rows.Count = 0 Then + MsgBox("Keine Zinsberechnungsdaten für RK_ID " & RG.RK_ID & " gefunden. Diese Rechnung wird übersprungen.") + hatFehler = True + Continue For + End If + + Dim path As String = createZNBReport(dtZNBList, kdNr, rechnungsdatum, RG) + + If path = "" Then Continue For + + Dim fi As New System.IO.FileInfo(path) + Dim DS As New VERAG_PROG_ALLGEMEIN.cDATENSERVER("MDM", "ZNB", RG.KundenNrZentrale, rechnungsdatum.ToShortDateString, "", fi.Name & fi.Extension) + + If Not DS.uploadDataToDATENSERVER(path, fi.Name, fi.Extension,,,, True) Then + MsgBox("Fehler beim Speichern: Datenserver! :" & RG.Firma_ID) + hatFehler = True + Continue For ' kein Anhang ohne gültigen Datenserver-Eintrag anlegen + End If + + Dim ANH As New VERAG_PROG_ALLGEMEIN.cRechnungsausgangAnhaenge + ANH.dsId = CInt(DS.da_id) + ANH.Bezeichnung = "POS-Liste VERZUGSZINSEN " & rechnungsdatum.ToShortDateString & fi.Extension + RG.ANHAENGE.Add(ANH) + + If Not ANH.INSERT(RG.RK_ID, False) Then + MsgBox("Fehler beim Anlegen des Anhangs für RK_ID " & RG.RK_ID) + hatFehler = True + Else + RG.Anlage_1 = "POS-Liste VERZUGSZINSEN" + RG.SAVE() + counterAnhang += 1 + End If + + Next + + Label15.Text = "8. Hängt ZNB-Liste an." & " Anzahl: " & counterAnhang + Return Not hatFehler AndAlso counterAnhang > 0 + + Catch ex As Exception + VERAG_PROG_ALLGEMEIN.cErrorHandler.ERR(ex.Message, ex.StackTrace, System.Reflection.MethodInfo.GetCurrentMethod.Name) + Label15.Text = "8. Hängt ZNB-Liste an. FEHLER!" + Return False + End Try + + End Function + + Private Function createZNBReport(dtZNBList As DataTable, KDNr As Integer, rechnungsdatum As Date, RG As cRechnungsausgang) As String + + + Dim rpt As New rptPOS_ZNB(RG, RG.SteuerfreierGesamtbetrag + RG.SteuerpflichtigerGesamtbetrag) + + rpt.DataSource = dtZNBList + + rpt.lblRgDatum.Text = rechnungsdatum + rpt.txtKunde.Text = KDNr & " " & New VERAG_PROG_ALLGEMEIN.cAdressen(KDNr).FullName + rpt.Label2.Visible = False + rpt.TextBox1.Visible = False + rpt.Label4.Text = rechnungsdatum + + rpt.lblHeader.Text &= " " & RG.Vermerk + + If rpt.DataSource.rows.count = 0 Then Return "" + + Dim AD As New cAdressen(KDNr) + Dim sum As Double = 0 + + rpt.txtKunde.Text = AD.FullName + + AddHandler rpt.Detail.Format, Sub() + + If Not IsDBNull(rpt.Fields.Item("clmnZinsen").Value) AndAlso Not IsNothing(rpt.Fields.Item("clmnZinsen").Value) AndAlso IsNumeric(rpt.Fields.Item("clmnZinsen").Value) Then + sum += CDbl(rpt.Fields.Item("clmnZinsen").Value) + End If + + + End Sub + + + AddHandler rpt.ReportFooter1.Format, Sub() + rpt.txtBruttoGesSum.Text = sum.ToString("N2") + End Sub + + + Dim tmpPath = VERAG_PROG_ALLGEMEIN.DATENVERVER_OPTIONS.getTMPPath(RG.AbfertigungsNr & ".pdf", ".pdf", , False) + Dim p As New GrapeCity.ActiveReports.Export.Pdf.Section.PdfExport + rpt.Run(False) + p.NeverEmbedFonts = "" + p.Export(rpt.Document, tmpPath) + rpt.Dispose() + + Return tmpPath + + End Function + + + + Private Function AddAttachementToRE(pathFile As String, kdNr As Integer, RECHNUNG As cRechnungsausgang, rechnungsdatum As Date) As Boolean 'TODO: Prüfung, damit anhänge nicht doppelt eingearbeitet werden! -> ist DBteschnisch unterbunden mit PrimaryKey-Einschränkung!!! @@ -1135,7 +1281,12 @@ Public Class usrcntlFakturierung ANH.dsId = CInt(DS.da_id) ANH.Bezeichnung = DS.da_name RECHNUNG.ANHAENGE.Add(ANH) - Return RECHNUNG.SAVE_ANHAENGE(RECHNUNG.RK_ID, False, False) + + If Not ANH.INSERT(RECHNUNG.RK_ID, False) Then + Return False + End If + + Return True Else MsgBox("Rechnung nicht initialisiert.") Return False diff --git a/SDL/zoll/usrCntlZOLLAuswertungen.Designer.vb b/SDL/zoll/usrCntlZOLLAuswertungen.Designer.vb index 13071916..076cf153 100644 --- a/SDL/zoll/usrCntlZOLLAuswertungen.Designer.vb +++ b/SDL/zoll/usrCntlZOLLAuswertungen.Designer.vb @@ -271,6 +271,10 @@ Partial Class usrCntlZOLLAuswertungen Me.Label96 = New System.Windows.Forms.Label() Me.von_CBAM = New System.Windows.Forms.DateTimePicker() Me.pnl = New System.Windows.Forms.Panel() + Me.Label101 = New System.Windows.Forms.Label() + Me.Button2 = New System.Windows.Forms.Button() + Me.Label102 = New System.Windows.Forms.Label() + Me.Label103 = New System.Windows.Forms.Label() Me.GroupBox1.SuspendLayout() Me.grpDurmaz.SuspendLayout() CType(Me.picDurmaz, System.ComponentModel.ISupportInitialize).BeginInit() @@ -1314,7 +1318,7 @@ Partial Class usrCntlZOLLAuswertungen Me.tbcntr.Location = New System.Drawing.Point(0, 57) Me.tbcntr.Name = "tbcntr" Me.tbcntr.SelectedIndex = 0 - Me.tbcntr.Size = New System.Drawing.Size(1109, 1829) + Me.tbcntr.Size = New System.Drawing.Size(1092, 1829) Me.tbcntr.TabIndex = 22 ' 'TabPage1 @@ -1357,7 +1361,7 @@ Partial Class usrCntlZOLLAuswertungen Me.TabPage1.Location = New System.Drawing.Point(4, 22) Me.TabPage1.Name = "TabPage1" Me.TabPage1.Padding = New System.Windows.Forms.Padding(3) - Me.TabPage1.Size = New System.Drawing.Size(1101, 1803) + Me.TabPage1.Size = New System.Drawing.Size(1084, 1803) Me.TabPage1.TabIndex = 0 Me.TabPage1.Text = "Bürgschaften" Me.TabPage1.UseVisualStyleBackColor = True @@ -2584,7 +2588,7 @@ Partial Class usrCntlZOLLAuswertungen Me.TabPage3.Location = New System.Drawing.Point(4, 22) Me.TabPage3.Name = "TabPage3" Me.TabPage3.Padding = New System.Windows.Forms.Padding(3) - Me.TabPage3.Size = New System.Drawing.Size(1118, 1803) + Me.TabPage3.Size = New System.Drawing.Size(1101, 1803) Me.TabPage3.TabIndex = 2 Me.TabPage3.Text = "Fiskalvertretung / EV-Veranlagung" Me.TabPage3.UseVisualStyleBackColor = True @@ -2619,7 +2623,7 @@ Partial Class usrCntlZOLLAuswertungen Me.TabPage4.Controls.Add(Me.UsrCntlAuswertungenAufschub_Abgabenliste1) Me.TabPage4.Location = New System.Drawing.Point(4, 22) Me.TabPage4.Name = "TabPage4" - Me.TabPage4.Size = New System.Drawing.Size(1118, 1803) + Me.TabPage4.Size = New System.Drawing.Size(1101, 1803) Me.TabPage4.TabIndex = 3 Me.TabPage4.Text = "Aufschubdaten" Me.TabPage4.UseVisualStyleBackColor = True @@ -2648,7 +2652,7 @@ Partial Class usrCntlZOLLAuswertungen Me.TabPage5.Location = New System.Drawing.Point(4, 22) Me.TabPage5.Name = "TabPage5" Me.TabPage5.Padding = New System.Windows.Forms.Padding(3) - Me.TabPage5.Size = New System.Drawing.Size(1118, 1803) + Me.TabPage5.Size = New System.Drawing.Size(1084, 1803) Me.TabPage5.TabIndex = 4 Me.TabPage5.Text = "UNISPED" Me.TabPage5.UseVisualStyleBackColor = True @@ -2852,6 +2856,10 @@ Partial Class usrCntlZOLLAuswertungen ' 'TabPage6 ' + Me.TabPage6.Controls.Add(Me.Label103) + Me.TabPage6.Controls.Add(Me.Label102) + Me.TabPage6.Controls.Add(Me.Button2) + Me.TabPage6.Controls.Add(Me.Label101) Me.TabPage6.Controls.Add(Me.cbxCBAM_Detaildaten) Me.TabPage6.Controls.Add(Me.Label100) Me.TabPage6.Controls.Add(Me.cbxcbamQuelle) @@ -2863,7 +2871,7 @@ Partial Class usrCntlZOLLAuswertungen Me.TabPage6.Controls.Add(Me.von_CBAM) Me.TabPage6.Location = New System.Drawing.Point(4, 22) Me.TabPage6.Name = "TabPage6" - Me.TabPage6.Size = New System.Drawing.Size(1118, 1803) + Me.TabPage6.Size = New System.Drawing.Size(1084, 1803) Me.TabPage6.TabIndex = 5 Me.TabPage6.Text = "CBAM" Me.TabPage6.UseVisualStyleBackColor = True @@ -2871,7 +2879,7 @@ Partial Class usrCntlZOLLAuswertungen 'cbxCBAM_Detaildaten ' Me.cbxCBAM_Detaildaten.AutoSize = True - Me.cbxCBAM_Detaildaten.Location = New System.Drawing.Point(13, 80) + Me.cbxCBAM_Detaildaten.Location = New System.Drawing.Point(13, 102) Me.cbxCBAM_Detaildaten.Name = "cbxCBAM_Detaildaten" Me.cbxCBAM_Detaildaten.Size = New System.Drawing.Size(126, 17) Me.cbxCBAM_Detaildaten.TabIndex = 29 @@ -2881,7 +2889,7 @@ Partial Class usrCntlZOLLAuswertungen 'Label100 ' Me.Label100.AutoSize = True - Me.Label100.Location = New System.Drawing.Point(10, 37) + Me.Label100.Location = New System.Drawing.Point(10, 59) Me.Label100.Name = "Label100" Me.Label100.Size = New System.Drawing.Size(37, 13) Me.Label100.TabIndex = 28 @@ -2897,7 +2905,7 @@ Partial Class usrCntlZOLLAuswertungen Me.cbxcbamQuelle.DropDownWidth = 100 Me.cbxcbamQuelle.FormattingEnabled = True Me.cbxcbamQuelle.IntegralHeight = False - Me.cbxcbamQuelle.Location = New System.Drawing.Point(13, 53) + Me.cbxcbamQuelle.Location = New System.Drawing.Point(13, 75) Me.cbxcbamQuelle.Name = "cbxcbamQuelle" Me.cbxcbamQuelle.Size = New System.Drawing.Size(85, 21) Me.cbxcbamQuelle.TabIndex = 27 @@ -2905,7 +2913,7 @@ Partial Class usrCntlZOLLAuswertungen 'Label99 ' Me.Label99.AutoSize = True - Me.Label99.Location = New System.Drawing.Point(224, 56) + Me.Label99.Location = New System.Drawing.Point(224, 78) Me.Label99.Name = "Label99" Me.Label99.Size = New System.Drawing.Size(23, 13) Me.Label99.TabIndex = 26 @@ -2914,7 +2922,7 @@ Partial Class usrCntlZOLLAuswertungen 'bis_CBAM ' Me.bis_CBAM.Format = System.Windows.Forms.DateTimePickerFormat.[Short] - Me.bis_CBAM.Location = New System.Drawing.Point(253, 53) + Me.bis_CBAM.Location = New System.Drawing.Point(253, 75) Me.bis_CBAM.Name = "bis_CBAM" Me.bis_CBAM.Size = New System.Drawing.Size(93, 20) Me.bis_CBAM.TabIndex = 25 @@ -2936,7 +2944,7 @@ Partial Class usrCntlZOLLAuswertungen Me.excelCbam.ForeColor = System.Drawing.Color.FromArgb(CType(CType(0, Byte), Integer), CType(CType(54, Byte), Integer), CType(CType(128, Byte), Integer)) Me.excelCbam.Image = Global.SDL.My.Resources.Resources.Excel_logo Me.excelCbam.ImageAlign = System.Drawing.ContentAlignment.MiddleLeft - Me.excelCbam.Location = New System.Drawing.Point(13, 103) + Me.excelCbam.Location = New System.Drawing.Point(13, 125) Me.excelCbam.Name = "excelCbam" Me.excelCbam.Padding = New System.Windows.Forms.Padding(0, 0, 25, 0) Me.excelCbam.Size = New System.Drawing.Size(121, 38) @@ -2948,7 +2956,7 @@ Partial Class usrCntlZOLLAuswertungen 'Label96 ' Me.Label96.AutoSize = True - Me.Label96.Location = New System.Drawing.Point(114, 37) + Me.Label96.Location = New System.Drawing.Point(114, 59) Me.Label96.Name = "Label96" Me.Label96.Size = New System.Drawing.Size(38, 13) Me.Label96.TabIndex = 21 @@ -2957,7 +2965,7 @@ Partial Class usrCntlZOLLAuswertungen 'von_CBAM ' Me.von_CBAM.Format = System.Windows.Forms.DateTimePickerFormat.[Short] - Me.von_CBAM.Location = New System.Drawing.Point(117, 53) + Me.von_CBAM.Location = New System.Drawing.Point(117, 75) Me.von_CBAM.Name = "von_CBAM" Me.von_CBAM.Size = New System.Drawing.Size(93, 20) Me.von_CBAM.TabIndex = 20 @@ -2968,9 +2976,53 @@ Partial Class usrCntlZOLLAuswertungen Me.pnl.Dock = System.Windows.Forms.DockStyle.Top Me.pnl.Location = New System.Drawing.Point(0, 0) Me.pnl.Name = "pnl" - Me.pnl.Size = New System.Drawing.Size(1109, 57) + Me.pnl.Size = New System.Drawing.Size(1092, 57) Me.pnl.TabIndex = 23 ' + 'Label101 + ' + Me.Label101.AutoSize = True + Me.Label101.Font = New System.Drawing.Font("Microsoft Sans Serif", 10.0!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.Label101.ForeColor = System.Drawing.SystemColors.ControlDarkDark + Me.Label101.Location = New System.Drawing.Point(10, 176) + Me.Label101.Name = "Label101" + Me.Label101.Size = New System.Drawing.Size(154, 17) + Me.Label101.TabIndex = 30 + Me.Label101.Text = "CBAM Kundenstatus" + ' + 'Button2 + ' + Me.Button2.FlatStyle = System.Windows.Forms.FlatStyle.Flat + Me.Button2.ForeColor = System.Drawing.Color.FromArgb(CType(CType(0, Byte), Integer), CType(CType(54, Byte), Integer), CType(CType(128, Byte), Integer)) + Me.Button2.Image = Global.SDL.My.Resources.Resources.Excel_logo + Me.Button2.ImageAlign = System.Drawing.ContentAlignment.MiddleLeft + Me.Button2.Location = New System.Drawing.Point(13, 229) + Me.Button2.Name = "Button2" + Me.Button2.Padding = New System.Windows.Forms.Padding(0, 0, 25, 0) + Me.Button2.Size = New System.Drawing.Size(121, 38) + Me.Button2.TabIndex = 31 + Me.Button2.Text = "Excel" + Me.Button2.TextAlign = System.Drawing.ContentAlignment.MiddleRight + Me.Button2.UseVisualStyleBackColor = True + ' + 'Label102 + ' + Me.Label102.AutoSize = True + Me.Label102.Location = New System.Drawing.Point(10, 200) + Me.Label102.Name = "Label102" + Me.Label102.Size = New System.Drawing.Size(192, 13) + Me.Label102.TabIndex = 32 + Me.Label102.Text = "Kundenliste mit aktuellem CBAM-Status" + ' + 'Label103 + ' + Me.Label103.AutoSize = True + Me.Label103.Location = New System.Drawing.Point(10, 35) + Me.Label103.Name = "Label103" + Me.Label103.Size = New System.Drawing.Size(225, 13) + Me.Label103.TabIndex = 33 + Me.Label103.Text = "Liste der Kunden mit CBAM-pflichtigen Waren " + ' 'usrCntlZOLLAuswertungen ' Me.AutoScaleDimensions = New System.Drawing.SizeF(6.0!, 13.0!) @@ -2980,7 +3032,7 @@ Partial Class usrCntlZOLLAuswertungen Me.Controls.Add(Me.tbcntr) Me.Controls.Add(Me.pnl) Me.Name = "usrCntlZOLLAuswertungen" - Me.Size = New System.Drawing.Size(1109, 1174) + Me.Size = New System.Drawing.Size(1092, 1174) Me.GroupBox1.ResumeLayout(False) Me.GroupBox1.PerformLayout() Me.grpDurmaz.ResumeLayout(False) @@ -3295,4 +3347,8 @@ Partial Class usrCntlZOLLAuswertungen Friend WithEvents Label96 As Label Friend WithEvents von_CBAM As DateTimePicker Friend WithEvents cbxCBAM_Detaildaten As CheckBox + Friend WithEvents Button2 As Button + Friend WithEvents Label101 As Label + Friend WithEvents Label102 As Label + Friend WithEvents Label103 As Label End Class diff --git a/SDL/zoll/usrCntlZOLLAuswertungen.vb b/SDL/zoll/usrCntlZOLLAuswertungen.vb index f769b24b..52b0fbda 100644 --- a/SDL/zoll/usrCntlZOLLAuswertungen.vb +++ b/SDL/zoll/usrCntlZOLLAuswertungen.vb @@ -1,4 +1,5 @@ -Imports System.IO +Imports System.Data.SqlTypes +Imports System.IO Imports GrapeCity.DataVisualization.Chart Public Class usrCntlZOLLAuswertungen @@ -1218,6 +1219,22 @@ and End Function + Private Sub Button2_Click_2(sender As Object, e As EventArgs) Handles Button2.Click + + Dim sqlString = + "select Adressen.Auswahl as Aktiv,KundenNr, [Name 1] as Name, isnull(Adressen.[E-Mail],'') as Mail, isnull(Adressen.[E-Mail2],'') as Mail2 ,isnull(Anrede,'') as Anrede ,isnull(Ansprechpartner,'') as Ansprechpartner, isnull(Adressen.Telefon,'') as Telefon, kde_CBAM_Status as CBAM_Status from Adressen + inner join Kunden on Kunden.KundenNr = Adressen.AdressenNr + inner join tblKundenErweitert on kde_KundenNr = Adressen.AdressenNr + where isnull(kde_CBAM_Status,'') <> ''" + + Dim dt As DataTable = SQL.loadDgvBySql(SqlString, "FMZOLL", 700) + If dt IsNot Nothing Then + cProgramFunctions.genExcelFromDT_NEW(dt) + End If + + + End Sub + diff --git a/VERAG_PROG_ALLGEMEIN/Benutzerdefinierte Steuerelemente/usrcntlPDFScanList.vb b/VERAG_PROG_ALLGEMEIN/Benutzerdefinierte Steuerelemente/usrcntlPDFScanList.vb index a524122f..79227bd2 100644 --- a/VERAG_PROG_ALLGEMEIN/Benutzerdefinierte Steuerelemente/usrcntlPDFScanList.vb +++ b/VERAG_PROG_ALLGEMEIN/Benutzerdefinierte Steuerelemente/usrcntlPDFScanList.vb @@ -72,6 +72,8 @@ Public Class usrcntlPDFScanList End Sub + + Private Sub usrcntlPDFScan_Load(sender As Object, e As EventArgs) Handles Me.Load ' Me.txt.Text = _TEXT_PDF Me.AllowDrop = True diff --git a/VERAG_PROG_ALLGEMEIN/Classes/Essensbestellung.vb b/VERAG_PROG_ALLGEMEIN/Classes/Essensbestellung.vb index 603542da..9d624da8 100644 --- a/VERAG_PROG_ALLGEMEIN/Classes/Essensbestellung.vb +++ b/VERAG_PROG_ALLGEMEIN/Classes/Essensbestellung.vb @@ -26,6 +26,10 @@ Public Class cEssensbestellung Property eb_firma As Object = Nothing Property eb_MenuID As Object = Nothing Property eb_archiviert As Boolean + Property eb_gesendetVon As Object = Nothing + Property eb_abgerechnetVon As Object = Nothing + Property eb_storniertVon As Object = Nothing + Property eb_gesendetFirst_am As Object = Nothing Public hasEntry = False @@ -90,6 +94,10 @@ Public Class cEssensbestellung list.Add(New VERAG_PROG_ALLGEMEIN.SQLVariable("eb_firma", eb_firma)) list.Add(New VERAG_PROG_ALLGEMEIN.SQLVariable("eb_archiviert", eb_archiviert)) list.Add(New VERAG_PROG_ALLGEMEIN.SQLVariable("eb_MenuID", eb_MenuID)) + list.Add(New VERAG_PROG_ALLGEMEIN.SQLVariable("eb_gesendetVon", eb_gesendetVon)) + list.Add(New VERAG_PROG_ALLGEMEIN.SQLVariable("eb_abgerechnetVon", eb_abgerechnetVon)) + list.Add(New VERAG_PROG_ALLGEMEIN.SQLVariable("eb_storniertVon", eb_storniertVon)) + list.Add(New VERAG_PROG_ALLGEMEIN.SQLVariable("eb_gesendetFirst_am", eb_gesendetFirst_am)) Return list diff --git a/VERAG_PROG_ALLGEMEIN/Classes/USTV/cUSTVAntrag.vb b/VERAG_PROG_ALLGEMEIN/Classes/USTV/cUSTVAntrag.vb index 31992cab..70f4c5e6 100644 --- a/VERAG_PROG_ALLGEMEIN/Classes/USTV/cUSTVAntrag.vb +++ b/VERAG_PROG_ALLGEMEIN/Classes/USTV/cUSTVAntrag.vb @@ -63,6 +63,7 @@ Public Class cUSTVAntrag Property UStVAn_MWSTEingang_offen As Object = Nothing Property POSITIONEN As New List(Of cUStVPositionen) '= Nothing Property UStVAn_letzteAenderung As Object = Nothing + Property UStVAn_letzteAenderungUser As Object = Nothing Public hasEntry = False @@ -135,6 +136,7 @@ Public Class cUSTVAntrag list.Add(New VERAG_PROG_ALLGEMEIN.SQLVariable("UStVAn_Sicherheit", UStVAn_Sicherheit)) list.Add(New VERAG_PROG_ALLGEMEIN.SQLVariable("UStVAn_MWSTEingang_offen", UStVAn_MWSTEingang_offen)) list.Add(New VERAG_PROG_ALLGEMEIN.SQLVariable("UStVAn_letzteAenderung", UStVAn_letzteAenderung)) + list.Add(New VERAG_PROG_ALLGEMEIN.SQLVariable("UStVAn_letzteAenderungUser", UStVAn_letzteAenderungUser)) Return list @@ -602,6 +604,7 @@ Public Class cUStVErstattungPositionen Property UStVEr_RZVZ As Object = Nothing Property UStVEr_Bank As Object = Nothing Property UStVEr_Differenz As Object = Nothing + Property UStVEr_RK_ID As Object = Nothing Public hasEntry = False @@ -633,30 +636,40 @@ Public Class cUStVErstattungPositionen list.Add(New VERAG_PROG_ALLGEMEIN.SQLVariable("UStVEr_RZVZ", UStVEr_RZVZ)) list.Add(New VERAG_PROG_ALLGEMEIN.SQLVariable("UStVEr_Bank", UStVEr_Bank)) list.Add(New VERAG_PROG_ALLGEMEIN.SQLVariable("UStVEr_Differenz", UStVEr_Differenz)) + list.Add(New VERAG_PROG_ALLGEMEIN.SQLVariable("UStVEr_RK_ID", UStVEr_RK_ID)) Return list End Function - Sub New(Belegdatum, Belegnummer, UStVEr_Importfilename) + Sub New(Belegdatum As Date, Belegnummer As String, UStVEr_Importfilename As String, antragsid As Integer) Me.Belegdatum = Belegdatum Me.Belegnummer = Belegnummer Me.UStVEr_Importfilename = UStVEr_Importfilename + Me.UStVAn_ID = antragsid - LOAD(Belegdatum, Belegnummer, UStVEr_Importfilename) + LOAD(Belegdatum, Belegnummer, UStVEr_Importfilename, antragsid) End Sub - Sub New(UStVAn_ID, UStVEr_ID) + Sub New(UStVAn_ID As Integer, UStVEr_ID As Integer) Me.UStVAn_ID = UStVAn_ID Me.UStVEr_ID = UStVEr_ID LOAD(UStVAn_ID, UStVEr_ID) End Sub + + Sub New(UStVAn_ID As Integer, GutschriftsNr As Integer, GutschriftsDatum As Date) + Me.UStVAn_ID = UStVAn_ID + Me.GutschriftsNr = GutschriftsNr + Me.GutschriftsDatum = GutschriftsDatum + + LOAD(UStVAn_ID, GutschriftsDatum, GutschriftsNr) + End Sub Sub New() End Sub - Public Sub LOAD(UStVAn_ID, UStVEr_ID) + Public Sub LOAD(UStVAn_ID As Integer, UStVEr_ID As Integer) Try hasEntry = False @@ -686,16 +699,48 @@ Public Class cUStVErstattungPositionen End Try End Sub - Public Sub LOAD(Belegdatum, Belegnummer, UStVEr_Importfilename) + Public Sub LOAD(Belegdatum As Date, Belegnummer As String, UStVEr_Importfilename As String, UStVAn_ID As Integer) Try hasEntry = False Using conn As SqlConnection = SQL.GetNewOpenConnectionFMZOLL() - Using cmd As New SqlCommand("SELECT * FROM tblUStVErstattung WHERE Belegdatum=@Belegdatum AND Belegnummer=@Belegnummer AND UStVEr_Importfilename=@UStVEr_Importfilename ", conn) + Using cmd As New SqlCommand("SELECT * FROM tblUStVErstattung WHERE Belegdatum=@Belegdatum AND Belegnummer=@Belegnummer AND UStVEr_Importfilename=@UStVEr_Importfilename AND UStVAn_ID=@UStVAn_ID ", conn) cmd.Parameters.AddWithValue("@Belegdatum", Belegdatum) cmd.Parameters.AddWithValue("@Belegnummer", Belegnummer) cmd.Parameters.AddWithValue("@UStVEr_Importfilename", UStVEr_Importfilename) + cmd.Parameters.AddWithValue("@UStVAn_ID", UStVAn_ID) + Dim dr = cmd.ExecuteReader() + If dr.Read Then + 'Dim l As New cOfferte + For Each i In getParameterList() + Dim propInfo As PropertyInfo = Me.GetType.GetProperty(i.Scalarvariable) + If dr.Item(i.Text) Is DBNull.Value Then + propInfo.SetValue(Me, Nothing) + Else + propInfo.SetValue(Me, dr.Item(i.Text)) + End If + Next + hasEntry = True + End If + dr.Close() + End Using + End Using + Catch ex As Exception + MsgBox("Fehler in der Funktion '" & System.Reflection.MethodInfo.GetCurrentMethod.Name & "'" & vbNewLine & vbNewLine & ex.Message & vbNewLine & vbNewLine & ex.StackTrace) + End Try + End Sub + + Public Sub LOAD(UStVAn_ID As Integer, GutschriftsDatum As Date, GutschriftNr As Integer) + Try + + hasEntry = False + + Using conn As SqlConnection = SQL.GetNewOpenConnectionFMZOLL() + Using cmd As New SqlCommand("SELECT * FROM tblUStVErstattung WHERE GutschriftsDatum=@GutschriftsDatum AND GutschriftsNr=@GutschriftsNr AND UStVAn_ID=@UStVAn_ID ", conn) + cmd.Parameters.AddWithValue("@GutschriftsDatum", GutschriftsDatum) + cmd.Parameters.AddWithValue("@GutschriftsNr", GutschriftsNr) + cmd.Parameters.AddWithValue("@UStVAn_ID", UStVAn_ID) Dim dr = cmd.ExecuteReader() If dr.Read Then 'Dim l As New cOfferte diff --git a/VERAG_PROG_ALLGEMEIN/Classes/USTV/cUStVLeistender.vb b/VERAG_PROG_ALLGEMEIN/Classes/USTV/cUStVLeistender.vb index 43af32eb..e84a1917 100644 --- a/VERAG_PROG_ALLGEMEIN/Classes/USTV/cUStVLeistender.vb +++ b/VERAG_PROG_ALLGEMEIN/Classes/USTV/cUStVLeistender.vb @@ -19,16 +19,19 @@ Public Class cUStVLeistender Dim SQL As New SQL Sub New(UStV_Leistender As String, Optional searchbyUID As Boolean = False) - If Not searchbyUID Then - Me.UStV_Leistender = UStV_Leistender - LOAD() + If UStV_Leistender <> "" Then + If Not searchbyUID Then + Me.UStV_Leistender = UStV_Leistender + LOAD() - Else - Me.UstV_Leistender_UstNr = UStV_Leistender - LOADBYUID() + Else + Me.UstV_Leistender_UstNr = UStV_Leistender + LOADByUID() + End If End If + End Sub Sub New(Id As Integer) diff --git a/VERAG_PROG_ALLGEMEIN/Classes/cAdressen.vb b/VERAG_PROG_ALLGEMEIN/Classes/cAdressen.vb index d3bbb16d..bffc9784 100644 --- a/VERAG_PROG_ALLGEMEIN/Classes/cAdressen.vb +++ b/VERAG_PROG_ALLGEMEIN/Classes/cAdressen.vb @@ -45,8 +45,8 @@ Public Class cAdressen 'Property SSMA_TimeStamp As Object = Nothing Property MWSTVorauszahlung As Object = Nothing Property PLOSEKundenNr As Object = Nothing - Property weitereWölflKundenNr As Object = Nothing + Property IDSMautbericht_nachOrt As Object = Nothing Public hasEntry = False @@ -143,6 +143,7 @@ Public Class cAdressen list.Add(New VERAG_PROG_ALLGEMEIN.SQLVariable("MWSTVorauszahlung", MWSTVorauszahlung)) list.Add(New VERAG_PROG_ALLGEMEIN.SQLVariable("PLOSEKundenNr", PLOSEKundenNr)) list.Add(New VERAG_PROG_ALLGEMEIN.SQLVariable("weitereWölflKundenNr", weitereWölflKundenNr)) + list.Add(New VERAG_PROG_ALLGEMEIN.SQLVariable("IDSMautbericht_nachOrt", IDSMautbericht_nachOrt)) Return list End Function diff --git a/VERAG_PROG_ALLGEMEIN/Classes/cAufschubKonten.vb b/VERAG_PROG_ALLGEMEIN/Classes/cAufschubKonten.vb index 33179bdc..9fc84513 100644 --- a/VERAG_PROG_ALLGEMEIN/Classes/cAufschubKonten.vb +++ b/VERAG_PROG_ALLGEMEIN/Classes/cAufschubKonten.vb @@ -245,6 +245,107 @@ Public Class cAufschubKonten Return brgakto_gs_aktSaldo End Function + Public Function CalcSaldo_new(Optional dtDate As DataTable = Nothing, Optional Stichtag As Date? = Nothing, Optional showMessage As Boolean = False) As String + + Dim datumBis As Date = + If(Stichtag.HasValue, Stichtag.Value.Date, Today.Date) + + Dim datumBisSql As String = + datumBis.ToString("yyyy-MM-dd") + + Dim standort As String = + brgakto_gs_standort.Replace("'", "''") + + + Dim saldoSql As String = "DECLARE @Stichtag date = '" & datumBisSql & "'; Declare @Standort varchar(100) = '" & standort & "'; " & "DECLARE @Referenzbetrag decimal(18,2); + /* Referenzbetrag vor dem Stichtag */ +SELECT TOP (1) + @Referenzbetrag = r.brgarefb_refbetrag +FROM [ADMIN].[dbo].[tblBrgAufschubKonten] AS k +INNER JOIN [ADMIN].[dbo].[tblBrgAufschubReferenzberaege] AS r + ON r.brgarefb_gsid = k.brgakto_id +WHERE k.brgakto_gs_standort = @Standort + AND ISNULL(r.brgarefb_gs_aktiv, 1) = 1 + AND r.brgarefb_gueltig_ab < @Stichtag + AND ( + r.brgarefb_gueltig_bis IS NULL + OR r.brgarefb_gueltig_bis >= @Stichtag + ) +ORDER BY + r.brgarefb_gueltig_ab DESC, + r.brgarefb_id DESC; + + +/* Bewegungen vor dem Stichtag */ +SELECT + ISNULL(@Referenzbetrag, 0) + + ISNULL(SUM(Betrag), 0) AS GesamtSicherheitsSaldo +FROM +( + /* Eingänge vor dem Stichtag */ + SELECT + ISNULL(gs.gs_sicherheitsbetrag, 0) * -1 AS Betrag + FROM dbo.tblGesamtsicherheit AS gs + WHERE gs.gs_standort = @Standort + AND gs.gs_datum < @Stichtag + AND ISNULL(gs.gs_ReferenzAenderung, 0) = 0 + + UNION ALL + + /* Ausgänge vor dem Stichtag */ + SELECT + ISNULL(gsp.gsp_sicherheitsbetrag, 0) AS Betrag + FROM dbo.tblGesamtsicherheitsPositionen AS gsp + WHERE gsp.gsp_datum < @Stichtag + AND EXISTS + ( + SELECT 1 + FROM dbo.tblGesamtsicherheit AS gs + WHERE gs.gs_gsId = gsp.gsp_gsId + AND gs.gs_standort = @Standort + AND gs.gs_datum < @Stichtag + AND ISNULL(gs.gs_ReferenzAenderung, 0) = 0 + ) +) AS Bewegungen;" + + + Dim dt As DataTable = + SQL.loadDgvBySql(saldoSql, "AVISO", 100, True) + + Dim saldo As Decimal = 0D + + If dt IsNot Nothing AndAlso + dt.Rows.Count > 0 AndAlso + Not IsDBNull(dt.Rows(0).Item("GesamtSicherheitsSaldo")) Then + + saldo = Convert.ToDecimal( + dt.Rows(0).Item("GesamtSicherheitsSaldo") + ) + End If + + + brgakto_gs_aktSaldo = CDbl(saldo) + + + If showMessage Then + MsgBox( + "Saldo zum Stichtag " & + datumBis.ToShortDateString() & + ":" & vbNewLine & + brgakto_gs_aktSaldo.ToString("N2") + ) + End If + + + If Not Stichtag.HasValue Then + updateSaldo() + End If + + + Return brgakto_gs_aktSaldo.ToString() + + End Function + Public Function getReferenzbetrag(nowDate As Date) As Double Try diff --git a/VERAG_PROG_ALLGEMEIN/Classes/cIDS.vb b/VERAG_PROG_ALLGEMEIN/Classes/cIDS.vb index 6ddd193d..110d9ea9 100644 --- a/VERAG_PROG_ALLGEMEIN/Classes/cIDS.vb +++ b/VERAG_PROG_ALLGEMEIN/Classes/cIDS.vb @@ -3,6 +3,7 @@ Imports System.Data.SqlClient Imports System.IO Imports System.Net Imports System.Reflection +Imports System.Windows.Forms Public Class cIDS @@ -757,6 +758,77 @@ Public Class cIDS End Function + + + Function genIDSMautberichtDatatByKdNr(KdNr As String, rechnungsdatum As Date, art As String, Gruppierung_nach_Ort As Boolean) As DataTable + + + Dim dt As New DataTable + + Dim displayFilter = False + Dim sqlstr As String = "" + + Dim sqljoin_nachOrt As String = "" + Dim sqlgroup_nachOrt = "" + Dim sqlselect_nachOrt = "" + If Gruppierung_nach_Ort Then + sqljoin_nachOrt = "INNER JOIN tbl_IDS_Stationen ON tblIDSTransactionsNew.OutletCountryCode = tbl_IDS_Stationen.OutletCountryCode and tblIDSTransactionsNew.OutletCode = tbl_IDS_Stationen.OutletCode and tbl_IDS_Stationen.[OutletCountryCode]=740543" + sqlgroup_nachOrt = ",tbl_IDS_Stationen.OutletOrt" + sqlselect_nachOrt = "tbl_IDS_Stationen.OutletOrt," + End If + + + Select Case art + Case "IDS" 'Offert17 + + sqlstr = "SELECT Adressen.AdressenNr, Adressen.[Name 1], Adressen.[Name 2], Adressen.Straße, Adressen.LandKz, Adressen.PLZ, Adressen.Ort, Adressen.UstIdKz, Adressen.UstIdNr, tblIDSTransactionsNew.[CustomerCode], tblIDSTransactionsNew.[OutletCountry], tbl_IDS_Produkte.ProductDescription, tbl_IDS_Länder.Steuersatz, tblIDSTransactionsNew.Rechenwert, tblIDSTransactionsNew.Kz, Sum(tblIDSTransactionsNew.[TransactionVolume]) AS Liter, Sum(tblIDSTransactionsNew.[TotalNetAmount]) AS Nettobetrag, Sum(tblIDSTransactionsNew.[VATAmount]) AS Steuerbetrag, + Case when Sum([TransactionVolume]) =0 THEN 0 ELSE Sum([TotalNetAmount])/Sum([TransactionVolume]) END AS NettopreisProLiter, + Sum(tblIDSTransactionsNew.Rabattbetrag) As [SummevonRabattbetrag], + Case when Sum([TransactionVolume]) =0 THEN 0 ELSE Sum([Rabattbetrag])/Sum([TransactionVolume]) END AS RabattbetragProLiter + FROM((tblIDSTransactionsNew INNER JOIN tbl_IDS_Länder ON tblIDSTransactionsNew.[OutletCountryCode] = tbl_IDS_Länder.OutletCountryCode) INNER JOIN tbl_IDS_Produkte On tblIDSTransactionsNew.[ProductTypeCode] = tbl_IDS_Produkte.ProductTypeCode ) INNER JOIN Adressen On tblIDSTransactionsNew.KdNrVERAG = Adressen.AdressenNr + Where cast(tblIDSTransactionsNew.YearMonthDay As Date) = '" & rechnungsdatum.ToShortDateString & "' AND tblIDSTransactionsNew.[OutletCountryCode]<>740543 AND tblIDSTransactionsNew.KdNrVERAG = " & KdNr & " + GROUP BY Adressen.AdressenNr, Adressen.[Name 1], Adressen.[Name 2], Adressen.Straße, Adressen.LandKz, Adressen.PLZ, Adressen.Ort, Adressen.UstIdKz, Adressen.UstIdNr, tblIDSTransactionsNew.[CustomerCode], tblIDSTransactionsNew.[OutletCountry], tbl_IDS_Produkte.ProductDescription, tbl_IDS_Länder.Steuersatz, tblIDSTransactionsNew.Rechenwert, tblIDSTransactionsNew.Kz" + + + + Case "IDS_AT" 'Offert21 + + sqlstr = " SELECT Adressen.AdressenNr, Adressen.[Name 1], Adressen.[Name 2], Adressen.Straße, Adressen.LandKz, Adressen.PLZ, Adressen.Ort, Adressen.UstIdKz, Adressen.UstIdNr, tblIDSTransactionsNew.[CustomerCode], CASE WHEN tblIDSTransactionsNew.OutletCode BETWEEN 4473 And 4474 THEN 'Austria Suben' ELSE tblIDSTransactionsNew.OutletCountry END AS OutletCountry, tbl_IDS_Produkte.ProductDescription," & sqlselect_nachOrt & " tbl_IDS_Länder.Steuersatz, tblIDSTransactionsNew.Rechenwert, tblIDSTransactionsNew.Kz, Sum(tblIDSTransactionsNew.[TransactionVolume]) AS Liter, Sum(tblIDSTransactionsNew.[TotalNetAmount]) AS Nettobetrag, Sum(tblIDSTransactionsNew.[VATAmount]) AS Steuerbetrag, + Case when Sum([TransactionVolume]) =0 THEN 0 ELSE Sum([TotalNetAmount])/Sum([TransactionVolume]) END AS NettopreisProLiter, + Sum(tblIDSTransactionsNew.Rabattbetrag) As [SummevonRabattbetrag], + Case when Sum([TransactionVolume]) =0 THEN 0 ELSE Sum([Rabattbetrag])/Sum([TransactionVolume]) END AS RabattbetragProLiter + FROM tblIDSTransactionsNew INNER JOIN tbl_IDS_Länder ON tblIDSTransactionsNew.[OutletCountryCode] = tbl_IDS_Länder.OutletCountryCode INNER JOIN tbl_IDS_Produkte On tblIDSTransactionsNew.[ProductTypeCode] = tbl_IDS_Produkte.ProductTypeCode " & sqljoin_nachOrt & " INNER JOIN Adressen On tblIDSTransactionsNew.KdNrVERAG = Adressen.AdressenNr + Where cast(tblIDSTransactionsNew.YearMonthDay As Date) = '" & rechnungsdatum.ToShortDateString & "' And tblIDSTransactionsNew.[OutletCountryCode]=740543 AND tblIDSTransactionsNew.KdNrVERAG = " & KdNr & " + GROUP BY Adressen.AdressenNr, Adressen.[Name 1], Adressen.[Name 2], Adressen.Straße, Adressen.LandKz, Adressen.PLZ, Adressen.Ort, Adressen.UstIdKz, Adressen.UstIdNr, tblIDSTransactionsNew.[CustomerCode], CASE WHEN tblIDSTransactionsNew.OutletCode BETWEEN 4473 AND 4474 THEN 'Austria Suben' ELSE tblIDSTransactionsNew.OutletCountry END, tbl_IDS_Produkte.ProductDescription, tbl_IDS_Länder.Steuersatz, tblIDSTransactionsNew.Rechenwert, tblIDSTransactionsNew.Kz" & sqlgroup_nachOrt + + End Select + + + dt = SQL.loadDgvBySql_Param(sqlstr, "FMZOLL") + + Return dt + + + + End Function + + Public Function getCurrentInvoicedate(kdNr As String) As String + + Dim datum As String = "" + + If kdNr <> "" AndAlso IsNumeric(kdNr) Then + Dim rechnungsdatum As String = SQL.getValueTxtBySql(" select top(1) cast(tblIDSTransactionsNew.YearMonthDay As Date) from tblIDSTransactionsNew Where tblIDSTransactionsNew.KdNrVERAG = " & kdNr & " order by tblIDSTransactionsNew.YearMonthDay desc", "FMZOLL") + If rechnungsdatum <> "" AndAlso IsDate(rechnungsdatum) Then + datum = rechnungsdatum + End If + End If + + Return datum + + End Function + + + Public Class Paramter Shared apiSettingsloaded As Boolean = False diff --git a/VERAG_PROG_ALLGEMEIN/Classes/cMDMZinsberechnung.vb b/VERAG_PROG_ALLGEMEIN/Classes/cMDMZinsberechnung.vb index 13b732d4..e4edd066 100644 --- a/VERAG_PROG_ALLGEMEIN/Classes/cMDMZinsberechnung.vb +++ b/VERAG_PROG_ALLGEMEIN/Classes/cMDMZinsberechnung.vb @@ -181,7 +181,7 @@ Public Class cMDMZinsberechnung Using conn As SqlConnection = SQL.GetNewOpenConnectionFMZOLL() - Using cmd As New SqlCommand("SELECT id,belegNr,belegDatum,buchungstext,zahlungsBetrag,zahlungDatum, ueberschreitungInTagen, zinssatz,zinsbetrag, zahlungsperiode_start,zahlungsperiode_ende + Using cmd As New SqlCommand("SELECT id,belegNr,belegDatum,buchungstext,zahlungsBetrag,zahlungDatum, ueberschreitungInTagen, zinssatz,zinsbetrag, zahlungsperiode_start,zahlungsperiode_ende, faelligkeitsDatum FROM tblMDM_Zinsberechnung diff --git a/VERAG_PROG_ALLGEMEIN/Classes/cNCTSGestellungsadressen.vb b/VERAG_PROG_ALLGEMEIN/Classes/cNCTSGestellungsadressen.vb index 826b029b..17d7e096 100644 --- a/VERAG_PROG_ALLGEMEIN/Classes/cNCTSGestellungsadressen.vb +++ b/VERAG_PROG_ALLGEMEIN/Classes/cNCTSGestellungsadressen.vb @@ -64,6 +64,10 @@ Public Class cNCTSGestellungsadressen Public Function SAVE() As Boolean Dim list As List(Of VERAG_PROG_ALLGEMEIN.SQLVariable) = getParameterList() + If Not VERAG_PROG_ALLGEMEIN.cProgramFunctions.ValidateSQLFieldLengths(list, "tblNCTSGestellungsadressen", "", "FMZOLL") Then + Return False + End If + Dim sqlstr = " BEGIN TRAN IF EXISTS(SELECT * FROM tblNCTSGestellungsadressen WITH(updlock,serializable) WHERE nga_id=@nga_id) " & " BEGIN " & getUpdateCmd() & " END " & diff --git a/VERAG_PROG_ALLGEMEIN/Classes/cSMS.vb b/VERAG_PROG_ALLGEMEIN/Classes/cSMS.vb index 6dd11e98..08106028 100644 --- a/VERAG_PROG_ALLGEMEIN/Classes/cSMS.vb +++ b/VERAG_PROG_ALLGEMEIN/Classes/cSMS.vb @@ -481,6 +481,8 @@ Public Class cSMS If Originator = "" Then Originator = absenderFirma If Originator.Length > 11 Then Originator = Originator.Substring(0, 11) + Message = System.Text.RegularExpressions.Regex.Replace(Message, "\r\n|\r|\n", ", ") + Dim json As New Chilkat.JsonObject '--------------------------------------------- diff --git a/VERAG_PROG_ALLGEMEIN/Classes/cTrdInvoice.vb b/VERAG_PROG_ALLGEMEIN/Classes/cTrdInvoice.vb index 5365e6fc..4983add4 100644 --- a/VERAG_PROG_ALLGEMEIN/Classes/cTrdInvoice.vb +++ b/VERAG_PROG_ALLGEMEIN/Classes/cTrdInvoice.vb @@ -201,7 +201,7 @@ Public Class cTrdInvoice Using conn As SqlConnection = SQL.GetNewOpenConnectionFMZOLL() - Using cmd As New SqlCommand(" SELECT tblTrdinInvoice.Rechnungsdatum, tblTrdinInvoice.Rechnungsnummer, tblTrdinInvoice.SteuerbetragLokal,(SteuerpflichtigerBetragLokal+SteuerfreierBetragLokal) as Nettobetrag , tblTrdinInvoice.UStVAn_ID, tblTrdinInvoice.FilialenNr + Using cmd As New SqlCommand(" SELECT tblTrdinInvoice.Rechnungsdatum, tblTrdinInvoice.Rechnungsnummer, tblTrdinInvoice.SteuerbetragLokal,(SteuerpflichtigerBetragLokal) as Nettobetrag , tblTrdinInvoice.UStVAn_ID, tblTrdinInvoice.FilialenNr FROM tblTrdinInvoice WHERE tblTrdinInvoice.Rechnungsdatum Between @von And @bis AND tblTrdinInvoice.SteuerbetragLokal<>0 AND tblTrdinInvoice.RechnungsKundenNr=@AdressenNr AND tblTrdinInvoice.WährungLokal='EUR'" & IIf(Archiv, " ", " AND isnull(tblTrdinInvoice.UStVAn_ID,0) = 0 ") & " ORDER BY tblTrdinInvoice.Rechnungsdatum, tblTrdinInvoice.Rechnungsnummer", conn) diff --git a/VERAG_PROG_ALLGEMEIN/Classes/cUTA.vb b/VERAG_PROG_ALLGEMEIN/Classes/cUTA.vb index e1318c1c..5e4e55e2 100644 --- a/VERAG_PROG_ALLGEMEIN/Classes/cUTA.vb +++ b/VERAG_PROG_ALLGEMEIN/Classes/cUTA.vb @@ -953,6 +953,16 @@ Public Class cUTA Sub New() End Sub + Sub New(RechnungsNr, KundenNr, Datum, DocumentTyp) + Me.RechnungsNr = RechnungsNr + Me.KundenNr = KundenNr + Me.Datum = Datum + Me.DocumentTyp = DocumentTyp + LOAD(RechnungsNr, KundenNr, Datum, DocumentTyp) + + 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("Id", Id,, True)) @@ -978,6 +988,38 @@ Public Class cUTA Return SQL.doSQLVarList(sqlstr, "FMZOLL", , list) End Function + Public Sub LOAD(RechnungsNr As String, KundenNr As Integer, Datum As Date, DocumentTyp As String) + Try + hasEntry = False + Using conn As SqlConnection = SQL.GetNewOpenConnectionFMZOLL() + Using cmd As New SqlCommand("Select * FROM tblUTADocuments WHERE Datum=@Datum AND KundenNr = @KundenNr AND RechnungsNr=@RechnungsNr AND DocumentTyp = @DocumentTyp ", conn) + cmd.Parameters.AddWithValue("@Datum", Datum) + cmd.Parameters.AddWithValue("@KundenNr", KundenNr) + cmd.Parameters.AddWithValue("@RechnungsNr", RechnungsNr) + cmd.Parameters.AddWithValue("@DocumentTyp", DocumentTyp) + + 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.MethodBase.GetCurrentMethod.Name) + End Try + End Sub + Public Sub LOAD() Try hasEntry = False diff --git a/VERAG_PROG_ALLGEMEIN/DATENSERVER/cDATENSERVER.vb b/VERAG_PROG_ALLGEMEIN/DATENSERVER/cDATENSERVER.vb index 3fd10af7..2a04c7c5 100644 --- a/VERAG_PROG_ALLGEMEIN/DATENSERVER/cDATENSERVER.vb +++ b/VERAG_PROG_ALLGEMEIN/DATENSERVER/cDATENSERVER.vb @@ -337,8 +337,9 @@ Public Class cDATENSERVER Public Function insertDataToDATENSERVER(srcPath, Optional bezeichnung = "", Optional endung = "", Optional allowMsg = True, Optional coll_archiv = False) As Boolean 'Datei musss schon am Datenserver liegen, wird nciht mehr kopiert!!!!! + Try - If endung = "" Then Dim fi As New System.IO.DirectoryInfo(srcPath) : endung = fi.Extension + If endung = "" Then Dim fi As New System.IO.DirectoryInfo(srcPath) : endung = fi.Extension ' If bezeichnung = "" Then bezeichnung = System.IO.Path.GetFileName(srcPath) : endung = "" If bezeichnung = "" Then bezeichnung = da_name replaceInvalidCahr(bezeichnung) @@ -351,6 +352,13 @@ Public Class cDATENSERVER If DATA_LIST.ADD_WOcopy(srcPath, bezeichnung, "", coll_archiv) Then Return True End If + + Catch ex As Exception + + VERAG_PROG_ALLGEMEIN.cErrorHandler.ERR(ex.Message, "Pfad: " & srcPath & vbNewLine & vbNewLine & ex.StackTrace, System.Reflection.MethodBase.GetCurrentMethod.Name, VERAG_PROG_ALLGEMEIN.ERROR_OP.MAIL) + Return False + End Try + Return False End Function @@ -1266,6 +1274,48 @@ Public Class cFormularManager End If End Sub + Public Shared Function convertPictureToPDF(path As String) As String + + If Not File.Exists(path) Then + Throw New FileNotFoundException("Picture not found.", path) + End If + + Dim outputPath As String = getTMPPath_PDF() + + Dim pdfImage As Spire.Pdf.Graphics.PdfImage = pdfImage.FromFile(path) + + Dim doc As New Spire.Pdf.PdfDocument() + + Try + Dim page As PdfPageBase = doc.Pages.Add() + + Dim pageWidth As Single = page.ActualSize.Width + Dim pageHeight As Single = page.ActualSize.Height + + 'Seitenverhältnis beibehalten + Dim scaleX As Single = pageWidth / pdfImage.Width + Dim scaleY As Single = pageHeight / pdfImage.Height + Dim scale As Single = Math.Min(scaleX, scaleY) + + Dim imageWidth As Single = pdfImage.Width * scale + Dim imageHeight As Single = pdfImage.Height * scale + + 'Bild zentrieren + Dim x As Single = (pageWidth - imageWidth) / 2 + Dim y As Single = (pageHeight - imageHeight) / 2 + + page.Canvas.DrawImage(pdfImage, 0, 0) + + doc.SaveToFile(outputPath) + + Finally + doc.Close() + End Try + + + Return outputPath + End Function + @@ -1527,6 +1577,7 @@ Public Class cFormularManager + Public Shared Function getPDFViaSpirePDF_FromURL(URL As String, Optional targetPath As String = "") As String Try If targetPath = "" Then targetPath = getTMPPath_PDF() @@ -2377,17 +2428,27 @@ Public Class DATENVERVER_OPTIONS kdnr_path = kdnr End If If kategorie <> "" Then - Dim dir = "" - dir &= rootDir - dir &= kategorie & "\" - dir &= If(ordner IsNot Nothing AndAlso ordner <> "", ordner & "\", "") - dir &= If(kdnr_path <> "", kdnr_path & "\", "") - dir &= If(da_uOrdner1 IsNot Nothing AndAlso da_uOrdner1 <> "", da_uOrdner1 & "\", "") - dir &= If(da_uOrdner2 IsNot Nothing AndAlso da_uOrdner2 <> "", da_uOrdner2 & "\", "") - dir &= If(da_uOrdner3 IsNot Nothing AndAlso da_uOrdner3 <> "", da_uOrdner3 & "\", "") + Dim dir As String = Path.Combine( + rootDir, + kategorie, + If(String.IsNullOrWhiteSpace(ordner), "", ordner), + If(String.IsNullOrWhiteSpace(kdnr_path), "", kdnr_path), + If(String.IsNullOrWhiteSpace(da_uOrdner1), "", da_uOrdner1), + If(String.IsNullOrWhiteSpace(da_uOrdner2), "", da_uOrdner2), + If(String.IsNullOrWhiteSpace(da_uOrdner3), "", da_uOrdner3)) If Not onlyordner Then If Not System.IO.Directory.Exists(dir) Then - System.IO.Directory.CreateDirectory(dir) + Try + If Not Directory.Exists(dir) Then + Directory.CreateDirectory(dir) + End If + + Catch ex As UnauthorizedAccessException + VERAG_PROG_ALLGEMEIN.cErrorHandler.ERR(ex.Message, "Fehler in der Funktion '" & System.Reflection.MethodInfo.GetCurrentMethod.Name & "'" & vbNewLine & vbNewLine & "Keine Berechtigung für den Ordner: " & dir & Environment.NewLine & "Windows-Benutzer: " & System.Security.Principal.WindowsIdentity.GetCurrent().Name & vbNewLine & vbNewLine & ex.StackTrace, System.Reflection.MethodInfo.GetCurrentMethod.Name) + + Catch ex As IOException + VERAG_PROG_ALLGEMEIN.cErrorHandler.ERR(ex.Message, "Fehler beim Zugriff auf den Ordner: " & dir & vbNewLine & vbNewLine & ex.StackTrace, System.Reflection.MethodInfo.GetCurrentMethod.Name) + End Try End If Dim zusatz = "" : Dim zusatzcnt = 1 While System.IO.File.Exists(dir & dateiName & zusatz & If(bezeichnung.ToString.EndsWith(endung), "", endung)) @@ -2451,7 +2512,7 @@ Public Class DATENVERVER_OPTIONS End Function - Public Shared Function addZugferdXML(pdfPath As String, xmlPath As String) As String + Public Shared Function addZugferdXML(pdfPath As String, xmlPath As String, Optional fixedIssuerAssignedID As Boolean = True) As String Dim tempFile As String = pdfPath & ".tmp" @@ -2461,6 +2522,12 @@ Public Class DATENVERVER_OPTIONS Dim xmlBytes = File.ReadAllBytes(xmlPath) + + If fixedIssuerAssignedID Then + fixIssuerAssignedID(xmlBytes) + End If + + Dim fileName As String = "factur-x.xml" If HasAttachment(pdf, fileName) Then @@ -2496,6 +2563,75 @@ Public Class DATENVERVER_OPTIONS End Function + + + Public Shared Sub fixIssuerAssignedID(ByRef xmlBytes As Byte()) + + + Dim xmlDoc As New System.Xml.XmlDocument() + xmlDoc.PreserveWhitespace = True + + Using ms As New MemoryStream(xmlBytes) + xmlDoc.Load(ms) + End Using + + Dim ns As New System.Xml.XmlNamespaceManager(xmlDoc.NameTable) + + ns.AddNamespace( + "ram", + "urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100" + ) + + Dim documents = xmlDoc.SelectNodes( + "//ram:AdditionalReferencedDocument", + ns + ) + + For Each document As XmlElement In documents + + Dim idNode As XmlNode = + document.SelectSingleNode("ram:ID", ns) + + If idNode Is Nothing Then + Continue For + End If + + ' Wert der bisherigen ID merken + Dim idValue As String = idNode.InnerText + + ' Neue IssuerAssignedID erzeugen + Dim issuerAssignedID As XmlElement = + xmlDoc.CreateElement( + "ram", + "IssuerAssignedID", + "urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100" + ) + + issuerAssignedID.InnerText = idValue + + ' ID entfernen + document.RemoveChild(idNode) + + ' IssuerAssignedID an ERSTE Stelle setzen + document.InsertBefore( + issuerAssignedID, + document.FirstChild + ) + + Next + + Using ms As New MemoryStream() + xmlDoc.Save(ms) + xmlBytes = ms.ToArray() + End Using + + + End Sub + + + + + Private Shared Function HasAttachment(pdf As iText.Kernel.Pdf.PdfDocument, fileName As String) As Boolean Dim catalog = pdf.GetCatalog().GetPdfObject() @@ -2606,7 +2742,7 @@ Public Class DATENVERVER_OPTIONS xmp.SetStructField(pdfaExt, "schemas[1]", pdfaSchema, "namespaceURI", fxNs) xmp.SetStructField(pdfaExt, "schemas[1]", pdfaSchema, "prefix", "fx") - ' 🔥 property MUSS rdf:Seq sein! + ' property MUSS rdf:Seq sein! xmp.SetStructField( pdfaExt, "schemas[1]", @@ -2624,7 +2760,7 @@ Public Class DATENVERVER_OPTIONS Dim arrayPath = "schemas[1]/pdfaSchema:property" - ' 🔥 Item in rdf:Seq hinzufügen + ' Item in rdf:Seq hinzufügen xmp.AppendArrayItem( pdfaExt, arrayPath, diff --git a/VERAG_PROG_ALLGEMEIN/Schnittstellen/MIC/cMIC.vb b/VERAG_PROG_ALLGEMEIN/Schnittstellen/MIC/cMIC.vb index bb0c144b..fffa2e4a 100644 --- a/VERAG_PROG_ALLGEMEIN/Schnittstellen/MIC/cMIC.vb +++ b/VERAG_PROG_ALLGEMEIN/Schnittstellen/MIC/cMIC.vb @@ -252,5 +252,13 @@ End Function + Public Class Paramter + + Shared SQL As New VERAG_PROG_ALLGEMEIN.SQL + Shared Function GET_PARAM_ByName(tcParam_name, TESTSYSTEM) As String + Return SQL.getValueTxtBySql("SELECT TOP 1 [Param_value] FROM [tblPartnersystem_Paramter] WHERE Param_system='MIC' AND [Param_name]='" & tcParam_name & "' AND Param_testsystem = " & IIf(TESTSYSTEM, 1, 0), , , SQL.GetNewOpenConnectionFMZOLL_SYSTEM(TESTSYSTEM)) + End Function + End Class + End Class diff --git a/VERAG_PROG_ALLGEMEIN/Schnittstellen/cSyska_Interface.vb b/VERAG_PROG_ALLGEMEIN/Schnittstellen/cSyska_Interface.vb index ff4b6184..abae6fa0 100644 --- a/VERAG_PROG_ALLGEMEIN/Schnittstellen/cSyska_Interface.vb +++ b/VERAG_PROG_ALLGEMEIN/Schnittstellen/cSyska_Interface.vb @@ -6,15 +6,44 @@ Public Class cSyska_Interface 'STAMMDATEN Shared Function getStammdaten(FiBuSchnittstelleNr) As DataTable - Dim sqlStr = " Select KundenNrZentrale As [Konto-Nr],isnull([Name 1],'') as Name,isnull([Name 2],'') as [Name2],(isnull(UstIdKz,'') + isnull(UstIdNr,'')) as [UST-Id-Nummer],isnull(UstIdGeprüft,'') as [UID-Datum],[Strasse],Adressen.landkz ,PLZ,LTRIM([Ort]) as Ort,isnull(BLZ,'') as [BLZ],isnull(KTO,'') as [KTO], CASE WHEN CAST(Zahlungsziel as VARCHAR(3)) ='0' THEN '' ELSE CAST(Zahlungsziel as VARCHAR(3)) END as [ZZiel],/*'' as [SPz],'' as [STg],*/isnull([E-Mail],'') as [mail],'' AS Info1,'' AS Inf2, Zahlungsziel2, Zahlungsziel3,[E-Mail],[Telefon] ,Telefax " - sqlStr &= " ,Ordnungsbegriff ,Kunden.Währungscode,Anrede,Ansprechpartner,Lastschrift,Kunden.[Eingegeben am] as EingegebenAm" - sqlStr &= " FROM Adressen INNER JOIN Kunden ON Kundennr=AdressenNr " - sqlStr &= " LEFT JOIN tblKundenErweitert ON KundenNr=kde_KundenNr " - sqlStr &= " LEFT JOIN [Länderverzeichnis für die Außenhandelsstatistik] as St ON St.LandKz=Adressen.LandKz " - sqlStr &= " LEFT JOIN Währungstabelle ON St.LandNr = Währungstabelle.Währungsschlüssel " - sqlStr &= " WHERE FiBuSchnittstelle=1 AND Auswahl='A' AND FiBuSchnittstelleNr='" & FiBuSchnittstelleNr & "' " - sqlStr &= " Order by [Konto-Nr] " - Return SQL.loadDgvBySql(sqlStr, "FMZOLL") + + Dim SQLString = "Select Top(100) + KundenNrZentrale As [Konto-Nr], + isnull([Name 1],'') as Name, + isnull([Name 2],'') as [Name2], + (isnull(UstIdKz,'') + isnull(UstIdNr,'')) as [UST-Id-Nummer], + isnull(UstIdGeprüft,'') as [UID-Datum], + [Strasse], + Adressen.landkz , + PLZ,LTRIM([Ort]) as Ort, + isnull(BLZ,'') as [BLZ], + isnull(KTO,'') as [KTO], + CASE WHEN CAST(Zahlungsziel as VARCHAR(3)) ='0' THEN '' ELSE CAST(Zahlungsziel as VARCHAR(3)) END as [ZZiel], + isnull([E-Mail],'') as [mail], + '' AS Info1, + '' AS Inf2, + Zahlungsziel2, + Zahlungsziel3, + [E-Mail], + [Telefon] , + Telefax,Ordnungsbegriff, + Kunden.Währungscode, + Anrede, + Ansprechpartner, + Lastschrift, + Kunden.[Eingegeben am] as EingegebenAm, + isnull(tblKundenErweitert.kde_BezFIBU,'') as [Kürzel], + 2811 as [präf. Bank], + isnull(tblKundenErweitert.kde_Fakturierung_Sprache,'') as Sprache, + isnull(Adressen.Steuernummer,'')as [SteuerNr], + isnull(tblKundenErweitert.kde_betreuer,'') as Betreuer + FROM Adressen INNER JOIN Kunden ON Kundennr=AdressenNr + Left Join tblKundenErweitert ON KundenNr=kde_KundenNr + Left Join [Länderverzeichnis für die Außenhandelsstatistik] as St ON St.LandKz=Adressen.LandKz + Left Join Währungstabelle ON St.LandNr = Währungstabelle.Währungsschlüssel + WHERE FiBuSchnittstelle = 0 And Auswahl ='A' AND FiBuSchnittstelleNr='" & FiBuSchnittstelleNr & "' and KundenNr = 203152 Order by [Konto-Nr]" + + Return SQL.loadDgvBySql(SQLString, "FMZOLL") End Function ' Shared Function getStammdatenTEST(FiBuSchnittstelleNr) As DataTable @@ -80,9 +109,6 @@ Public Class cSyska_Interface Dim cleanStringName As String = Regex.Replace(row("Name"), "[^A-Za-z0-9\-/]", "").Replace(" ", "").ToUpper Dim Lastschrift = CBool(row("Lastschrift")) - 'If FormatStringSYS(row("Name2"), 50) <> "" Then - ' MsgBox(FormatStringSYS(row("Name2"), 50) & vbTab) - 'End If getPersonenKto = "" getPersonenKto &= row("Konto-Nr") & vbTab getPersonenKto &= FormatStringSYS(cleanStringName, 2) & row("Konto-Nr") & vbTab @@ -113,7 +139,73 @@ Public Class cSyska_Interface getPersonenKto &= FormatStringSYS(row("Telefax")) & vbTab getPersonenKto &= FormatStringSYS(row("E-Mail")) & vbTab getPersonenKto &= vbTab - ' getPersonenKto &= vbTab + + End Function + + + Public Shared Function getPersonenKto_MDM(row As DataRow) As String + + Dim LandKz = row("LandKz") + Dim Gegenkontonummer = "" + Dim Gegenkontonummer2 = "" + If LandKz Is DBNull.Value Or LandKz.trim = "" Or LandKz = "A" Then + Gegenkontonummer = "4000" ' Erl. 20% + Gegenkontonummer2 = "4000" ' Erl. 20% + Else + If CBool(SQL.DLookup("[MitgliedslandEU]", "[Währungstabelle]", "[LandKz]='" & LandKz & "'", "FMZOLL", False)) Then + Gegenkontonummer = "4020" ' Erl. 0% EU + Gegenkontonummer2 = "4020" ' Erl. 0% EU + Else + Gegenkontonummer = "4021" ' Erl. 0% 3.Land + Gegenkontonummer2 = "4021" ' Erl. 0% 3.Land + End If + End If + + Dim cleanStringName As String = Regex.Replace(row("Name"), "[^A-Za-z0-9\-/]", "").Replace(" ", "").ToUpper + + Dim SteuerNr As String = "" + + If Not IsDBNull(row("SteuerNr")) Then + SteuerNr = Regex.Replace(row("SteuerNr").ToString(), "[^0-9]", "") + End If + + Dim Lastschrift = CBool(row("Lastschrift")) + getPersonenKto_MDM = "" + getPersonenKto_MDM &= row("Konto-Nr") & vbTab + getPersonenKto_MDM &= FormatStringSYS(row("Kürzel"), 24) & vbTab + getPersonenKto_MDM &= FormatStringSYS(row("Name"), 50) & vbTab + getPersonenKto_MDM &= FormatStringSYS(row("Name2"), 50) & vbTab + getPersonenKto_MDM &= FormatStringSYS(row("Strasse"), 50) & vbTab + getPersonenKto_MDM &= FormatStringSYS(row("PLZ"), 20) & vbTab + getPersonenKto_MDM &= FormatStringSYS(row("Ort"), 50) & vbTab + getPersonenKto_MDM &= cProgramFunctions.getISO2Land(FormatStringSYS(LandKz, 5)) & vbTab + getPersonenKto_MDM &= CDate(row("EingegebenAm")).ToShortDateString & vbTab 'Eröffnungsdatum + 'getPersonenKto_MDM &= Gegenkontonummer & vbTab + getPersonenKto_MDM &= vbTab 'Bankname + getPersonenKto_MDM &= If(Lastschrift, row("BLZ"), "") & vbTab + getPersonenKto_MDM &= If(Lastschrift, row("KTO"), "") & vbTab + getPersonenKto_MDM &= FormatStringSYS(row("Name"), 50) & vbTab 'Inhaber + getPersonenKto_MDM &= "00" & vbTab 'Skontotage + getPersonenKto_MDM &= If(row("ZZiel") IsNot DBNull.Value AndAlso row("ZZiel") <> String.Empty, CDbl(row("ZZiel")).ToString("00"), "") & vbTab + getPersonenKto_MDM &= "00,00" & vbTab 'Skonto + getPersonenKto_MDM &= "01" & vbTab 'Mahnkennung + getPersonenKto_MDM &= FormatStringSYS(row("UST-Id-Nummer"), 50) & vbTab + 'getPersonenKto_MDM &= vbTab + getPersonenKto_MDM &= row("Währungscode") & vbTab + 'getPersonenKto_MDM &= vbTab 'Forderungsonto + 'getPersonenKto_MDM &= vbTab + 'getPersonenKto_MDM &= Gegenkontonummer2 & vbTab 'Platzhalter?? + getPersonenKto_MDM &= FormatStringSYS(row("Anrede") & " " & row("Ansprechpartner"), 100) & vbTab + 'getPersonenKto_MDM &= vbTab + getPersonenKto_MDM &= FormatStringSYS(row("Telefon")) & vbTab + getPersonenKto_MDM &= FormatStringSYS(row("Telefax")) & vbTab + getPersonenKto_MDM &= FormatStringSYS(row("E-Mail")) & vbTab + getPersonenKto_MDM &= FormatStringSYS(row("präf. Bank")) & vbTab + getPersonenKto_MDM &= FormatStringSYS(row("Sprache")) & vbTab + getPersonenKto_MDM &= FormatStringSYS(SteuerNr) & vbTab + getPersonenKto_MDM &= FormatStringSYS(row("Betreuer")) & vbTab + + getPersonenKto_MDM &= vbTab End Function @@ -146,43 +238,50 @@ Public Class cSyska_Interface If True Then 'boolKunden Then '----------------- STAMMDATEN ----------------- Dim dt_Stamm As DataTable = getStammdaten(FiBuSchnittstelleNr) + Dim postfix As String = "" If dt_Stamm IsNot Nothing AndAlso dt_Stamm.Rows.Count > 0 Then - + If FiBuSchnittstelleNr = 19 Then postfix = "MDM_" Dim fileKD As System.IO.StreamWriter - Dim DateinameKD = "AVISO_DEBI_" & Now.ToString("ddMMyyyy_HHmm") & ".txt" + Dim DateinameKD = "AVISO_DEBI_" & Now.ToString("ddMMyyyy_HHmm") & postfix & ".txt" fileKD = My.Computer.FileSystem.OpenTextFileWriter(pathKD & DateinameKD, True, System.Text.Encoding.GetEncoding("iso-8859-15")) - 'fileKD.WriteLine(genStammdatenBeginn()) + 'fileKD.WriteLine(genStammdatenBeginn()) - initKDNr(dt_Stamm) + initKDNr(dt_Stamm) For Each r In dt_Stamm.Rows - fileKD.WriteLine(getPersonenKto(r)) + If FiBuSchnittstelleNr = 19 Then + fileKD.WriteLine(getPersonenKto_MDM(r)) + Else + fileKD.WriteLine(getPersonenKto(r)) + End If + + Next bool_DatenVorhanden = True - fileKD.Close() + fileKD.Close() + + 'In Archiv sichern + If pathArchivKD <> "" Then + If Not System.IO.Directory.Exists(pathArchivKD) Then System.IO.Directory.CreateDirectory(pathArchivKD) + If pathKD <> pathArchivKD Then System.IO.File.Copy(pathKD & DateinameKD, pathArchivKD & DateinameKD) + End If + + If bool_DatenVorhanden Then + If OpenFile Then Process.Start(pathKD & DateinameKD) + Else + System.IO.File.Delete(pathKD & DateinameKD) + End If + + 'NOCH NICHT!!! + updateFibu(FiBuSchnittstelleNr) ' UPDATE FiBuSchnittstelle --> 0 - 'In Archiv sichern - If pathArchivKD <> "" Then - If Not System.IO.Directory.Exists(pathArchivKD) Then System.IO.Directory.CreateDirectory(pathArchivKD) - If pathKD <> pathArchivKD Then System.IO.File.Copy(pathKD & DateinameKD, pathArchivKD & DateinameKD) End If - - If bool_DatenVorhanden Then - If OpenFile Then Process.Start(pathKD & DateinameKD) - Else - System.IO.File.Delete(pathKD & DateinameKD) - End If - - 'NOCH NICHT!!! - updateFibu(FiBuSchnittstelleNr) ' UPDATE FiBuSchnittstelle --> 0 - End If - End If diff --git a/VERAG_PROG_ALLGEMEIN/VERAG_Zollanmeldung/cVERAG_CustomsDeclarations.vb b/VERAG_PROG_ALLGEMEIN/VERAG_Zollanmeldung/cVERAG_CustomsDeclarations.vb index 845fc7d1..929e53f1 100644 --- a/VERAG_PROG_ALLGEMEIN/VERAG_Zollanmeldung/cVERAG_CustomsDeclarations.vb +++ b/VERAG_PROG_ALLGEMEIN/VERAG_Zollanmeldung/cVERAG_CustomsDeclarations.vb @@ -225,7 +225,13 @@ Public Class cVERAG_CustomsDeclarations ' CBAM Pattern (HSCode) ' ------------------------------------------------------------ Dim cbamWhere As String = VERAG_PROG_ALLGEMEIN.cGreendeal_CBAM_Trn.BuildCBAMPatternWhereClause("i.zaItem_HSCode") - Dim cbamWhereSnd As String = " AND " & cbamWhere.Replace("i.zaItem_HSCode", "zaItem_HSCode") + Dim cbamWhereSnd As String = " AND " & cbamWhere.Replace("i.zaItem_HSCode", "zaItem_HSCode") & + " AND zaItem_OriginCountry NOT IN ( + 'EU','AT','BE','BG','HR','CY','CZ','DK','EE','FI','FR', + 'DE','GR','HU','IE','IT','LV','LT','LU','MT','NL', + 'PL','PT','RO','SK','SI','ES','SE', + 'CH','NO','IS','LI','XI' + )" Dim cbamWhereISOCntry As String = " i.zaItem_OriginCountry NOT IN ( /*EU-27 (ISO2)*/ @@ -727,6 +733,12 @@ Public Class cVERAG_CustomsDeclarations p.zaParty_Role IN ('CZ','EX','EXP','EXPORTER','CONSIGNOR'))") & " WHERE z.za_ReleaseDate BETWEEN '" & von.ToShortDateString & "' AND '" & bis.ToShortDateString & "' + AND i.zaItem_OriginCountry NOT IN ( + 'EU','AT','BE','BG','HR','CY','CZ','DK','EE','FI','FR', + 'DE','GR','HU','IE','IT','LV','LT','LU','MT','NL', + 'PL','PT','RO','SK','SI','ES','SE', + 'CH','NO','IS','LI','XI' + ) AND EXISTS ( SELECT 1 FROM VERAG.dbo.tblGreendeal_CBAM_Trn t @@ -788,11 +800,19 @@ Public Class cVERAG_CustomsDeclarations Dim prefixes As HashSet(Of String) = New HashSet(Of String)(cbamHsCodes) + Dim excludedCountries As New HashSet(Of String) From { + "EU", "AT", "BE", "BG", "HR", "CY", "CZ", "DK", "EE", "FI", "FR", + "DE", "GR", "HU", "IE", "IT", "LV", "LT", "LU", "MT", "NL", + "PL", "PT", "RO", "SK", "SI", "ES", "SE", + "CH", "NO", "IS", "LI", "XI" + } + Return Me.Items. Where(Function(it) Dim hs As String = If(it.zaItem_HSCode, "").Trim() If hs = "" Then Return False - ' linksseitiger Prefix-Abgleich + Dim origin As String = If(it.zaItem_OriginCountry, "").Trim().ToUpper() + If origin <> "" AndAlso excludedCountries.Contains(origin) Then Return False For Each p In prefixes If hs.StartsWith(p) Then Return True diff --git a/VERAG_PROG_ALLGEMEIN/cProgramFunktions.vb b/VERAG_PROG_ALLGEMEIN/cProgramFunktions.vb index 1f3a6990..d3c35e40 100644 --- a/VERAG_PROG_ALLGEMEIN/cProgramFunktions.vb +++ b/VERAG_PROG_ALLGEMEIN/cProgramFunktions.vb @@ -958,15 +958,17 @@ BindingFlags.Instance Or BindingFlags.NonPublic, Nothing, [Control], New Object( End If - - - mySmtpsvr.UseDefaultCredentials = False mySmtpsvr.Credentials = myCredentials Try 'Msg.BodyEncoding = System.Text.Encoding.GetEncoding("UTF-8") Msg.BodyEncoding = System.Text.Encoding.UTF8 'System.Text.Encoding.GetEncoding("ISO-8859-1") - Msg.From = New MailAddress(eMailfrom) + + If myCredentials.UserName.ToLower.Contains("no-reply") AndAlso eMailfrom.ToString.ToLower.Contains("no-reply") Then + Msg.From = New MailAddress(myCredentials.UserName) + Else + Msg.From = New MailAddress(eMailfrom) + End If If eMailTo IsNot Nothing Then For Each s As String In eMailTo.ToString.Split(";"c) diff --git a/VERAG_PROG_ALLGEMEIN/frmDatumsabfrage.Designer.vb b/VERAG_PROG_ALLGEMEIN/frmDatumsabfrage.Designer.vb index 2404239b..30090b47 100644 --- a/VERAG_PROG_ALLGEMEIN/frmDatumsabfrage.Designer.vb +++ b/VERAG_PROG_ALLGEMEIN/frmDatumsabfrage.Designer.vb @@ -235,7 +235,7 @@ Partial Class frmDatumsabfrage Friend WithEvents btn As Button Friend WithEvents lbl As Label Friend WithEvents Label1 As Label - Friend WithEvents dtp_date As DateTimePicker + Public WithEvents dtp_date As DateTimePicker Friend WithEvents pnlKunde As Panel Public WithEvents cboKundenkreis As VERAG_PROG_ALLGEMEIN.MyComboBox Public WithEvents cbxKunden As CheckBox diff --git a/VERAG_PROG_ALLGEMEIN/frmDatumsabfrage.vb b/VERAG_PROG_ALLGEMEIN/frmDatumsabfrage.vb index 1f43963f..b8892d5c 100644 --- a/VERAG_PROG_ALLGEMEIN/frmDatumsabfrage.vb +++ b/VERAG_PROG_ALLGEMEIN/frmDatumsabfrage.vb @@ -71,7 +71,10 @@ Public Class frmDatumsabfrage End Sub Private Sub frmDatumsabfrage(sender As Object, e As EventArgs) Handles Me.Load - dtp_date.Value = Now.ToShortDateString + + + + 'dtp_date.Value = Now.ToShortDateString pnlKunde.Visible = panelKunde MyPanel2.Visible = panelLaender