From 6339fe8645b5939e189202cf071cc7409e30b5f2 Mon Sep 17 00:00:00 2001 From: "d.breimaier" Date: Fri, 27 Jun 2025 15:19:28 +0200 Subject: [PATCH] FixeTaxe441 bei Sammelrechnung --- SDL/Fakturierung/usrCntlFaktAbrechnung.vb | 14 +- SDL/mdm/frmMDMDatenverarbetiung.vb | 164 ++++++++++++++++------ SDL/seriendruck/usrCntlFakturierung.vb | 10 +- 3 files changed, 138 insertions(+), 50 deletions(-) diff --git a/SDL/Fakturierung/usrCntlFaktAbrechnung.vb b/SDL/Fakturierung/usrCntlFaktAbrechnung.vb index b589fbc7..215e8275 100644 --- a/SDL/Fakturierung/usrCntlFaktAbrechnung.vb +++ b/SDL/Fakturierung/usrCntlFaktAbrechnung.vb @@ -2430,7 +2430,7 @@ Public Class usrCntlFaktAbrechnung Call przFixeTaxe(RECHNUNG) ' Fixe Taxe errechnen Call przPP(RECHNUNG) ' Porto/Papiere errechnen Call przBS415(RECHNUNG) ' Bankspesen errechnen - 'Call setFixeTaxeMin(RECHNUNG, 500, 20) ' Mind Fixe Taxe errechnen + Call setFixeTaxeMin(RECHNUNG, 500) ' Mind Fixe Taxe errechnen 'Me![SteuerpflichtigerGesamtbetrag] = 0.0# 'Me![SteuerfreierGesamtbetrag] = 0.0# @@ -3045,20 +3045,16 @@ Public Class usrCntlFaktAbrechnung ' RECHNUNG.POSITIONEN.Add(FixeTaxePOS) '...und der Wert gesetzt. FixeTaxePOS.Anzahl = 1 - FixeTaxePOS.Preis = getVorzeichen(RECHNUNG) * FixeTaxe + FixeTaxePOS.Preis = getVorzeichen(RECHNUNG) * FixeTaxePOS.[Preis] initSteuerbetraege(RECHNUNG, FixeTaxePOS) End If End Sub - Shared Sub setFixeTaxeMin(ByRef RECHNUNG As VERAG_PROG_ALLGEMEIN.cRechnungsausgang, ByRef minBetrag As Double, fixeTaxe As Double) + Shared Sub setFixeTaxeMin(ByRef RECHNUNG As VERAG_PROG_ALLGEMEIN.cRechnungsausgang, ByRef minBetrag As Double) Dim FixeTaxe_Berechnungbetrag As Double = 0 - If Not CBool(SQL.DLookup("[PP441]", "Filialen", "[FilialenNr]=" & RECHNUNG.FilialenNr, "FMZOLL", False)) Then - Exit Sub - End If - If Not leistungExistsInPos(RECHNUNG, 441) Then Exit Sub 'Schauen, ob die Leistung in den Positionen vorhanden ist For Each POS In RECHNUNG.POSITIONEN @@ -3079,13 +3075,13 @@ Public Class usrCntlFaktAbrechnung FixeTaxePOS.BerechnungsartNr = 1 'RECHNUNG.POSITIONEN.Add(FixeTaxePOS) '...und der Wert gesetzt. - If FixeTaxe_Berechnungbetrag < minBetrag Then + If FixeTaxe_Berechnungbetrag < minBetrag AndAlso CBool(SQL.DLookup("[PP441]", "Filialen", "[FilialenNr]=" & RECHNUNG.FilialenNr, "FMZOLL", False)) Then FixeTaxePOS.Anzahl = 1 Else FixeTaxePOS.Anzahl = 0 End If - FixeTaxePOS.Preis = getVorzeichen(RECHNUNG) * fixeTaxe 'Preis wird bewusst überschrieben!!! + FixeTaxePOS.Preis = getVorzeichen(RECHNUNG) * FixeTaxePOS.Preis 'Preis wird bewusst überschrieben!!! initSteuerbetraege(RECHNUNG, FixeTaxePOS) diff --git a/SDL/mdm/frmMDMDatenverarbetiung.vb b/SDL/mdm/frmMDMDatenverarbetiung.vb index 7ce6c346..f195f4be 100644 --- a/SDL/mdm/frmMDMDatenverarbetiung.vb +++ b/SDL/mdm/frmMDMDatenverarbetiung.vb @@ -1,5 +1,6 @@ Imports System.Data.OleDb Imports System.IO +Imports com.sun.xml.internal.rngom Imports itextsharp.text.pdf Imports MDM_Worker Imports VERAG_PROG_ALLGEMEIN @@ -1220,28 +1221,26 @@ Public Class frmMDMDatenverarbetiung End If Next End If - - If verarbOK Then - 'UPDATE Fakturiert - SQL.doSQL("UPDATE [tblUTAImportNew] set chargedDatetime=GETDATE() where chargedDatetime is null and [Rechnungsdatum] = '" & DateTimePicker2.Text & "' and Kundennummer = " & uta("Customer ID"), "FMZOLL") - End If - If True Then 'cnt Mod 10 = 0 Then - 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() - End If - cnt += 1 - Next - If test Then Return True + 'UPDATE Fakturiert + SQL.doSQL("UPDATE [tblUTAImportNew] set chargedDatetime=GETDATE() where chargedDatetime is null and [Rechnungsdatum] = '" & DateTimePicker2.Text & "' and Kundennummer = " & uta("Customer ID"), "FMZOLL") + End If + If True Then 'cnt Mod 10 = 0 Then + 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() + End If + cnt += 1 + Next + If test Then Return True - ' ANHÄNGE WERDEN NCIHT BENÖTIGT:: - 'Alle Alangen im foglenden VZ löschen und die aktuellen kopieren - Dim dirAnhang = IIf(test, utaParam.ANLAGEN & "TEST\", utaParam.ANLAGEN) - If Directory.Exists(dirAnhang) Then 'Directory.Delete(dirAnhang, True) + ' ANHÄNGE WERDEN NCIHT BENÖTIGT:: + 'Alle Alangen im foglenden VZ löschen und die aktuellen kopieren + Dim dirAnhang = IIf(test, utaParam.ANLAGEN & "TEST\", utaParam.ANLAGEN) + If Directory.Exists(dirAnhang) Then 'Directory.Delete(dirAnhang, True) For Each f In Directory.GetFiles(dirAnhang) Try File.Delete(f) @@ -1250,16 +1249,16 @@ Public Class frmMDMDatenverarbetiung End Try Next End If - If Not Directory.Exists(dirAnhang) Then Directory.CreateDirectory(dirAnhang) - For Each f In Directory.GetFiles(dir) - File.Copy(f, dirAnhang & (New FileInfo(f)).Name, True) - Next - pbPloseAnh_Proz.Value = 100 - txtPloseAnh_Einarbeitung.Text = dt_Main.Rows.Count & " / " & dt_Main.Rows.Count - lblPloseAnh_Proz.Text = "100.00 %" - Return True - End If - Return False + If Not Directory.Exists(dirAnhang) Then Directory.CreateDirectory(dirAnhang) + For Each f In Directory.GetFiles(dir) + File.Copy(f, dirAnhang & (New FileInfo(f)).Name, True) + Next + pbPloseAnh_Proz.Value = 100 + txtPloseAnh_Einarbeitung.Text = dt_Main.Rows.Count & " / " & dt_Main.Rows.Count + lblPloseAnh_Proz.Text = "100.00 %" + Return True + End If + Return False End Function Function genRGAtt_MSE(mseParam As cMSEAPI) As Boolean Dim top = "" @@ -3437,6 +3436,10 @@ Public Class frmMDMDatenverarbetiung Dim sqlstr As String = "" Dim useNettogesamtbetrag As Boolean = False + 'If KdNr = "401715" Or KdNr = "401943" Or KdNr = "402179" Or KdNr = "402598" Or KdNr = "402656" Or KdNr = "402688" Or KdNr = "402719" Or KdNr = "402888" Or KdNr = "402933" Then + 'MsgBox("Test") + 'End If + Dim OFFERTE As New VERAG_PROG_ALLGEMEIN.cOfferte(KdNr, OffertenNr, True) RG.LOAD_OFFERT_POSITIONEN() ' --> OFFERTE MIT ANZAHL >0 und Preis >0 @@ -3636,11 +3639,11 @@ Public Class frmMDMDatenverarbetiung End If 'cFakturierung.setGesamtBetraege(RG,, useNettogesamtbetrag) - 'Call usrCntlFaktAbrechnung.przFixeTaxe(RG) ' Fixe Taxe errechnen -> NICHT NOTWENDIG WEIL 440 nicht FÜR Sammelrechnung verwendet wird! - 'Call usrCntlFaktAbrechnung.przPP(RG) ' Porto/Papiere errechnen -> NICHT NOTWENDIG WEIL 440 nicht FÜR Sammelrechnung verwendet wird! + 'Call usrCntlFaktAbrechnung.przFixeTaxe(RG) ' Fixe Taxe errechnen -> NICHT NOTWENDIG WEIL 440 nicht mehr FÜR Sammelrechnung verwendet wird! + 'Call usrCntlFaktAbrechnung.przPP(RG) ' Porto/Papiere errechnen -> NICHT NOTWENDIG WEIL 440/PP nicht mehr FÜR Sammelrechnung verwendet wird! Call usrCntlFaktAbrechnung.przBS415(RG) ' Bankspesen errechnen - Call usrCntlFaktAbrechnung.setFixeTaxeMin(RG, 500, 20) ' Fixe Taxe 441 errechnen + Call usrCntlFaktAbrechnung.setFixeTaxeMin(RG, 500) ' Fixe Taxe 441 errechnen cFakturierung.setGesamtBetraege(RG,, useNettogesamtbetrag) @@ -3705,12 +3708,6 @@ Public Class frmMDMDatenverarbetiung POS.BGebProzent = o.BGebProzent POS.BGebMinBetrag = o.BGebMinBetrag - If POS.LeistungsNr = 441 Then - MsgBox("") - End If - - - RG.POSITIONEN.Add(POS) @@ -3839,6 +3836,9 @@ Public Class frmMDMDatenverarbetiung Dim cnt = 0 Dim cntTotal = MyDatagridview1.Rows.Count() + checkFixeTaxeImOffert("PLOSE", VERAGKdNr_DT) + + For Each r As DataGridViewRow In MyDatagridview1.Rows 'KUNDEN-NR / PLOSE KD-NR results = VERAGKdNr_DT.Select("PLOSEKundenNr = '" & r.Cells("plose_POLSEKundennummer").Value & "'") @@ -3930,6 +3930,10 @@ Public Class frmMDMDatenverarbetiung ORDER BY cardnumber", "FMZOLL") + Dim dtKunden As DataTable = SQL.loadDgvBySql("SELECT Distinct(Kreditkarten.AdressenNr FROM dbo.tblAsfinagMaut", "FMZOLL") + + checkFixeTaxeImOffert("ASFINAG", dtKunden) + Dim VERAGKdNr = -1 Dim VERAGLeistungsNr = -1 Dim found = False @@ -3956,7 +3960,7 @@ Public Class frmMDMDatenverarbetiung pruefData_UTA = True Try - Dim dtUTAKundennummern As DataTable = SQL.loadDgvBySql("SELECT Distinct(tblUTAImportNew.Kundennummer) + Dim dtUTAKundennummern As DataTable = SQL.loadDgvBySql("Select Distinct(tblUTAImportNew.Kundennummer) FROM tblUTAImportNew LEFT JOIN Adressen ON tblUTAImportNew.Kundennummer = Adressen.UTAKundenNr WHERE cast(tblUTAImportNew.Rechnungsdatum as Date) = '" & DateTimePicker2.Text & "' GROUP BY tblUTAImportNew.Kundennummer, Adressen.UTAKundenNr HAVING (((Adressen.UTAKundenNr) Is Null))", "FMZOLL") @@ -3998,6 +4002,13 @@ Public Class frmMDMDatenverarbetiung End If + Dim dtKundenNr As DataTable = SQL.loadDgvBySql("SELECT Distinct(Adressen.AdressenNr) + FROM tblUTAImportNew LEFT JOIN Adressen ON tblUTAImportNew.Kundennummer = Adressen.UTAKundenNr + WHERE cast(tblUTAImportNew.Rechnungsdatum as Date) = '" & DateTimePicker2.Text & "' + GROUP BY Adressen.AdressenNr", "FMZOLL") + + checkFixeTaxeImOffert("UTA", dtKundenNr) + Dim fehlendeRechnungen As Integer = 0 @@ -4088,6 +4099,16 @@ Public Class frmMDMDatenverarbetiung MsgBox("Es sind " & nichtAufAbgerechnetGesetzteTransactionen & " Transaktionen in der Datenbank, die noch nicht auf VERRECHNET gesetzt sind!" & vbNewLine & "Diese Transaktionen (von Rechnung " & DateTimePicker2.Text & ") müssen aktualisiert werden. (bitte an Administrator wenden)." & IIf(hint <> "", vbNewLine & hint, "")) End If + Dim dt As DataTable = SQL.loadDgvBySql("SELECT Distinct(Adressen.AdressenNr) + FROM [VERAG].[dbo].[tblMSESettlements] as bills + left join [VERAG].[dbo].[tblMSETransactions] as trans on bills.[transaction_id] = trans.[transaction_id] + left join [VERAG].[dbo].[tblMSECustomers] as cust on cust.partner_customer_number = trans.partner_haulier_id + left join [VERAG].[dbo].[tblMSEInvoices] as inv on inv.[invoice_id] = bills.[invoice_number] and inv.customer_number = cust.[customer_id] and trans.transaction_country = inv.country + left join adressen ON cust.[customer_id] = Adressen.MSEKundenNr + WHERE bills.[invoice_date] = '" & DateTimePicker2.Text & "' ", "FMZOLL") + + checkFixeTaxeImOffert("MSE", dt) + 'das muss die letzte Prüfung sein, da uU eine Transaktion fehlen kann! Dim fehlendeTransactionen As Integer = 0 @@ -4134,6 +4155,9 @@ Public Class frmMDMDatenverarbetiung Dim dt As DataTable = SQL.loadDgvBySql("Select distinct(tblIDSTransactionsNew.KdNrVERAG) from tblIDSTransactionsNew where cast(tblIDSTransactionsNew.YearMonthDay As Date) = '" & DateTimePicker2.Text & "'", "FMZOLL") + checkFixeTaxeImOffert("IDS", dt) + checkFixeTaxeImOffert("IDS_AT", dt) + If dt.Rows.Count > 0 Then Dim counter As Integer = 0 For Each r In dt.Rows @@ -4903,4 +4927,64 @@ RabattBerechnen: Return checkDate End Function + + Private Function checkFixeTaxeImOffert(Lieferant As String, dt As DataTable) As Boolean + + Dim OffertenNr As Integer = -1 + + If Lieferant = "" Then Return False + + Select Case Lieferant + Case "PLOSE" : OffertenNr = 80 + Case "ASFINAG" : OffertenNr = 11 + Case "UTA" : OffertenNr = 30 + Case "MSE" : OffertenNr = 23 + Case "IDS" : OffertenNr = 17 + Case "IDS_AT" : OffertenNr = 21 + Case Else + Return False + End Select + + Dim AdressenNr As String = "" + + If dt.Rows.Count > 0 Then + If dt.Columns.Contains("AdressenNr") Or dt.Columns.Contains("KdNrVERAG") Then + Dim dtNew As DataTable = dt.Rows.Cast(Of DataRow)().Where(Function(row) Not row.ItemArray.All(Function(field) field Is DBNull.Value Or field.Equals(""))).CopyToDataTable() + If dtNew.Rows.Count > 0 Then + Dim counter = 0 + For Each r As DataRow In dtNew.Rows + AdressenNr &= r.Item(0) + counter = counter + 1 + If (dtNew.Rows.Count <> 0 And counter <> dtNew.Rows.Count) Then + AdressenNr &= "," + End If + Next + End If + End If + + End If + + Dim sqlStringOffertMehrfach = "select COUNT(*) as Anzahl ,OffertenNr, KundenNr LeistungsNr from Offertenpositionen where LeistungsNr = 441 and OffertenNr = " & OffertenNr & " and KundenNr in (" & AdressenNr & ") group by KundenNr, LeistungsNr, OffertenNr having COUNT(*) > 1" + Dim dtOfferten As DataTable = SQL.loadDgvBySql(sqlStringOffertMehrfach, "FMZOLL") + If dtOfferten.Rows.Count > 0 Then + MsgBox("Es sind bei " & dtOfferten.Rows.Count & " Kunden das Offert 441 mehrfach hinterlegt, das muss korrigiert werden, ansonten kann die Fixe Taxe nicht berechnet werden!") + cProgramFunctions.genExcelCSVFromDT(dtOfferten, True) + Return False + End If + + Dim sqlStringFehlendeOffertenNr = "select KundenNr, OffertenNr from Offertenpositionen where OffertenNr = " & OffertenNr & " and KundenNr in (" & AdressenNr & ") + GROUP by KundenNr, OffertenNr + EXCEPT + select KundenNr, OffertenNr from Offertenpositionen where LeistungsNr = 441 and OffertenNr = " & OffertenNr & " and KundenNr in (" & AdressenNr & ") + GROUP by KundenNr, OffertenNr" + + Dim dtfehlendeOfferten As DataTable = SQL.loadDgvBySql(sqlStringFehlendeOffertenNr, "FMZOLL") + If dtfehlendeOfferten.Rows.Count > 0 Then + MsgBox("Es fehlen bei " & dtfehlendeOfferten.Rows.Count & " Kunden das Offert 441, bitte hinterlegen ansonten wird die Fixe Taxe nicht gesetzt!") + cProgramFunctions.genExcelCSVFromDT(dtfehlendeOfferten, True) + Return True + End If + + + End Function End Class diff --git a/SDL/seriendruck/usrCntlFakturierung.vb b/SDL/seriendruck/usrCntlFakturierung.vb index d28b7491..1aca9573 100644 --- a/SDL/seriendruck/usrCntlFakturierung.vb +++ b/SDL/seriendruck/usrCntlFakturierung.vb @@ -544,6 +544,11 @@ Public Class usrcntlFakturierung Dim intZlr As Integer = 0 + If r("RechnungsKundenNr") = "401715" Or r("RechnungsKundenNr") = "401943" Or r("RechnungsKundenNr") = "402179" Or r("RechnungsKundenNr") = "402598" Or r("RechnungsKundenNr") = "402656" Or r("RechnungsKundenNr") = "402688" Or r("RechnungsKundenNr") = "402719" Or r("RechnungsKundenNr") = "402888" Or r("RechnungsKundenNr") = "402933" Or r("RechnungsKundenNr") = "401733" Or r("RechnungsKundenNr") = "402245" Or r("RechnungsKundenNr") = "402712" Or r("RechnungsKundenNr") = "402065" Or r("RechnungsKundenNr") = "402712" Or r("RechnungsKundenNr") = "401908" Or r("RechnungsKundenNr") = "401829" Or r("RechnungsKundenNr") = "203083" Then + 'MsgBox("Test") + End If + + ' Bei BetragExclusivFT kleiner als 500€ wird 1x fixe Taxe verrechnet, bei grösser/gleich 500€ wird kein fixe Taxe verrechnet. ' Zähler auf die Anzahl der fixe Taxe Löschungen einstellen. @@ -556,6 +561,7 @@ Public Class usrcntlFakturierung End If Else + If (0 - r("BetragExclusivFT")) < 500 Then intZlr = r("AnzahlFT") - 1 Else @@ -619,6 +625,8 @@ Public Class usrcntlFakturierung intZlr = intZlr - row("Anzahl") + If intZlr < 0 Then Exit For + If Not IsDBNull(row("SteuerpflichtigerBetrag")) AndAlso IsNumeric(row("SteuerpflichtigerBetrag")) Then stgesBetr = stgesBetr - CDbl(row("SteuerpflichtigerBetrag")) If Not IsDBNull(row("SteuerfreierBetrag")) AndAlso IsNumeric(row("SteuerfreierBetrag")) Then stfregesBetr = stfregesBetr - CDbl(row("SteuerfreierBetrag")) @@ -628,7 +636,7 @@ Public Class usrcntlFakturierung isSet = RECHNUNG.SAVE(False) End If - If intZlr = 0 Then Exit For + If intZlr <= 0 Then Exit For Next