Imports System.Globalization
Imports System.IO
Imports System.Web.UI.WebControls.Expressions
Imports VERAG_PROG_ALLGEMEIN

Public Class usrcntlFakturierung

    Dim FMZOLL_SQL As New FMZOLL_SQL
    Dim PathMautberichte = ""
    Dim countCSV As Integer = 0
    Dim countPDF As Integer = 0

    Private Sub Button1_Click(sender As Object, e As EventArgs) Handles btnFakturierung.Click
        Me.Cursor = Cursors.WaitCursor
        Dim f As New SDL.frmAbrechnungsMaske
        f.Show(Me)
        Me.Cursor = Cursors.Default
    End Sub

    Private Sub Button2_Click(sender As Object, e As EventArgs)
        Dim f As New SDL.frmRechnungenSuche
        f.Show(Me)
    End Sub



    Private Sub usrCntlFakturierung_Load(sender As Object, e As EventArgs) Handles Me.Load

        KdSearchBox3.initKdBox(Me.FindForm)

        cbxMautbericht.Items.Clear()
        cbxMautbericht.Items.Add(New VERAG_PROG_ALLGEMEIN.MyListItem("Mautsummenbericht", "Gesamtbericht_EXCEL"))
        cbxMautbericht.Items.Add(New VERAG_PROG_ALLGEMEIN.MyListItem("Mautbericht AT DE MSE UTA", "Lieferantenbericht_PDF"))
        cbxMautbericht.Items.Add(New VERAG_PROG_ALLGEMEIN.MyListItem("Mautsummenbericht als CSV-Datei", "Gesamtbericht_CSV"))

        cbxDateMautbericht.Items.Clear()
        cbxDateMautbericht.fillWithSQL("select distinct(cast(BillingDate as Date)) From tblMautbericht order by cast(BillingDate as Date) desc", False, "FMZOLL")

        cboSachbearbeiter.fillWithSQL("select distinct(UPPER(sachbearbeiter)) from Rechnungsausgang where Sammelrechnung=6 and Firma_ID=19", False, "FMZOLL", True)

        PathMautberichte = (New SQL).getValueTxtBySql("SELECT TOP 1 [Param_value]  FROM [tblPartnersystem_Paramter] WHERE  Param_system='GESAMTMAUT' AND [Param_name]='ANLAGE_PFAD'  AND Param_testsystem = " & IIf(VERAG_PROG_ALLGEMEIN.cAllgemein.TESTSYSTEM, 1, 0), "FMZOLL")

        cbxMautanh.Checked = False

        'PathMautberichte = "C:\Users\d.breimaier\Desktop\MDM\Mautgesamtberichte\"

        Dim FaktAbt As Boolean = IIf(VERAG_PROG_ALLGEMEIN.cBerechtignunen.CHECK_BERECHTIGUNG("MDM_FAKTURIERUNG", "SDL") = 0, True, False)

        countCSV = 0
        countPDF = 0
        If Directory.Exists(PathMautberichte) Then
            If Directory.GetFiles(PathMautberichte) IsNot Nothing Then
                For Each f In Directory.GetFiles(PathMautberichte)
                    If f.ToString.ToLower.EndsWith("_maut.csv") Then countCSV += 1
                    If f.ToString.ToLower.EndsWith("_maut.pdf") Then countPDF += 1
                Next
            End If
        Else
            If FaktAbt Then MsgBox("Mautbericht-Pfad " & PathMautberichte & " nicht verfügbar!")
        End If

        lblAnzahlMautberichte.Text = countCSV + countPDF & "x Mautberichte (" & countCSV & "x CSV " & countPDF & "x PDF )"

        If FaktAbt Then

            btnMDMSammelrechnung.Enabled = True
            GBMautberichte.Enabled = True
            GBSammelrechnung.Enabled = True
            btnFakturierung.Enabled = True
            btnRechnugnsdaten.Enabled = True
            btnLieferantenrechnungen.Enabled = True
            GroupBox1.Enabled = True
            btnAbfdruck.Enabled = True
            btnREJdruck.Enabled = True

        End If

        If VERAG_PROG_ALLGEMEIN.cBerechtignunen.CHECK_BERECHTIGUNG("MDM_LIEFERANTENRECHNUNGEN", "SDL") = 0 Then
            GroupBox1.Enabled = True
            btnLieferantenrechnungen.Enabled = True
            btnMDMSammelrechnung.Enabled = False
            btnFakturierung.Enabled = False
            btnRechnugnsdaten.Enabled = True
        End If

        If VERAG_PROG_ALLGEMEIN.cBerechtignunen.CHECK_BERECHTIGUNG_bool("ADMINFUNCTIONS", "SDL") Then
            Button2.Visible = True
            Button3.Visible = True
            btnRE_Text.Visible = True

        End If


    End Sub

    Private Sub Button20_Click(sender As Object, e As EventArgs) Handles btn_Mautanh_entfernen.Click

        Dim Sachbearbeiter = cboSachbearbeiter._value
        Dim rechnungsdatum As Date = CDate(dtRechnungsdatum.Text)
        Dim deleted As Boolean = False

        If rechnungsdatum > Today() Then
            MsgBox("Rechnungsdatum liegt in der Zukunft, nicht möglich")
            Exit Sub

        End If

        If Sachbearbeiter = "" Then
            MsgBox("Sachbearbeiter auswählen!")
            Exit Sub
        End If


        Dim rechnungenMitGesamtmautanhant As String = (New SQL).getValueTxtBySqlVarList("SELECT COUNT(*) FROM Rechnungsausgang
                        inner join RechnungsausgangAnhaenge on Rechnungsausgang.RK_ID = RechnungsausgangAnhaenge.RK_ID
                        WHERE [Status] = 0 AND [Sammelrechnung] = 6 AND UPPER([Sachbearbeiter]) = '" & Sachbearbeiter & "' AND ([SteuerpflichtigerGesamtbetrag] <> 0 OR [SteuerfreierGesamtbetrag] <> 0) AND cast(Abfertigungsdatum as Date) = '" & rechnungsdatum & "'   
                        and (RechnungsausgangAnhaenge.Bezeichnung like '%Maut.pdf' or RechnungsausgangAnhaenge.Bezeichnung like '%Maut.csv')
                        group by [Firma_ID], RechnungsNr,Buchungsjahr,DruckDatumZeit,[Status], RechnungsausgangAnhaenge.Bezeichnung ", "FMZOLL",, 0)

        If rechnungenMitGesamtmautanhant <> "" Then


            If vbYes = MsgBox("Möchten Sie die " & rechnungenMitGesamtmautanhant & " Gesamtmautberichte (PDF und CSV) aus den Rechnungen vom entfernen?" & vbNewLine & "Die Mautberichte können erneut über 'Durchführen' and die Rechnung gehängt werden." & vbNewLine & "Nur bei Rechnungen mit Status 0 möglich!", vbYesNoCancel) Then

                deleted = (New SQL).doSQL("delete from RechnungsausgangAnhaenge where RechnungsausgangAnhaenge.RK_ID IN (SELECT Rechnungsausgang.RK_ID
                FROM Rechnungsausgang
                inner join RechnungsausgangAnhaenge on Rechnungsausgang.RK_ID = RechnungsausgangAnhaenge.RK_ID
                WHERE [Status] = 0 AND [Sammelrechnung] = 6 AND UPPER([Sachbearbeiter]) = '" & Sachbearbeiter & "' AND ([SteuerpflichtigerGesamtbetrag] <> 0 OR [SteuerfreierGesamtbetrag] <> 0) AND cast(Abfertigungsdatum as Date) = '" & rechnungsdatum & "'  
                and (RechnungsausgangAnhaenge.Bezeichnung like '%Maut.pdf' or RechnungsausgangAnhaenge.Bezeichnung like '%Maut.csv')) and (RechnungsausgangAnhaenge.Bezeichnung like '%Maut.pdf' or RechnungsausgangAnhaenge.Bezeichnung like '%Maut.csv')", "FMZOLL")

                If deleted Then MsgBox("Anhänge wurden gelöscht")

            End If
        Else
            MsgBox("In den Rechnungen vom " & rechnungsdatum & " sind keine Gesamtmautberichte angehängt!")
        End If

    End Sub

    Private Sub Button14_Click(sender As Object, e As EventArgs) Handles btnRePos.Click

        Label70.Text = "7. Hängt Mautgesamtbericht an Sammelrechnungen an."

        Dim SQL As New VERAG_PROG_ALLGEMEIN.SQL

        Dim ok As Boolean = True
        Dim Sachbearbeiter = cboSachbearbeiter._value
        Dim rechnungsdatum As Date = CDate(dtRechnungsdatum.Text)

        PictureBox1.Visible = False
        PictureBox2.Visible = False
        PictureBox3.Visible = False
        PictureBox4.Visible = False
        PictureBox5.Visible = False
        PictureBox7.Visible = False


        If rechnungsdatum > Today() Then
            MsgBox("Rechnungsdatum liegt in der Zukunft, nicht möglich")
            Exit Sub

        End If

        If Sachbearbeiter = "" Then
            MsgBox("Sachbearbeiter auswählen!")
            Exit Sub
        End If

        If PathMautberichte = "" OrElse Not Directory.Exists(PathMautberichte) Then
            MsgBox("Pfad zu den Mautberichten nicht vorhanden!" & vbNewLine & "Vorang wird abgebrochen!")
            Exit Sub
        ElseIf Directory.Exists(PathMautberichte) Then

            If Directory.GetFiles(PathMautberichte) Is Nothing Then
                MsgBox("Pfad " & PathMautberichte & " enthält keine Daten!" & vbNewLine & "Vorang wird abgebrochen!")
                Exit Sub
            End If


        End If

        'es sollen alle RE der letzen 3 Monate gesetzt werden (warum, weil das schon immer so war....)
        'ok = SQL.doSQL("update [Rechnungsausgang] set Sachbearbeiter='" & Sachbearbeiter & "' where Sammelrechnung=6 and Firma_ID=19 and Abfertigungsdatum = '" & dtRechnungsdatum.Value & "'", "FMZOLL")
        Dim vergangAbfertigunsdatuminMontaen As Integer = -12

        ok = SQL.doSQL("update [Rechnungsausgang] set Sachbearbeiter='" & Sachbearbeiter & "' where Firma_ID = 19 And Sammelrechnung = 6 And Abfertigungsdatum > DateAdd(Month, " & vergangAbfertigunsdatuminMontaen & ", GETDATE())", "FMZOLL")

        showPic(ok, PictureBox1)

        If Not ok Then Exit Sub


        Dim rechnungenMitAbwAbfDat As Integer = CInt((New SQL).getValueTxtBySqlVarList("SELECT COUNT(*) FROM Rechnungsausgang
                        WHERE [Status] = 0 AND [Sammelrechnung] = 6 AND UPPER([Sachbearbeiter]) = '" & Sachbearbeiter & "' AND ([SteuerpflichtigerGesamtbetrag] <> 0 OR [SteuerfreierGesamtbetrag] <> 0) AND cast(Abfertigungsdatum as Date) <> '" & rechnungsdatum & "'", "FMZOLL",, 0))

        If rechnungenMitAbwAbfDat > 0 Then
            Dim res As MsgBoxResult
            res = MsgBox("Es gibt noch " & rechnungenMitAbwAbfDat & " Rechnungen mit abweichenden Abfertigungsdatum (Abfertigungsdatum ist nicht " & rechnungsdatum & ")" & vbNewLine & "Möchten Sie fortfahren (Abfertigungsdatum wird automatisch auf " & rechnungsdatum & " gesetzt (nur die letzten " & Math.Abs(vergangAbfertigunsdatuminMontaen) & " Monate ab heute) ?", vbYesNoCancel)
            Select Case res
                Case MsgBoxResult.Yes : SQL.doSQL("update [Rechnungsausgang] set Abfertigungsdatum = '" & rechnungsdatum & "' WHERE [Status] = 0 AND [Sammelrechnung] = 6 AND UPPER([Sachbearbeiter]) = '" & Sachbearbeiter & "' AND ([SteuerpflichtigerGesamtbetrag] <> 0 OR [SteuerfreierGesamtbetrag] <> 0) AND cast(Abfertigungsdatum as Date) <> '" & rechnungsdatum & "'", "FMZOLL")
                Case MsgBoxResult.No
                Case MsgBoxResult.Cancel : MsgBox("Rechnungslauf wird abgebrochen!") : Exit Sub
            End Select


        End If


        'START--------------------------- Zur Sicherheit!! - Kann ab nächsten Sammelrechnunsglauf deaktiviert werden! - 21.01.2026
        Dim rechnungenMitRE_KZ As Integer = CInt((New SQL).getValueTxtBySqlVarList("SELECT COUNT(*) FROM Rechnungsausgang
                        WHERE [Status] = 0 AND [Sammelrechnung] = 6 AND UPPER([Sachbearbeiter]) = '" & Sachbearbeiter & "' AND ([SteuerpflichtigerGesamtbetrag] <> 0 OR [SteuerfreierGesamtbetrag] <> 0) AND cast(Abfertigungsdatum as Date) = '" & rechnungsdatum & "' AND Rechnungsart <> 'RG' ", "FMZOLL",, 0))

        If rechnungenMitAbwAbfDat > 0 Then
            Dim res As MsgBoxResult
            res = MsgBox("Es gibt noch " & rechnungenMitRE_KZ & " Rechnungen deren Rechnungsart nicht auf Standard-Rechnung gesetzt ist" & vbNewLine & "Möchten Sie fortfahren (Rechnungsart wird auf Standard gesetzt) ?", vbYesNoCancel)
            Select Case res
                Case MsgBoxResult.Yes : SQL.doSQL("update [Rechnungsausgang] set Rechnungsart = 'RG' WHERE [Status] = 0 AND [Sammelrechnung] = 6 AND UPPER([Sachbearbeiter]) = '" & Sachbearbeiter & "' AND ([SteuerpflichtigerGesamtbetrag] <> 0 OR [SteuerfreierGesamtbetrag] <> 0) AND cast(Abfertigungsdatum as Date) = '" & rechnungsdatum & "' AND Rechnungsart <> 'RG' ", "FMZOLL")
                Case MsgBoxResult.No
                Case MsgBoxResult.Cancel : MsgBox("Rechnungslauf wird abgebrochen!") : Exit Sub
            End Select


        End If

        'ENDE---------------------------



        Dim rechnungenMitGesamtmautanhangCSV As String = (New SQL).getValueTxtBySqlVarList("SELECT COUNT(*) FROM Rechnungsausgang
                        inner join RechnungsausgangAnhaenge on Rechnungsausgang.RK_ID = RechnungsausgangAnhaenge.RK_ID
                        WHERE [Status] = 0 AND [Sammelrechnung] = 6 AND UPPER([Sachbearbeiter]) = '" & Sachbearbeiter & "' AND ([SteuerpflichtigerGesamtbetrag] <> 0 OR [SteuerfreierGesamtbetrag] <> 0) AND cast(Abfertigungsdatum as Date) = '" & rechnungsdatum & "'   
                        and (RechnungsausgangAnhaenge.Bezeichnung like '%Maut.csv')
                        group by [Firma_ID], RechnungsNr,Buchungsjahr,DruckDatumZeit,[Status], RechnungsausgangAnhaenge.Bezeichnung ", "FMZOLL",, 0)


        Dim rechnungenMitGesamtmautanhangPDF As String = (New SQL).getValueTxtBySqlVarList("SELECT COUNT(*) FROM Rechnungsausgang
                        inner join RechnungsausgangAnhaenge on Rechnungsausgang.RK_ID = RechnungsausgangAnhaenge.RK_ID
                        WHERE [Status] = 0 AND [Sammelrechnung] = 6 AND UPPER([Sachbearbeiter]) = '" & Sachbearbeiter & "' AND ([SteuerpflichtigerGesamtbetrag] <> 0 OR [SteuerfreierGesamtbetrag] <> 0) AND cast(Abfertigungsdatum as Date) = '" & rechnungsdatum & "'   
                        and (RechnungsausgangAnhaenge.Bezeichnung like '%Maut.pdf')
                        group by [Firma_ID], RechnungsNr,Buchungsjahr,DruckDatumZeit,[Status], RechnungsausgangAnhaenge.Bezeichnung ", "FMZOLL",, 0)

        If rechnungenMitGesamtmautanhangPDF <> "" Then
            MsgBox("Bei " & rechnungenMitGesamtmautanhangPDF & " Rechnungen befindet sich noch eine PDF-Gesamtmaut" & vbNewLine & "Diesen bitte vorher entfernen über MAUTBERICHTE ENTFERNEN, weil erst im Zuge der RE-Pos-Berechnung die Gesamtmaut angehängt wird." & vbNewLine & "Vorang wird abgebrochen!")
            Exit Sub

        End If

        If rechnungenMitGesamtmautanhangCSV <> "" Then
            MsgBox("Bei " & rechnungenMitGesamtmautanhangCSV & " Rechnungen befindet sich noch eine CSV-Gesamtmaut" & vbNewLine & "Diesen bitte vorher entfernen über MAUTBERICHTE ENTFERNEN, weil erst im Zuge der RE-Pos-Berechnung die Gesamtmaut angehängt wird." & vbNewLine & "Vorang wird abgebrochen!")
            Exit Sub

        End If


        Dim dtREGU As DataTable = SQL.loadDgvBySql("SELECT [Firma_ID], [Status], [Sammelrechnung], [Sachbearbeiter], [RechnungsKundenNr], [Währungscode], isnull([Steuersatz %],0) as [Steuersatz %], cast([Lastschrift] as bit) as Lastschrift, Sum([SteuerpflichtigerGesamtbetrag]+[SteuerfreierGesamtbetrag]) AS Sammelrechnungsbetrag
                                                    FROM Rechnungsausgang
                                                    WHERE [Status] = 0 AND [Sammelrechnung] = 6 AND UPPER([Sachbearbeiter]) = '" & Sachbearbeiter & "' AND ([SteuerpflichtigerGesamtbetrag] <> 0 OR [SteuerfreierGesamtbetrag] <> 0) AND cast(Abfertigungsdatum as Date) = '" & rechnungsdatum & "'  
                                                    GROUP BY [Firma_ID], [Status], [Sammelrechnung], [Sachbearbeiter], [RechnungsKundenNr], [Währungscode], [Steuersatz %], [Lastschrift]", "FMZOLL")


        If Not vbYes = MsgBox("Möchten Sie mit der Erstellung der  " & dtREGU.Rows.Count & " Sammelrechnungen vorfahren?", vbYesNoCancel) Then
            MsgBox("Rechnungslauf wird abgebrochen!") : Exit Sub
        End If

        'RECHNUNG ODER GUTSCHRIFT
        'Rechnung oder Gutschrift im RK eintragen, abhängig vom Sammelrechnungsbetrag (+/-)

        If dtREGU.Rows.Count > 0 Then

            For Each r In dtREGU.Rows

                Dim BelegartenNr As Integer
                Dim BelegartenKz As String
                Dim BelegartenBez As String
                Dim Vorzeichen As String = "+"

                If r("Sammelrechnungsbetrag") >= 0 Then

                    BelegartenNr = 70
                    BelegartenKz = "AR"
                    BelegartenBez = "Rechnung"
                    Vorzeichen = "+"

                Else
                    BelegartenNr = 71
                    BelegartenKz = "AG"
                    BelegartenBez = "Gutschrift"
                    Vorzeichen = "-"

                End If

                Dim steuersatz As Single = r("Steuersatz %") 'Single same as real-datatype in SQL (wichtig, sonst findet er den wert nicht!!!)

                'Dim dtRE_set As DataTable = (New SQL).loadDgvBySql("SELECT RK_ID FROM [Rechnungsausgang] WHERE [Firma_ID] = 19 AND [Status] = 0 AND [Sammelrechnung] = 6 AND UPPER([Sachbearbeiter])= '" & Sachbearbeiter & "' AND [RechnungsKundenNr] = " & r("RechnungsKundenNr") & " AND [Währungscode] = '" & r("Währungscode") & "'  AND [Steuersatz %] = " & steuersatz.ToString.Replace(",", ".") & " AND [Lastschrift] = " & IIf(r("Lastschrift"), 1, 0) & "AND cast(Abfertigungsdatum as Date) = '" & rechnungsdatum & "'", "FMZOLL")

                'For Each RE As DataRow In dtRE_set.Rows

                '    Dim RECHNUNG As New cRechnungsausgang(RE("RK_ID"))
                '    RECHNUNG.BelegartenBez = BelegartenBez
                '    RECHNUNG.BelegartenKz = BelegartenKz
                '    RECHNUNG.BelegartenNr = BelegartenNr
                '    RECHNUNG.Vorzeichen = Vorzeichen
                '    ok = RECHNUNG.SAVE()
                '    If Not ok Then Exit For

                'Next



                ok = SQL.doSQL("UPDATE [Rechnungsausgang] SET [BelegartenNr] = " & BelegartenNr & ", [BelegartenKz] = '" & BelegartenKz & "' , [BelegartenBez] = '" & BelegartenBez & "' , [Vorzeichen] = '" & Vorzeichen & "'  
                               WHERE [Firma_ID] = 19 AND [Status] = 0 AND [Sammelrechnung] = 6 AND UPPER([Sachbearbeiter])= '" & Sachbearbeiter & "' AND [RechnungsKundenNr] = " & r("RechnungsKundenNr") & " AND [Währungscode] = '" & r("Währungscode") & "'  AND [Steuersatz %] = " & steuersatz.ToString.Replace(",", ".") & " AND [Lastschrift] = " & IIf(r("Lastschrift"), 1, 0) & "AND cast(Abfertigungsdatum as Date) = '" & rechnungsdatum & "'", "FMZOLL")

                If Not ok Then MsgBox("Rechnungsdruck wird abgebrochen." & vbCrLf & "Rechnungen/Gutschriften nicht gefunden.") : Exit Sub

            Next
            showPic(ok, PictureBox2)
        Else
            showPic(ok, PictureBox2)
            MsgBox("Rechnungsdruck wird abgebrochen." & vbCrLf & "Rechnungen/Gutschriften nicht gefunden.") : Exit Sub

        End If

        Dim dtSammelrechnungen As New DataTable

        'Rechnungstext im RK eintragen
        showPic(setRechnungstext(Sachbearbeiter, rechnungsdatum, dtSammelrechnungen), PictureBox3)

        '--NICHT BENÖTIGT!
        ' Porto/Papiere berechnen. 
        'showPic(PortoPapiere(Sachbearbeiter, rechnungsdatum), PictureBox4)
        '--NICHT BENÖTIGT!

        'Berechnet Banküberweisung/Bankspesen.
        showPic(Bankspesen(Sachbearbeiter, rechnungsdatum), PictureBox5)

        'Berechnet FixeTaxe.
        showPic(FixeTaxe(Sachbearbeiter, rechnungsdatum), PictureBox6)


        'Gesamtmautberichte an Sammelrechnung anhängen
        Dim okMaut As Boolean = False
        okMaut = setMautgesamtberichtInRechnung(Sachbearbeiter, rechnungsdatum, dtSammelrechnungen)

        showPic(okMaut, PictureBox7)

        If Not okMaut Then
            MsgBox("Fehler beim Setzen der Gesamtmautberichte")
        End If


    End Sub

    Private Function PortoPapiere(Sachbearbeiter As String, rechnungsdatum As Date, Optional kdNr As Integer = -1) As Boolean


        ' Die Abfrage ermittelt aus den Rechnungspositonen,
        ' das Vorkommen (Anzahl Porto/Papiere) pro RechnungsKundenNr
        ' Status=0, Sammelrechnung=6, LeistungsNr=440.
        Dim isSet As Boolean = False
        Dim sqlString = "SELECT 
                        Rechnungsausgang.Firma_ID, 
                        Rechnungsausgang.Status, 
                        Rechnungsausgang.Sammelrechnung, 
                        Rechnungsausgang.Sachbearbeiter, 
                        Rechnungsausgang.RechnungsKundenNr, 
                        Rechnungsausgang.BelegartenNr, 
                        Rechnungsausgang.Währungscode, 
                        isnull(Rechnungsausgang.[Steuersatz %],0) as [Steuersatz %],
                        cast(Rechnungsausgang.Lastschrift as bit) as Lastschrift,
                        SUM(CASE WHEN LeistungsNr = 440 THEN Anzahl ELSE 0 END) AS AnzahlPP, 
                        SUM(CASE WHEN LeistungsNr = 440 THEN 0 ELSE SteuerpflichtigerBetrag + SteuerfreierBetrag END) AS BetragExclusivPP
                    FROM 
                        Rechnungsausgang 
                    INNER JOIN 
                        RechnungsausgangPositionen ON Rechnungsausgang.RK_ID = RechnungsausgangPositionen.RK_ID
                    WHERE 
                        Rechnungsausgang.Status in " & If(kdNr > 0, "(0,2)", "(0)") & " 
                        AND Rechnungsausgang.Sammelrechnung = 6 
                        AND UPPER(Rechnungsausgang.Sachbearbeiter) = '" & Sachbearbeiter & "'
                        AND cast(Abfertigungsdatum as Date) = '" & rechnungsdatum & "' " & IIf(kdNr > 0, " AND RechnungsKundenNr = " & kdNr, "") & " 

                    GROUP BY 
                        Rechnungsausgang.Firma_ID, 
                        Rechnungsausgang.Status, 
                        Rechnungsausgang.Sammelrechnung, 
                        Rechnungsausgang.Sachbearbeiter, 
                        Rechnungsausgang.RechnungsKundenNr, 
                        Rechnungsausgang.BelegartenNr, 
                        Rechnungsausgang.Währungscode, 
                        Rechnungsausgang.[Steuersatz %], 
                        Rechnungsausgang.Lastschrift
                    HAVING 
                        SUM(CASE WHEN LeistungsNr = 440 THEN Anzahl ELSE 0 END) > 0
                    ORDER BY 
                        Rechnungsausgang.Firma_ID, 
                        Rechnungsausgang.Status, 
                        Rechnungsausgang.Sammelrechnung, 
                        Rechnungsausgang.Sachbearbeiter, 
                        Rechnungsausgang.RechnungsKundenNr, 
                        Rechnungsausgang.BelegartenNr, 
                        Rechnungsausgang.Währungscode, 
                        Rechnungsausgang.[Steuersatz %], 
                        Rechnungsausgang.Lastschrift"

        Dim dtPP As DataTable = (New SQL).loadDgvBySql(sqlString, "FMZOLL")

        If dtPP.Rows.Count > 0 Then

            For Each r In dtPP.Rows

                Dim intZlr As Integer = 0

                ' Bei BetragExclusivPP kleiner als 150€ wird 1x P.P. verrechnet, bei grösser/gleich 150€ wird kein P.P. verrechnet.
                ' Zähler auf die Anzahl der P.P. Löschungen einstellen.

                If Not IsDBNull(r("BetragExclusivPP")) AndAlso r("BetragExclusivPP") > 0 Then

                    If r("BetragExclusivPP") < 150 Then
                        intZlr = r("AnzahlPP") - 1
                    Else
                        intZlr = r("AnzahlPP")
                    End If
                Else
                    If (0 - r("BetragExclusivPP")) < 150 Then
                        intZlr = r("AnzahlPP") - 1
                    Else
                        intZlr = r("AnzahlPP") - 1
                    End If
                End If
                If intZlr > 0 Then


                    Dim steuersatz As Single = r("Steuersatz %") 'Single same as real-datatype in SQL (wichtig, sonst findet er den wert nicht!!!)
                    'Dim SteuersatzString As String = steuersatz.ToString.Replace(",", ".")

                    ' Die Abfrage liest in der Tabelle Rechnungsausgang,
                    ' passend zu den durch die vorherige Abfrage bereitgestellten Parametern.

                    Dim sqlStringRechnungen As String = "Select DISTINCT
                                         Rechnungsausgang.OffertenNr,
                                         Rechnungsausgang.RK_ID,
                                         Rechnungsausgang.SteuerpflichtigerGesamtbetrag,
                                         Rechnungsausgang.SteuerfreierGesamtbetrag,
                                         Rechnungsausgang.upsize_ts
                                     FROM Rechnungsausgang
                                         WHERE
                                         Rechnungsausgang.Firma_ID = " & r("Firma_ID") & "
                                         And Rechnungsausgang.Status =  " & r("Status") & "
                                         And Rechnungsausgang.Sammelrechnung = " & r("Sammelrechnung") & "
                                         And UPPER(Rechnungsausgang.Sachbearbeiter) = '" & Sachbearbeiter & "'
                                         And Rechnungsausgang.RechnungsKundenNr = " & r("RechnungsKundenNr") & "
                                         And Rechnungsausgang.BelegartenNr = " & r("BelegartenNr") & "
                                         And Rechnungsausgang.Währungscode = '" & r("Währungscode") & "'
                                         And Rechnungsausgang.[Steuersatz %] = " & steuersatz.ToString.Replace(",", ".") & "
                                         And Rechnungsausgang.Lastschrift = " & IIf(r("Lastschrift"), 1, 0) & "
                                         AND cast(Rechnungsausgang.Abfertigungsdatum as Date) = '" & rechnungsdatum & "'
                                     ORDER by 
                                         Rechnungsausgang.OffertenNr"




                    Dim dtRechnungen As DataTable = (New SQL).loadDgvBySql(sqlStringRechnungen, "FMZOLL")

                    If dtRechnungen.Rows.Count > 0 Then

                        For Each re In dtRechnungen.Rows



                            Dim dtREPOSANZ As DataTable = (New SQL).loadDgvBySql("Select [RK_ID], [LeistungsNr], cast([Steuerpflichtig] as bit) as Steuerpflichtig, [LeistungsBez],[IndexZkteing], Anzahl, SteuerpflichtigerBetrag, SteuerfreierBetrag,upsize_ts From RechnungsausgangPositionen Where RechnungsausgangPositionen.RK_ID = " & re("RK_ID") & " And RechnungsausgangPositionen.LeistungsNr = 440", "FMZOLL")

                            If dtREPOSANZ.Rows.Count > 0 Then

                                Dim stgesBetr = re("SteuerpflichtigerGesamtbetrag")
                                Dim stfregesBetr = re("SteuerfreierGesamtbetrag")

                                Dim RECHNUNG As New cRechnungsausgang(re("RK_ID"))

                                For Each row In dtREPOSANZ.Rows

                                    intZlr = intZlr - row("Anzahl")

                                    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"))

                                    If RECHNUNG.DELETE_POSITIONEN(RECHNUNG.RK_ID, row("LeistungsNr"), row("Steuerpflichtig"), row("LeistungsBez"), row("IndexZkteing")) Then
                                        RECHNUNG.SteuerfreierGesamtbetrag = stfregesBetr * If(RECHNUNG.Vorzeichen = "-", -1, 1)
                                        RECHNUNG.SteuerpflichtigerGesamtbetrag = stgesBetr * If(RECHNUNG.Vorzeichen = "-", -1, 1)
                                        isSet = RECHNUNG.SAVE(False)
                                    End If

                                    If intZlr = 0 Then Exit For


                                Next
                            End If



                        Next

                    End If
                End If






            Next

        Else
            isSet = True

        End If

        Return isSet

    End Function



    Private Function FixeTaxe(Sachbearbeiter As String, rechnungsdatum As Date, Optional kdNr As Integer = -1) As Boolean


        ' Die Abfrage ermittelt aus den Rechnungspositonen,
        ' das Vorkommen (Anzahl Porto/Papiere) pro RechnungsKundenNr
        ' Status=0, Sammelrechnung=6, LeistungsNr=441.

        Dim isSet As Boolean = False
        Dim sqlString = "SELECT 
                        Rechnungsausgang.Firma_ID, 
                        Rechnungsausgang.Status, 
                        Rechnungsausgang.Sammelrechnung, 
                        Rechnungsausgang.Sachbearbeiter, 
                        Rechnungsausgang.RechnungsKundenNr, 
                        Rechnungsausgang.BelegartenNr, 
                        Rechnungsausgang.Währungscode, 
                        isnull(Rechnungsausgang.[Steuersatz %],0) as [Steuersatz %],
                        cast(Rechnungsausgang.Lastschrift as bit) as Lastschrift,
                        SUM(CASE WHEN LeistungsNr = 441 THEN Anzahl ELSE 0 END) AS AnzahlFT, 
                        SUM(CASE WHEN LeistungsNr = 441 THEN 0 ELSE SteuerpflichtigerBetrag + SteuerfreierBetrag END) AS BetragExclusivFT
                    FROM 
                        Rechnungsausgang 
                    INNER JOIN 
                        RechnungsausgangPositionen ON Rechnungsausgang.RK_ID = RechnungsausgangPositionen.RK_ID
                    WHERE 
                        Rechnungsausgang.Status in " & If(kdNr > 0, "(0,2)", "(0)") & " 
                        AND Rechnungsausgang.Sammelrechnung = 6 
                        AND UPPER(Rechnungsausgang.Sachbearbeiter) = '" & Sachbearbeiter & "'
                        AND cast(Abfertigungsdatum as Date) = '" & rechnungsdatum & "' " & IIf(kdNr > 0, " AND RechnungsKundenNr = " & kdNr, "") & " 

                    GROUP BY 
                        Rechnungsausgang.Firma_ID, 
                        Rechnungsausgang.Status, 
                        Rechnungsausgang.Sammelrechnung, 
                        Rechnungsausgang.Sachbearbeiter, 
                        Rechnungsausgang.RechnungsKundenNr, 
                        Rechnungsausgang.BelegartenNr, 
                        Rechnungsausgang.Währungscode, 
                        Rechnungsausgang.[Steuersatz %], 
                        Rechnungsausgang.Lastschrift
                    HAVING 
                        SUM(CASE WHEN LeistungsNr = 441 THEN Anzahl ELSE 0 END) > 0
                    ORDER BY 
                        Rechnungsausgang.Firma_ID, 
                        Rechnungsausgang.Status, 
                        Rechnungsausgang.Sammelrechnung, 
                        Rechnungsausgang.Sachbearbeiter, 
                        Rechnungsausgang.RechnungsKundenNr, 
                        Rechnungsausgang.BelegartenNr, 
                        Rechnungsausgang.Währungscode, 
                        Rechnungsausgang.[Steuersatz %], 
                        Rechnungsausgang.Lastschrift"

        Dim dtFT As DataTable = (New SQL).loadDgvBySql(sqlString, "FMZOLL")

        If dtFT.Rows.Count > 0 Then

            For Each r In dtFT.Rows

                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.

                If Not IsDBNull(r("BetragExclusivFT")) AndAlso r("BetragExclusivFT") > 0 Then

                    If r("BetragExclusivFT") < 500 Then
                        intZlr = r("AnzahlFT") - 1
                    Else
                        intZlr = r("AnzahlFT")
                    End If

                Else

                    If (0 - r("BetragExclusivFT")) < 500 Then
                        intZlr = r("AnzahlFT") - 1
                    Else
                        intZlr = r("AnzahlFT") - 1
                    End If

                End If


                If intZlr > 0 Then


                    Dim steuersatz As Single = r("Steuersatz %") 'Single same as real-datatype in SQL (wichtig, sonst findet er den wert nicht!!!)
                    'Dim SteuersatzString As String = steuersatz.ToString.Replace(",", ".")

                    ' Die Abfrage liest in der Tabelle Rechnungsausgang,
                    ' passend zu den durch die vorherige Abfrage bereitgestellten Parametern.

                    Dim sqlStringRechnungen As String = "Select DISTINCT
                                         Rechnungsausgang.OffertenNr,
                                         Rechnungsausgang.RK_ID,
                                         Rechnungsausgang.SteuerpflichtigerGesamtbetrag,
                                         Rechnungsausgang.SteuerfreierGesamtbetrag,
                                         Rechnungsausgang.upsize_ts
                                     FROM Rechnungsausgang
                                         WHERE
                                         Rechnungsausgang.Firma_ID = " & r("Firma_ID") & "
                                         And Rechnungsausgang.Status =  " & r("Status") & "
                                         And Rechnungsausgang.Sammelrechnung = " & r("Sammelrechnung") & "
                                         And UPPER(Rechnungsausgang.Sachbearbeiter) = '" & Sachbearbeiter & "'
                                         And Rechnungsausgang.RechnungsKundenNr = " & r("RechnungsKundenNr") & "
                                         And Rechnungsausgang.BelegartenNr = " & r("BelegartenNr") & "
                                         And Rechnungsausgang.Währungscode = '" & r("Währungscode") & "'
                                         And Rechnungsausgang.[Steuersatz %] = " & steuersatz.ToString.Replace(",", ".") & "
                                         And Rechnungsausgang.Lastschrift = " & IIf(r("Lastschrift"), 1, 0) & "
                                         AND cast(Rechnungsausgang.Abfertigungsdatum as Date) = '" & rechnungsdatum & "'
                                     ORDER by 
                                         Rechnungsausgang.OffertenNr"




                    Dim dtRechnungen As DataTable = (New SQL).loadDgvBySql(sqlStringRechnungen, "FMZOLL")

                    If dtRechnungen.Rows.Count > 0 Then

                        For Each re In dtRechnungen.Rows



                            Dim dtREPOSANZ As DataTable = (New SQL).loadDgvBySql("Select [RK_ID], [LeistungsNr], cast([Steuerpflichtig] as bit) as Steuerpflichtig, [LeistungsBez],[IndexZkteing], Anzahl, SteuerpflichtigerBetrag, SteuerfreierBetrag,upsize_ts From RechnungsausgangPositionen Where RechnungsausgangPositionen.RK_ID = " & re("RK_ID") & " And RechnungsausgangPositionen.LeistungsNr = 441", "FMZOLL")

                            If dtREPOSANZ.Rows.Count > 0 Then

                                Dim stgesBetr = re("SteuerpflichtigerGesamtbetrag")
                                Dim stfregesBetr = re("SteuerfreierGesamtbetrag")

                                Dim RECHNUNG As New cRechnungsausgang(re("RK_ID"))

                                For Each row In dtREPOSANZ.Rows

                                    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"))

                                    If RECHNUNG.DELETE_POSITIONEN(RECHNUNG.RK_ID, row("LeistungsNr"), row("Steuerpflichtig"), row("LeistungsBez"), row("IndexZkteing")) Then
                                        RECHNUNG.SteuerfreierGesamtbetrag = stfregesBetr * If(RECHNUNG.Vorzeichen = "-", -1, 1) 'Beim Speichern wird das Vorzeichen nochmals ermittelt 
                                        RECHNUNG.SteuerpflichtigerGesamtbetrag = stgesBetr * If(RECHNUNG.Vorzeichen = "-", -1, 1)
                                        isSet = RECHNUNG.SAVE(False)
                                    End If

                                    If intZlr <= 0 Then Exit For


                                Next
                            End If



                        Next

                    End If
                End If






            Next

        Else
            isSet = True

        End If

        Return isSet

    End Function

    Private Function setRechnungstext(Sachbearbeiter As String, rechnungsdatum As Date, ByRef sammelRechnungen As DataTable, Optional setTextifNull As Boolean = False) As Boolean

        Dim varText As String = ""
        Dim varNettozahlungsziel As Integer = 0
        Dim strFälligkeitsdatum As String
        Dim strZahlbar As String

        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] 
                                                     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")
        Try


            If dtSelectedSammelrechnungen.Rows.Count > 0 Then
                sammelRechnungen = dtSelectedSammelrechnungen
                For Each rowRE In dtSelectedSammelrechnungen.Rows

                    Select Case rowRE("BelegartenNr")

                        Case 70 'RECHNUNG
                            If Not rowRE("Vorkasse") Then
                                If rowRE("Lastschrift") Then
                                    varText = varText & "Der Rechnungsbetrag wurde durch erteilten Abbuchungsauftrag eingezogen." & vbCrLf
                                Else
                                    If Not IsDBNull(rowRE("RechnungsKundenNr")) Then
                                        'Zahlungsziel aus Kundenstamm.
                                        Dim ZZ = (New SQL).getValueTxtBySql("SELECT Kunden.Zahlungsziel from Kunden  WHERE Kunden.KundenNr=" & rowRE("RechnungsKundenNr") & " AND Kunden.Zahlungsziel Is Not Null", "FMZOLL")
                                        If ZZ <> "" AndAlso IsNumeric(ZZ) Then
                                            varNettozahlungsziel = ZZ
                                            strFälligkeitsdatum = DateAdd("d", varNettozahlungsziel, dtRechnungsdatum.Value).ToString("dd.MM.yyyy")
                                        End If
                                    End If

                                    'Zahlungsziel aus Offertenstamm.
                                    If strFälligkeitsdatum = "" Then
                                        If Not IsDBNull(rowRE("OffertenNr")) Then
                                            Dim ZZOffert = (New SQL).getValueTxtBySql("SELECT Offertenstamm.Zahlungsziel FROM Offertenstamm WHERE Offertenstamm.OffertenNr = " & rowRE("OffertenNr") & " AND Offertenstamm.Zahlungsziel IS NOT NULL", "FMZOLL")
                                            If ZZOffert <> "" AndAlso IsNumeric(ZZOffert) Then
                                                varNettozahlungsziel = ZZOffert
                                                strFälligkeitsdatum = DateAdd("d", varNettozahlungsziel, dtRechnungsdatum.Value).ToString("dd.MM.yyyy")
                                            End If
                                        End If

                                    End If

                                    'Zahlungsziel ermitteln.
                                    If strFälligkeitsdatum = "" Then
                                        If Not IsDBNull(rowRE("RK_ID")) Then
                                            'Zahlungsziel bei Kreditaufwendungen.
                                            Dim ZZRKID = (New SQL).getValueTxtBySql("Select Case [Preis], [Anzahl] From [RechnungsausgangPositionen] Where [RK_ID] = " & rowRE("RK_ID") & " And [LeistungsNr] = 750 And [BerechnungsartNr] = 9", "FMZOLL")
                                            If ZZRKID <> "" Then
                                                strZahlbar = "Zahlbar innerhalb 10 Tagen abzüglich Pos. 750; ab 10 Tagen netto fällig."
                                            Else
                                                varNettozahlungsziel = 25
                                                strFälligkeitsdatum = DateAdd("d", varNettozahlungsziel, dtRechnungsdatum.Value).ToString("dd.MM.yyyy")
                                            End If
                                        End If

                                    End If


                                    'Fälligkeitstext in Landessprache
                                    If strFälligkeitsdatum <> "" Then strZahlbar = "Rechnung zahlbar spätestens bis " & strFälligkeitsdatum & "!"

                                    If Not IsDBNull(rowRE("RechnungsLandKz")) Then

                                        Dim ZZRLandKZ = (New SQL).getValueTxtBySql("SELECT tblZahlungszieltexte.Text FROM tblZahlungszieltexte WHERE tblZahlungszieltexte.LandKz='" & rowRE("RechnungsLandKz") & "' AND tblZahlungszieltexte.Text Is Not Null", "FMZOLL")
                                        If ZZRLandKZ <> "" Then
                                            strZahlbar = ZZRLandKZ & " " & strFälligkeitsdatum & "!"
                                        End If

                                    End If

                                    varText &= strZahlbar & vbCrLf

                                End If
                            End If

                            ' Text bei Zoll oder EUSt drucken
                            Dim Zoll = (New SQL).getValueTxtBySql("Select LeistungsNr From dbo.RechnungsausgangPositionen Where RK_ID = " & rowRE("RK_ID") & " And LeistungsNr In (10, 60, 70)", "FMZOLL")
                            If Not IsDBNull(Zoll) AndAlso Zoll <> "" Then
                                varText = varText & "Alle Zollbelege bitte sofort auf Richtigkeit prüfen da Einspruch gemäß § 355 AO nur 1 Monat nach Datum des Zollbescheides möglich." & vbCrLf
                            End If

                        Case 71 'GUTSCHRIFT
                            If rowRE("Lastschrift") Then
                                varText = varText & "Der Gutschriftsbetrag wurde mit erteilten Abbuchungsauftrag verrechnet." & vbCrLf
                            End If
                    End Select

                    ok = (New SQL).doSQL("Update [Rechnungsausgang] Set [Text] = '" & varText & "', [Nettozahlungsziel] = " & varNettozahlungsziel & "  WHERE [RK_ID] = " & rowRE("RK_ID"), "FMZOLL")
                    If Not ok Then MsgBox("Fehler") : Return False

                    varText = ""
                    varNettozahlungsziel = 0
                    strFälligkeitsdatum = ""

                Next
            End If

            Return ok

        Catch ex As Exception
            VERAG_PROG_ALLGEMEIN.cErrorHandler.ERR(ex.Message, ex.StackTrace, System.Reflection.MethodInfo.GetCurrentMethod.Name)
        End Try

        Return False

    End Function


    Private Function Bankspesen(Sachbearbeiter As String, rechnungsdatum As Date, Optional kdNr As Integer = -1)

        Dim isSet As Boolean = True

        Dim sqlBB = " Select  Firma_ID, Status, Sammelrechnung, Sachbearbeiter, RechnungsKundenNr, BelegartenNr, Währungscode, [Steuersatz %], Lastschrift
                        From dbo.Rechnungsausgang
                        Where Status IN " & If(kdNr > 0, "(0,2)", "(0)") & " 
                        And Sammelrechnung = 6 
                        And UPPER([Sachbearbeiter]) ='" & Sachbearbeiter & "'
                        AND cast(Abfertigungsdatum as Date) = '" & rechnungsdatum & "'" & If(kdNr > 0, " AND RechnungsKundenNr = " & kdNr, "") & " 
                        Group By Firma_ID, Status, Sammelrechnung, Sachbearbeiter, RechnungsKundenNr, BelegartenNr, Währungscode, [Steuersatz %], Lastschrift
                        Order By Firma_ID, Status, Sammelrechnung, Sachbearbeiter, RechnungsKundenNr, BelegartenNr, Währungscode, [Steuersatz %], Lastschrift"


        Dim dtBB As DataTable = (New SQL).loadDgvBySql(sqlBB, "FMZOLL")

        Try



            If dtBB.Rows.Count > 0 Then

                For Each r In dtBB.Rows
                    'spSelectReDruSchnSumBS415
                    Dim steuersatz As Single = r("Steuersatz %") 'Single same as real-datatype in SQL (wichtig, sonst findet er den wert nicht!!!)
                    'Dim SteuersatzString As String = steuersatz.ToString.Replace(",", ".")

                    Dim sum As DataTable = (New SQL).loadDgvBySql("SELECT ISNULL(SUM(dbo.RechnungsausgangPositionen.Preis * dbo.RechnungsausgangPositionen.Anzahl),0) AS [Summe von Preis]
                                                FROM   dbo.Rechnungsausgang INNER JOIN
                                                dbo.RechnungsausgangPositionen ON dbo.Rechnungsausgang.RK_ID = dbo.RechnungsausgangPositionen.RK_ID INNER JOIN
                                                dbo.Leistungen ON dbo.RechnungsausgangPositionen.LeistungsNr = dbo.Leistungen.LeistungsNr
                                                WHERE (dbo.Rechnungsausgang.Firma_ID = " & r("Firma_ID") & ") 
                                                AND (dbo.Rechnungsausgang.Status = " & r("Status") & ")
                                                AND (dbo.Rechnungsausgang.Sammelrechnung = " & r("Sammelrechnung") & ") 
                                                AND (UPPER(dbo.Rechnungsausgang.[Sachbearbeiter]) = '" & r("Sachbearbeiter") & "') 
                                                AND (dbo.Rechnungsausgang.RechnungsKundenNr = " & r("RechnungsKundenNr") & ") 
                                                AND (dbo.Rechnungsausgang.BelegartenNr =" & r("BelegartenNr") & ") 
                                                AND (dbo.Rechnungsausgang.Währungscode = '" & r("Währungscode") & "') 
                                                AND (dbo.Rechnungsausgang.[Steuersatz %] =" & steuersatz.ToString.Replace(",", ".") & ") 
                                                AND (dbo.Rechnungsausgang.Lastschrift =" & IIf(r("Lastschrift"), 1, 0) & ") 
                                                AND (dbo.Leistungen.BS415 = 1)", "FMZOLL",)
                    If sum.Rows.Count > 0 Then

                        For Each rowsum In sum.Rows

                            Dim sumCurrenRow As Double = rowsum("Summe von Preis")

                            If sumCurrenRow <> 0 Then

                                Dim dtBankspesen As DataTable = (New SQL).loadDgvBySql("SELECT KundenNr, [Bankspesen %], [Bankspesen Mindestbetrag] FROM  dbo.Kunden where KundenNr = " & r("RechnungsKundenNr"), "FMZOLL")

                                If dtBankspesen.Rows.Count > 0 Then

                                    For Each rowBS In dtBankspesen.Rows

                                        If rowBS("Bankspesen %") = 0 And rowBS("Bankspesen Mindestbetrag") = 0 Then

                                        Else

                                            Dim query As String = "SELECT DISTINCT OffertenNr, RK_ID, SteuerpflichtigerGesamtbetrag, SteuerfreierGesamtbetrag, upsize_ts FROM Rechnungsausgang 
                                                        WHERE (dbo.Rechnungsausgang.Firma_ID = " & r("Firma_ID") & ") 
                                                        AND (Status = " & r("Status") & ")
                                                        AND (Sammelrechnung = " & r("Sammelrechnung") & ") 
                                                        AND (UPPER([Sachbearbeiter]) = '" & r("Sachbearbeiter") & "') 
                                                        AND (RechnungsKundenNr = " & r("RechnungsKundenNr") & ") 
                                                        AND (BelegartenNr =" & r("BelegartenNr") & ") 
                                                        AND (Währungscode = '" & r("Währungscode") & "') 
                                                        AND ([Steuersatz %] =" & steuersatz.ToString.Replace(",", ".") & ") 
                                                        AND (Lastschrift =" & IIf(r("Lastschrift"), 1, 0) & ") 
                                                        ORDER BY OffertenNr"

                                            Dim dtRechnung As DataTable = (New SQL).loadDgvBySql(query, "FMZOLL")

                                            If dtRechnung.Rows.Count > 0 Then

                                                For Each re In dtRechnung.Rows

                                                    Dim steuerpflichtigerGesamtbetrag As Double = CDbl(re("SteuerpflichtigerGesamtbetrag"))
                                                    Dim steuerfreiegerGesamtbetrag As Double = CDbl(re("SteuerfreierGesamtbetrag"))

                                                    Dim dt415 As DataTable = (New SQL).loadDgvBySql("Select [RK_ID], [LeistungsNr], cast([Steuerpflichtig] as bit) as Steuerpflichtig, [LeistungsBez],[IndexZkteing],SteuerpflichtigerBetrag, SteuerfreierBetrag, upsize_ts From RechnungsausgangPositionen Where RechnungsausgangPositionen.RK_ID = " & re("RK_ID") & " And RechnungsausgangPositionen.LeistungsNr = 415", "FMZOLL")

                                                    If dt415.Rows.Count > 0 Then

                                                        For Each r415 In dt415.Rows

                                                            If Not IsDBNull(r415("SteuerpflichtigerBetrag")) AndAlso IsNumeric(r415("SteuerpflichtigerBetrag")) Then steuerpflichtigerGesamtbetrag = steuerpflichtigerGesamtbetrag - CDbl(r415("SteuerpflichtigerBetrag"))
                                                            If Not IsDBNull(r415("SteuerfreierBetrag")) AndAlso IsNumeric(r415("SteuerfreierBetrag")) Then steuerfreiegerGesamtbetrag = steuerfreiegerGesamtbetrag - CDbl(r415("SteuerfreierBetrag"))

                                                            Dim RECHNUNG As New cRechnungsausgang(re("RK_ID"))

                                                            If RECHNUNG.DELETE_POSITIONEN(RECHNUNG.RK_ID, r415("LeistungsNr"), r415("Steuerpflichtig"), r415("LeistungsBez"), r415("IndexZkteing")) Then
                                                                RECHNUNG.SteuerfreierGesamtbetrag = steuerfreiegerGesamtbetrag * If(RECHNUNG.Vorzeichen = "-", -1, 1)
                                                                RECHNUNG.SteuerpflichtigerGesamtbetrag = steuerpflichtigerGesamtbetrag * If(RECHNUNG.Vorzeichen = "-", -1, 1)
                                                                isSet = RECHNUNG.SAVE(False)
                                                            End If



                                                        Next



                                                    End If


                                                Next


                                                If sumCurrenRow > 0 Then
                                                    Dim RElastEntry As DataRow = dtRechnung.Rows(dtRechnung.Rows.Count - 1)

                                                    Dim NEWPOS As New cRechnungsausgangPositionen(RElastEntry("RK_ID"))
                                                    NEWPOS.Anzahl = 1
                                                    NEWPOS.LeistungsNr = 415
                                                    If steuersatz = 0 Then
                                                        NEWPOS.Steuerpflichtig = False
                                                    Else
                                                        Dim sql As New SQL
                                                        NEWPOS.Steuerpflichtig = (New VERAG_PROG_ALLGEMEIN.SQL).DLookup("Steuerpflichtig", "Leistungen", "LeistungsNr= 415", "FMZOLL")
                                                    End If

                                                    'TODO: Übersetzung in Fakt.Sprache
                                                    NEWPOS.LeistungsBez = "Überweisungs/Bankspesen"

                                                    Dim preis As Double = 0
                                                    If rowBS("Bankspesen %") > 0 Then

                                                        If sumCurrenRow > 0 Then

                                                            preis = CInt(Math.Round(sumCurrenRow * rowBS("Bankspesen %") + 0.5, MidpointRounding.AwayFromZero))
                                                        Else
                                                            preis = CInt(Math.Round(0 - sumCurrenRow * rowBS("Bankspesen %") + 0.5, MidpointRounding.AwayFromZero))

                                                        End If
                                                    Else
                                                        preis = 0
                                                    End If

                                                    If preis < rowBS("Bankspesen Mindestbetrag") Then
                                                        preis = rowBS("Bankspesen Mindestbetrag")
                                                    End If

                                                    If sumCurrenRow < 0 Then
                                                        preis = 0 - preis
                                                    End If

                                                    Dim RECHNUNG As New cRechnungsausgang(RElastEntry("RK_ID"))

                                                    If NEWPOS.Steuerpflichtig Then
                                                        NEWPOS.SteuerpflichtigerBetrag = preis
                                                        RECHNUNG.SteuerpflichtigerGesamtbetrag = RECHNUNG.SteuerpflichtigerGesamtbetrag + preis

                                                    Else
                                                        NEWPOS.SteuerfreierBetrag = preis
                                                        RECHNUNG.SteuerfreierGesamtbetrag = RECHNUNG.SteuerfreierGesamtbetrag + preis

                                                    End If

                                                    NEWPOS.Preis = preis
                                                    If NEWPOS.INSERT(RElastEntry("RK_ID")) Then RECHNUNG.SAVE(False)



                                                End If

                                            End If

                                        End If

                                    Next

                                End If
                            End If

                        Next

                    Else
                        isSet = True

                    End If


                Next

            Else
                isSet = True

            End If

            Return isSet

        Catch ex As Exception
            VERAG_PROG_ALLGEMEIN.cErrorHandler.ERR(ex.Message, ex.StackTrace, System.Reflection.MethodInfo.GetCurrentMethod.Name)
        End Try

        Return False

    End Function

    Private Function setMautgesamtberichtInRechnung(Sachbearbeiter As String, rechnungsdatum As Date, dtSammelRechnugen As DataTable)
        Try
            Dim counterPDF As Integer = 0
            Dim counterCSV As Integer = 0

            Dim attachmentIsSet As Boolean = False
            If dtSammelRechnugen.Rows.Count = 0 Then
                MsgBox("Keine Rechnungen für die Anlage der Mautgesamtberichte gefunden!" & vbNewLine & "Vorgang wird abgebrochen.")
                Return False

            End If
            If Directory.Exists(PathMautberichte) Then
                For Each f In Directory.GetFiles(PathMautberichte)
                    If f.Contains("_Maut.csv") Then
                        Dim FileCSV = New FileInfo(f)
                        If FileCSV.Name.Length > 10 Then
                            Dim KundenNr = FileCSV.Name.ToString.Substring(0, 6)
                            If IsNumeric(KundenNr) Then
                                Dim RK_ID As Integer = dtSammelRechnugen.AsEnumerable().Where(Function(r) r.Field(Of Integer)("RechnungsKundenNr") = KundenNr).Select(Function(r) r.Field(Of Integer)("RK_ID")).FirstOrDefault()
                                If RK_ID > 0 Then
                                    Dim RECHNUNG As New cRechnungsausgang(RK_ID)
                                    attachmentIsSet = AddAttachementToRE(FileCSV.FullName, KundenNr, RECHNUNG, rechnungsdatum)
                                    If attachmentIsSet Then counterCSV = counterCSV + 1
                                End If

                            End If

                        End If


                    ElseIf f.Contains("_Maut.pdf") Then
                        Dim FilePDF = New FileInfo(f)
                        If FilePDF.Name.Length > 10 Then
                            Dim KundenNr = FilePDF.Name.ToString.Substring(0, 6)
                            If IsNumeric(KundenNr) Then
                                Dim RK_ID As Integer = dtSammelRechnugen.AsEnumerable().Where(Function(r) r.Field(Of Integer)("RechnungsKundenNr") = CInt(KundenNr)).Select(Function(r) r.Field(Of Integer)("RK_ID")).FirstOrDefault()
                                If RK_ID > 0 Then
                                    Dim RECHNUNG As New cRechnungsausgang(RK_ID)
                                    attachmentIsSet = AddAttachementToRE(FilePDF.FullName, KundenNr, RECHNUNG, rechnungsdatum)
                                    If attachmentIsSet Then counterPDF = counterPDF + 1
                                End If

                            End If
                        End If
                    End If
                Next

            End If

            Label70.Text = "7. Hängt Mautgesamtbericht an Sammenrechnungen an." & " CSV: " & counterCSV & " PDF: " & counterPDF
            Return attachmentIsSet

        Catch ex As SystemException
            VERAG_PROG_ALLGEMEIN.cErrorHandler.ERR(ex.Message, ex.StackTrace, System.Reflection.MethodInfo.GetCurrentMethod.Name)
        End Try

        Label70.Text = "7. Hängt Mautgesamtbericht an Sammenrechnungen an."
        Return False

    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!!!

        If Not System.IO.File.Exists(pathFile) Then Return False

        Dim fi As New System.IO.FileInfo(pathFile)

        Dim DS As New VERAG_PROG_ALLGEMEIN.cDATENSERVER("MDM", "GESAMTBERICHT", rechnungsdatum.ToString("ddMMyyyy"), kdNr, "", fi.Name, kdNr)
        If Not DS.uploadDataToDATENSERVER(pathFile, fi.Name, fi.Extension,,,, True) Then
            MsgBox("Fehler beim Speichern: Datenserver! KDNR:" & kdNr)
            Return False
        End If
        If CInt(DS.da_id) <= 0 Then
            MsgBox("Keine DocId!")
            Return False
        End If
        Dim da_id = DS.da_id
        Dim destPath = DS.GET_TOP1_PATH

        If RECHNUNG IsNot Nothing Then
            RECHNUNG.ANHAENGE.Clear()
            Dim ANH As New VERAG_PROG_ALLGEMEIN.cRechnungsausgangAnhaenge
            ANH.dsId = CInt(DS.da_id)
            ANH.Bezeichnung = DS.da_name
            RECHNUNG.ANHAENGE.Add(ANH)
            Return RECHNUNG.SAVE_ANHAENGE(RECHNUNG.RK_ID, False, False)
        Else
            MsgBox("Rechnung nicht initialisiert.")
            Return False
        End If

    End Function

    Private Function setStatus2(Sachbearbeiter As String, rechnungsdatum As Date, dtSammelRechnugen As DataTable, automMailversand As Boolean) As Boolean

        Dim cnt = 0

        Dim reIsSet As Boolean = False
        If dtSammelRechnugen.Rows.Count > 0 Then
            For Each re In dtSammelRechnugen.Rows

                reIsSet = cFakturierung.doSAMMELRechnungsDruck(19, 6, rechnungsdatum, rechnungsdatum, "", False, False, re("RechnungsKundenNr"), 7, , , , Nothing, , ,,, ,, ,,, automMailversand)

                If Not reIsSet Then
                    Return reIsSet
                End If

                txtPloseAnh_Einarbeitung.Text = cnt & " / " & dtSammelRechnugen.Rows.Count
                Dim proz As Double = (cnt / dtSammelRechnugen.Rows.Count) * 100
                pbPloseAnh_Proz.Value = proz
                lblPloseAnh_Proz.Text = proz.ToString("N2") & " %"
                'GroupBox12.Refresh()
                My.Application.DoEvents()

                cnt += 1
            Next

        End If


        pbPloseAnh_Proz.Value = 100
        txtPloseAnh_Einarbeitung.Text = dtSammelRechnugen.Rows.Count & " / " & dtSammelRechnugen.Rows.Count
        lblPloseAnh_Proz.Text = "100.00 %"

        Return reIsSet


    End Function

    Private Sub Button19_Click(sender As Object, e As EventArgs) Handles btn_setRENr.Click
        Dim Sachbearbeiter = cboSachbearbeiter._value
        Dim rechnungsdatum As Date = CDate(dtRechnungsdatum.Text)
        Dim rechnungsstatus As Integer = 0
        If rechnungsdatum > Today() Then
            MsgBox("Rechnungsdatum liegt in der Zukunft, nicht möglich")
            Exit Sub

        End If

        If Sachbearbeiter = "" Then
            MsgBox("Sachbearbeiter auswählen!")
            Exit Sub
        End If

        Dim cnt = 0
        Dim kdnr As Integer = -1

        If rbkunde.Checked Then
            If KdSearchBox3.KdNr > 0 Then
                kdnr = KdSearchBox3.KdNr
            Else
                MsgBox("Kunde auswählen!")
                Exit Sub
            End If
        End If



        Dim listPDFs As New List(Of String)

        'Dim SQLString = "SELECT [Firma_ID], RechnungsNr,Buchungsjahr,DruckDatumZeit,[Status], [Sammelrechnung], [Sachbearbeiter], [RechnungsKundenNr] 
        '                                             FROM Rechnungsausgang
        '                                             WHERE [Status] = 0 AND [Sammelrechnung] = 6 AND UPPER([Sachbearbeiter]) = '" & Sachbearbeiter & "' AND ([SteuerpflichtigerGesamtbetrag] <> 0 OR [SteuerfreierGesamtbetrag] <> 0) AND cast(Abfertigungsdatum as Date) = '" & rechnungsdatum & "' 
        '                                             GROUP BY [Firma_ID], RechnungsNr,Buchungsjahr,DruckDatumZeit,[Status], [Sammelrechnung], [Sachbearbeiter], [RechnungsKundenNr]
        '                                             ORDER BY [Firma_ID], [Status], [Sammelrechnung], [Sachbearbeiter], [RechnungsKundenNr]"


        Dim SQLString = "SELECT [Firma_ID], [Status], [Sammelrechnung], [Sachbearbeiter], [RechnungsKundenNr], [Währungscode], isnull([Steuersatz %],0) as [Steuersatz %], cast([Lastschrift] as bit) as Lastschrift, Sum([SteuerpflichtigerGesamtbetrag]+[SteuerfreierGesamtbetrag]) AS Sammelrechnungsbetrag
                                                    FROM Rechnungsausgang
                                                    WHERE [Status] = 0 AND [Sammelrechnung] = 6 AND UPPER([Sachbearbeiter]) = '" & Sachbearbeiter & "' AND ([SteuerpflichtigerGesamtbetrag] <> 0 OR [SteuerfreierGesamtbetrag] <> 0) AND cast(Abfertigungsdatum as Date) = '" & rechnungsdatum & "'  
                                                    GROUP BY [Firma_ID], [Status], [Sammelrechnung], [Sachbearbeiter], [RechnungsKundenNr], [Währungscode], [Steuersatz %], [Lastschrift]
                                                    ORDER BY [Firma_ID], [Status], [Sammelrechnung], [Sachbearbeiter], [RechnungsKundenNr]"




        Dim dtSammelrechnungenGruppiert As DataTable = (New SQL).loadDgvBySql(SQLString, "FMZOLL")

        If dtSammelrechnungenGruppiert.Rows.Count > 0 Then

            If Not vbYes = MsgBox("Möchten Sie die Rechnungsnummern für " & dtSammelrechnungenGruppiert.Rows.Count & " Rechnungen setzen?" & vbNewLine & "Es wird eine Rechnungsnummer vergeben, die Rechnungen gelten somit als gedruckt und können nicht mehr bearbeitet werden.", vbYesNoCancel) Then
                MsgBox("Rechnungslauf wird abgebrochen!") : Exit Sub
            End If

            Dim reNrisSet = setStatus2(Sachbearbeiter, rechnungsdatum, dtSammelrechnungenGruppiert, cbxStatusAUTOMAIL.Checked)

            showPic(reNrisSet, PictureBox8)

            If Not reNrisSet Then
                MsgBox("Fehler beim Setzen der Rechnungsnummer" & vbNewLine & "Rechnungslauf wird abgebrochen!")
                Exit Sub
            End If

        End If



        Dim SQLStringGruppierteSammelrechnung = "SELECT [Firma_ID], RechnungsNr,Buchungsjahr,DruckDatumZeit,[Status], RechnungsKundenNr, Adressen.LandKz, isnull(kde_keineMWSt,0) as keinMWSTKunde, SUM(Rechnungsausgang.SteuerpflichtigerGesamtbetrag) as Steuer
                    FROM Rechnungsausgang 
                    INNER JOIN Adressen on AdressenNr = RechnungsKundenNr 
                    LEFT JOIN tblKundenErweitert on kde_KundenNr = RechnungsKundenNr
                    WHERE [Status] = 2 AND [Sammelrechnung] = 6 AND UPPER(Rechnungsausgang.Sachbearbeiter) = '" & Sachbearbeiter & "' AND ([SteuerpflichtigerGesamtbetrag] <> 0 OR [SteuerfreierGesamtbetrag] <> 0) AND cast(Abfertigungsdatum as Date) = '" & rechnungsdatum & "'  and RechnungsNr is not null " & IIf(kdnr > 0, " AND RechnungsKundenNr = " & kdnr, "") & "  
                    group by [Firma_ID], RechnungsNr,Buchungsjahr,DruckDatumZeit,[Status], RechnungsKundenNr, Adressen.LandKz, isnull(kde_keineMWSt,0)
                    ORDER BY [Firma_ID], [Status], RechnungsNr"

        Dim dtSelectedSammelrechnungen As DataTable = (New SQL).loadDgvBySql(SQLStringGruppierteSammelrechnung, "FMZOLL")

        If dtSelectedSammelrechnungen.Rows.Count > 0 Then

            If cbxVorschau.Checked Then
                Dim nurNICHTEUKunden As Boolean = False
                If rbAlleKunden.Checked Then
                    nurNICHTEUKunden = MsgBox("Sollen nur die Rechnungen der NICHT-EU Kunden gedruckt werden?" & vbNewLine & "Ja -> nur NICHT-EU KUNDEN" & vbNewLine & "Nein -> alle KUNDEN", vbYesNo)
                End If

                Dim dTLANDEU As DataTable = (New SQL).loadDgvBySql("select LandKz, MitgliedslandEU from Währungstabelle where LandKz is not null", "FMZOLL")

                Dim R As DataRow = dTLANDEU.NewRow
                R("LandKz") = "MK"
                R("MitgliedslandEU") = False
                dTLANDEU.Rows.Add(R)

                For Each rowRE In dtSelectedSammelrechnungen.Rows

                    Dim path = ""
                    Dim isEU As Boolean = dTLANDEU.AsEnumerable().Where(Function(res) res.Field(Of String)("LandKz") = rowRE("LandKZ")).Select(Function(res) res.Field(Of Boolean)("MitgliedslandEU")).FirstOrDefault()

                    'für nicht MWST-Kunde Originalrechnung (ohne Kopie) ausdrucken (die müssen die Originalrechnung per Post bekommen)!
                    If nurNICHTEUKunden Then

                        If Not isEU Then

                            If rowRE("keinMWSTKunde") Then
                                'kein MWST Kunde -> ORIGINAL-RE Ausdruck
                                cFakturierung.doSAMMELRechnungsDruck_Abschnitt(rowRE("RechnungsNr"), rowRE("Firma_ID"), rowRE("Buchungsjahr"), rowRE("DruckDatumZeit"), "", True, True, 7, path,, , , , , , ,,, cbxMautanh.Checked, False)
                            Else
                                'MWST Kunde -> wenn kein MWST-Betrag ->Original sonst Kopie Ausdruck!
                                cFakturierung.doSAMMELRechnungsDruck_Abschnitt(rowRE("RechnungsNr"), rowRE("Firma_ID"), rowRE("Buchungsjahr"), rowRE("DruckDatumZeit"), "", True, True, 7, path,, , , , , , ,,, cbxMautanh.Checked, rowRE("Steuer") <> 0)

                            End If

                        End If

                    Else

                        If rowRE("keinMWSTKunde") Then
                            'kein MWST Kunde -> ORIGINAL-RE Ausdruck
                            cFakturierung.doSAMMELRechnungsDruck_Abschnitt(rowRE("RechnungsNr"), rowRE("Firma_ID"), rowRE("Buchungsjahr"), rowRE("DruckDatumZeit"), "", True, True, 7, path,, , , , , , ,,, cbxMautanh.Checked, False)
                        Else
                            'MWST Kunde -> wenn kein MWST-Betrag ->Original sonst Kopie Ausdruck!
                            cFakturierung.doSAMMELRechnungsDruck_Abschnitt(rowRE("RechnungsNr"), rowRE("Firma_ID"), rowRE("Buchungsjahr"), rowRE("DruckDatumZeit"), "", True, True, 7, path,, , , , , , ,,, cbxMautanh.Checked, rowRE("Steuer") <> 0)

                        End If
                    End If


                    If path <> "" Then listPDFs.Add(path)


                    If True Then 'cnt Mod 10 = 0 Then
                        txtPloseAnh_Einarbeitung.Text = cnt & " / " & dtSelectedSammelrechnungen.Rows.Count
                        Dim proz As Double = (cnt / dtSelectedSammelrechnungen.Rows.Count) * 100
                        pbPloseAnh_Proz.Value = proz
                        lblPloseAnh_Proz.Text = proz.ToString("N2") & " %"
                        'GroupBox12.Refresh()
                        My.Application.DoEvents()
                    End If
                    cnt += 1


                Next

                If listPDFs.Count > 0 Then

                    Dim pathPDF = listPDFs(0).ToString

                    If listPDFs.Count > 1 Then
                        Dim pathPDFMerge = VERAG_PROG_ALLGEMEIN.DATENVERVER_OPTIONS.getTMPPath("MDM_Sammelrechnung.pdf", ".pdf", False, False)
                        If Not FormularManagerNEU.MergePdfFiles(listPDFs, pathPDFMerge) Then
                            Exit Sub
                            MsgBox("Fehler beim Zusammenführen der PDFs.")
                            showPic(False, PictureBox9)
                        Else
                            showPic(True, PictureBox9)
                            Process.Start(pathPDFMerge)
                        End If

                    Else
                        showPic(True, PictureBox9)
                        Process.Start(pathPDF)

                    End If

                    pbPloseAnh_Proz.Value = 100
                    txtPloseAnh_Einarbeitung.Text = dtSelectedSammelrechnungen.Rows.Count & " / " & dtSelectedSammelrechnungen.Rows.Count
                    lblPloseAnh_Proz.Text = "100.00 %"



                Else
                    MsgBox("Datei von " & rechnungsdatum.ToShortDateString & " konnte nicht erstellt werden!")

                End If

            End If


            If cbxRechnungsjournaldrucken.Checked Then
                REJournalExcel(Sachbearbeiter, rechnungsdatum, -1)
                REJournaByCountrylExcel(Sachbearbeiter, rechnungsdatum, -1)
            End If

            If cbxAbfVerbotdrucken.Checked Then AbfVerbotExcel(Sachbearbeiter, rechnungsdatum, -1)





        Else

            showPic(False, PictureBox9)

            If kdnr > 0 Then
                MsgBox("Keine Sammelrechnung zum " & rechnungsdatum.ToShortDateString & " von " & Sachbearbeiter & " für Kundennummer " & kdnr & " vorhanden!")
            Else
                MsgBox("Keine Sammelrechnung zum " & rechnungsdatum.ToShortDateString & " von " & Sachbearbeiter & " vorhanden!")
            End If

        End If
    End Sub

    Private Sub Button18_Click(sender As Object, e As EventArgs) Handles Button18.Click
        If cbxMautbericht._value = "" Then Exit Sub
        If cbxDateMautbericht._value = "" Then Exit Sub

        Try
            If Not Directory.Exists(PathMautberichte) Then MsgBox("Pfad " & PathMautberichte & " nicht verfügbar" & vbNewLine & "Vorgang wird abgebrochen!") : Exit Sub

            Select Case cbxMautbericht._value
            'nur intern
                Case "Gesamtbericht_EXCEL"

                    Dim dtGesamtbericht As DataTable = (New SQL).loadDgvBySql("SELECT tblMautbericht.[Customer No], Adressen.Ordnungsbegriff AS [Customer name], tblMautbericht.[Net Amount], tblMautbericht.[VAT Amount], tblMautbericht.[Total Amount] From tblMautbericht INNER Join Adressen On tblMautbericht.[Customer No] = Adressen.AdressenNr Where cast(BillingDate as Date) = '" & cbxDateMautbericht._value & "'", "FMZOLL")
                    cProgramFunctions.genExcelFromDT_NEW(dtGesamtbericht, {"C1:C" & (dtGesamtbericht.Rows.Count + 1), "D1:D" & (dtGesamtbericht.Rows.Count + 1), "E1:E" & (dtGesamtbericht.Rows.Count + 1)},,,,, True)

                'für Kunde an RE anhängen 
                Case "Gesamtbericht_CSV"

                    Dim AnzahlCSV_Berichte As Integer = CInt((New SQL).getValueTxtBySql("SELECT count(distinct(tblMautbericht.[Customer No])) FROM Adressen INNER JOIN tblMautbericht ON Adressen.AdressenNr = tblMautbericht.[Customer No] WHERE Adressen.ExportMautberichtCSV=1 AND cast(BillingDate as Date) =  '" & cbxDateMautbericht._value & "'", "FMZOLL"))

                    Dim dtBerichtkunden_CSV As DataTable = (New SQL).loadDgvBySql("SELECT [Customer No], [Licence Plate Number], [Transaction Country], [Transaction date], tblMautbericht.[Product description], tblMautbericht.[Card number], tblMautbericht.[Entry Terminal], tblMautbericht.[Exit Terminal], tblMautbericht.[Net Amount], tblMautbericht.[VAT Amount], tblMautbericht.[Total Amount]
                                                                          FROM Adressen 
                                                                          INNER JOIN tblMautbericht ON Adressen.AdressenNr = tblMautbericht.[Customer No]
                                                                          WHERE Adressen.ExportMautberichtCSV=1 AND cast(BillingDate as Date) = '" & cbxDateMautbericht._value & "'
                                                                          ORDER BY tblMautbericht.[Customer No], tblMautbericht.[Licence Plate Number], tblMautbericht.[Transaction Country], tblMautbericht.[Transaction date], tblMautbericht.[Product description], tblMautbericht.[Card number], tblMautbericht.[Entry Terminal], tblMautbericht.[Exit Terminal]", "FMZOLL")
                    If dtBerichtkunden_CSV.Rows.Count > 0 Then

                        Dim displayView = New DataView(dtBerichtkunden_CSV, "", "Customer No", DataViewRowState.CurrentRows)
                        Dim distinctDT_CSV As DataTable = displayView.ToTable(True, "Customer No")
                        Dim cnt As Integer = 0

                        'wenn bereits CSV-Datei im Ordner dann löschen!
                        If Directory.GetFiles(PathMautberichte) IsNot Nothing Then
                            For Each f In Directory.GetFiles(PathMautberichte)
                                If f.ToString.ToLower.EndsWith(".csv") Then File.Delete(f)
                            Next
                        End If

                        For Each csv As DataRow In distinctDT_CSV.Rows



                            Dim dt_CSV_selected = dtBerichtkunden_CSV.Select("[Customer No] ='" & csv.Item(0) & "'").CopyToDataTable

                            Dim fn As String = PathMautberichte & "\" & csv.Item("Customer No") & "_Maut.csv"
                            Dim outFile As System.IO.StreamWriter = My.Computer.FileSystem.OpenTextFileWriter(fn, False)
                            Dim clmns As String = ""
                            For i = 0 To dt_CSV_selected.Columns.Count - 1
                                clmns &= dt_CSV_selected.Columns(i).ColumnName.ToString().Replace(";", ", ") & ";"
                            Next
                            outFile.WriteLine(clmns)
                            For i = 0 To dt_CSV_selected.Rows.Count - 1
                                clmns = ""
                                For j = 0 To dt_CSV_selected.Columns.Count - 1
                                    clmns &= dt_CSV_selected.Rows(i)(j).ToString.Replace(";", ", ") & ";"
                                Next
                                outFile.WriteLine(clmns)
                            Next
                            outFile.Close()

                            If True Then 'cnt Mod 10 = 0 Then
                                TextBox1.Text = cnt & " / " & AnzahlCSV_Berichte
                                Dim proz As Double = (cnt / AnzahlCSV_Berichte) * 100
                                pbMautAnh_Proz.Value = proz
                                lblMautAnh_Proz.Text = proz.ToString("N2") & " %"
                                'GroupBox12.Refresh()
                                My.Application.DoEvents()
                            End If
                            cnt += 1

                        Next

                        pbMautAnh_Proz.Value = 100
                        TextBox1.Text = AnzahlCSV_Berichte & " / " & AnzahlCSV_Berichte
                        lblMautAnh_Proz.Text = "100.00 %"


                        MsgBox("CSV-Berichte wurden unter " & PathMautberichte & "erzeugt.")
                    Else
                        MsgBox("Es wurden keine Daten bereitgestellt")

                    End If


                'für Kunde an RE anhängen (Tool Report to Verag Invoice aus FMZOLL)
                Case "Lieferantenbericht_PDF"

                    Dim AnzahlPDF_Berichte As Integer = CInt((New SQL).getValueTxtBySql("SELECT count(distinct(tblMautbericht.[Customer No])) FROM tblMautbericht WHERE cast(BillingDate as Date) =  '" & cbxDateMautbericht._value & "'", "FMZOLL"))

                    Dim dtBerichtkunden_PDF As DataTable = (New SQL).loadDgvBySql("SELECT tblMautbericht.[Customer No], Adressen.Ordnungsbegriff AS [Customer name], tblMautbericht.[Licence Plate Number], tblMautbericht.[Transaction date], tblMautbericht.[Transaction Country], tblMautbericht.[Product description], tblMautbericht.[Card number], tblMautbericht.[Entry Terminal], tblMautbericht.[Exit Terminal], Sum(tblMautbericht.[Net Amount]) AS [Net Amount], Sum(tblMautbericht.[VAT Amount]) AS [VAT Amount], Sum(tblMautbericht.[Total Amount]) AS [Total Amount]
                                                                            FROM tblMautbericht INNER JOIN Adressen ON tblMautbericht.[Customer No] = Adressen.AdressenNr
                                                                            WHERE cast(BillingDate as Date) = '" & cbxDateMautbericht._value & "' 
                                                                            GROUP BY tblMautbericht.[Customer No], Adressen.Ordnungsbegriff, tblMautbericht.[Licence Plate Number], tblMautbericht.[Transaction date], tblMautbericht.[Transaction Country], tblMautbericht.[Product description], tblMautbericht.[Card number], tblMautbericht.[Entry Terminal], tblMautbericht.[Exit Terminal] 
                                                                            ORDER BY tblMautbericht.[Licence Plate Number] , tblMautbericht.[Transaction Country], tblMautbericht.[Transaction date] ", "FMZOLL")

                    If dtBerichtkunden_PDF.Rows.Count = 0 Then
                        MsgBox("Es wurden keine Daten bereitgestellt")
                        Exit Sub
                    End If

                    Dim cnt = 0

                    Dim displayView = New DataView(dtBerichtkunden_PDF, "", "Customer No", DataViewRowState.CurrentRows)
                    Dim distinctDT_PDF As DataTable = displayView.ToTable(True, "Customer No")

                    'wenn bereits PDF-Datei im Ordner dann löschen!
                    If Directory.GetFiles(PathMautberichte) IsNot Nothing Then
                        For Each f In Directory.GetFiles(PathMautberichte)
                            If f.ToString.ToLower.EndsWith(".pdf") Then File.Delete(f)
                        Next
                    End If

                    If distinctDT_PDF.Rows.Count > 1 Then
                        For Each pdf As DataRow In distinctDT_PDF.Rows

                            'If pdf.Item(0) = 401026 Then
                            '    MsgBox("Test")
                            'End If

                            Dim dt_PDF_selected = dtBerichtkunden_PDF.Select("[Customer No] ='" & pdf.Item(0) & "'").CopyToDataTable

                            Dim dtLaender As DataTable = (New SQL).loadDgvBySql("SELECT tblMautbericht.[Customer No], tblMautbericht.[Transaction Country], sum(tblMautbericht.[Net Amount]) as Netto, sum(tblMautbericht.[VAT Amount]) as MWST, sum(tblMautbericht.[Total Amount]) as Brutto
                                                                          FROM tblMautbericht WHERE  [Customer No] ='" & pdf.Item(0) & "' AND cast(BillingDate as Date) =  '" & cbxDateMautbericht._value & "' 
                                                                          GROUP BY [Customer No], [Transaction Country]
                                                                           ORDER BY tblMautbericht.[Customer No], tblMautbericht.[Transaction Country]", "FMZOLL")



                            createPDFMautbericht(pdf.Item(0), dt_PDF_selected, cbxDateMautbericht._value, PathMautberichte, dtLaender)



                            If True Then 'cnt Mod 10 = 0 Then
                                TextBox1.Text = cnt & " / " & AnzahlPDF_Berichte
                                Dim proz As Double = (cnt / AnzahlPDF_Berichte) * 100
                                pbMautAnh_Proz.Value = proz
                                lblMautAnh_Proz.Text = proz.ToString("N2") & " %"
                                'GroupBox12.Refresh()
                                My.Application.DoEvents()
                            End If
                            cnt += 1

                        Next

                        pbMautAnh_Proz.Value = 100
                        TextBox1.Text = AnzahlPDF_Berichte & " / " & AnzahlPDF_Berichte
                        lblMautAnh_Proz.Text = "100.00 %"

                        MsgBox("PDF-Berichte wurden  unter " & PathMautberichte & "erzeugt.")

                    Else
                        MsgBox("Es wurden keine Daten bereitgestellt")

                    End If


            End Select


            countCSV = 0
            countPDF = 0
            If Directory.Exists(PathMautberichte) Then
                If Directory.GetFiles(PathMautberichte) IsNot Nothing Then
                    For Each f In Directory.GetFiles(PathMautberichte)
                        If f.ToString.ToLower.EndsWith("_maut.csv") Then countCSV += 1
                        If f.ToString.ToLower.EndsWith("_maut.pdf") Then countPDF += 1
                    Next
                End If
            End If
            lblAnzahlMautberichte.Text = countCSV + countPDF & "x Mautberichte (" & countCSV & "x CSV " & countPDF & "x PDF )"

        Catch ex As System.Exception
            VERAG_PROG_ALLGEMEIN.cErrorHandler.ERR(ex.Message, ex.StackTrace, System.Reflection.MethodInfo.GetCurrentMethod.Name)

        End Try
    End Sub

    Private Function createPDFMautbericht(kdnr As Integer, dt As DataTable, anhangsdatum As Date, path As String, dtLaender As DataTable) As String

        Dim rpt As New rptPLOSE_Anhang
        Dim sql As New VERAG_PROG_ALLGEMEIN.SQL

        rpt.DataSource = dt

        rpt.txtKunde.Text = kdnr & " " & New VERAG_PROG_ALLGEMEIN.cAdressen(kdnr).FullName
        rpt.lblRgDatum.Text = anhangsdatum.ToShortDateString

        rpt.GroupHeaderKz.DataField = "Licence Plate Number"


        'rpt.txtNettoKzSum.Visible = False
        'rpt.txtNettoGesSum.Visible = False
        'rpt.txtNetto.Visible = False
        'rpt.txtNettoKatSum.Visible = False
        'rpt.lblNetto.Visible = False

        'rpt.txtMWSTKzSum.Visible = False
        'rpt.txtMWSTGEsSum.Visible = False
        'rpt.txtMWST.Visible = False
        'rpt.txtMWSTKatSum.Visible = False
        'rpt.lblMWST.Visible = False

        'rpt.lblBrutto.Text = "Total Amount ( EUR )"
        'rpt.Label4.Text = bis.ToShortDateString
        'rpt.Label2.Text = "UTA-KundenNr:"
        rpt.TextBox1.Text = kdnr
        ' rpt.Label1.Text = " UTA Fleet Management Service"

        rpt.lblSummeKennzeichen.Visible = False
        rpt.lblService.Visible = False

        rpt.Label2.Visible = False
        rpt.TextBox1.Visible = False
        rpt.Label3.Visible = False
        rpt.Label4.Visible = False

        rpt.lblFirmaFax.Visible = False
        rpt.lblFirmaEmail.Visible = False
        rpt.Label16.Visible = False

        'rpt.lblSummeKennzeichen.Location = New PointF(rpt.lblSummeKennzeichen.Location.X + 4.5, rpt.lblSummeKennzeichen.Location.Y)
        'rpt.lblSumKategorie.Location = New PointF(rpt.lblSumKategorie.Location.X + 4.5, rpt.lblSumKategorie.Location.Y)
        'rpt.lblGessumme.Location = New PointF(rpt.lblGessumme.Location.X + 4.5, rpt.lblGessumme.Location.Y)

        Dim sumNetto As Double = 0
        Dim sumMWST As Double = 0
        Dim sumBrutto As Double = 0

        Dim sumNettoKat As Double = 0
        Dim sumMWSTKat As Double = 0
        Dim sumBruttoKat As Double = 0

        Dim sumNettoGes As Double = 0
        Dim sumMWSTGes As Double = 0
        Dim sumBruttoGes As Double = 0

        Dim cntKat = 0
        Dim cnt = 0
        rpt.GroupFooterKat.Visible = False

        AddHandler rpt.Detail.Format, Sub()

                                          rpt.txtKunde.Text = sql.isDbnullEmpty(rpt.Fields.Item("Customer No").Value, "")
                                          rpt.txtKunde.Text &= " " & sql.isDbnullEmpty(rpt.Fields.Item("Customer name").Value, "")

                                          rpt.txtProdukt.Text = sql.isDbnullEmpty(rpt.Fields.Item("Product description").Value, "") 'sql.isDbnullEmpty(rpt.Fields.Item("plose_ProduktCode").Value, "") & " - " & sql.isDbnullEmpty(rpt.Fields.Item("plose_Produktbeschreibung").Value, "")


                                          rpt.txtKartennummer.Text = sql.isDbnullEmpty(rpt.Fields.Item("Card number").Value, "")
                                          rpt.txtEingang.Text = sql.isDbnullEmpty(rpt.Fields.Item("Entry Terminal").Value, "")
                                          rpt.txtAusgang.Text = sql.isDbnullEmpty(rpt.Fields.Item("Exit Terminal").Value, "")
                                          rpt.txtLand.Text = sql.isDbnullEmpty(rpt.Fields.Item("Transaction Country").Value, "")
                                          rpt.txtDatum.Text = sql.isDbnullEmpty(rpt.Fields.Item("Transaction date").Value, "")

                                          rpt.txtNetto.Text = sql.isDbnullEmptyDbl(rpt.Fields.Item("Net Amount").Value, 2, "")
                                          rpt.txtMWST.Text = sql.isDbnullEmptyDbl(rpt.Fields.Item("VAT Amount").Value, 2, "")
                                          rpt.txtBrutto.Text = sql.isDbnullEmptyDbl(rpt.Fields.Item("Total Amount").Value, 2, "")

                                          sumNetto += sql.isDbnullEmptyDbl(rpt.Fields.Item("Net Amount").Value, 4, 0)
                                          sumMWST += sql.isDbnullEmptyDbl(rpt.Fields.Item("VAT Amount").Value, 4, 0)
                                          sumBrutto += sql.isDbnullEmptyDbl(rpt.Fields.Item("Total Amount").Value, 4, 0)
                                          cnt += 1
                                      End Sub

        AddHandler rpt.GroupHeaderKz.Format, Sub()
                                                 rpt.txtKennzeichen.Text = sql.isDbnullEmpty(rpt.Fields.Item("Licence Plate Number").Value, "")
                                                 If rpt.txtKennzeichen.Text = "" Then rpt.lblKennzeichen.Visible = False
                                             End Sub
        AddHandler rpt.GroupHeaderKat.Format, Sub()
                                                  rpt.lblKategorie.Text = "MAUT REPORT"
                                              End Sub

        AddHandler rpt.GroupFooterKz.Format, Sub()
                                                 rpt.txtNettoKzSum.Text = sumNetto.ToString("N2")
                                                 rpt.txtMWSTKzSum.Text = sumMWST.ToString("N2")
                                                 rpt.txtBruttoKzSum.Text = sumBrutto.ToString("N2")
                                                 sumNettoGes += sumNetto
                                                 sumMWSTGes += sumMWST
                                                 sumBruttoGes += sumBrutto

                                                 sumNetto = 0
                                                 sumMWST = 0
                                                 sumBrutto = 0

                                                 rpt.lblSummeKennzeichen.Text = rpt.lblSummeKennzeichen.Text.Replace("Kennzeichen", sql.isDbnullEmpty(rpt.Fields.Item("Licence Plate Number").Value, ""))
                                             End Sub



        AddHandler rpt.GroupFooterKat.Format, Sub()
                                                  sumNettoKat += sumNetto
                                                  sumMWSTKat += sumMWST
                                                  sumBruttoKat += sumBrutto
                                                  sumNetto = 0
                                                  sumMWST = 0
                                                  sumBrutto = 0

                                                  rpt.txtNettoKatSum.Text = sumNettoKat.ToString("N2")
                                                  rpt.txtMWSTKatSum.Text = sumMWSTKat.ToString("N2")
                                                  rpt.txtBruttoKatSum.Text = sumBruttoKat.ToString("N2")
                                                  cntKat += 1
                                                  rpt.lblSumKategorie.Text = rpt.lblSumKategorie.Text.Replace("Kunde", sql.isDbnullEmpty(rpt.Fields.Item("Customer No").Value, ""))
                                              End Sub
        AddHandler rpt.ReportFooter1.Format, Sub()
                                                 'sumNettoGes += sumNettoKat
                                                 'sumMWSTGes += sumMWSTKat
                                                 'sumBruttoGes += sumBruttoKat
                                                 sumNettoKat = 0
                                                 sumMWSTKat = 0
                                                 sumBruttoKat = 0

                                                 sumNetto = 0
                                                 sumMWST = 0
                                                 sumBrutto = 0

                                                 rpt.txtNettoGesSum.Text = sumNettoGes.ToString("N2")
                                                 rpt.txtMWSTGEsSum.Text = sumMWSTGes.ToString("N2")
                                                 rpt.txtBruttoGesSum.Text = sumBruttoGes.ToString("N2")



                                                 'If cntKat <= 1 Then
                                                 '    rpt.GroupFooterKat.Visible = False
                                                 'End If
                                             End Sub

        'print.Viewer.LoadDocument(rpt)
        'print.Viewer.ViewType = GrapeCity.Viewer.Common.Model.ViewType.Continuous
        'print.Show()



        Dim tmpPath = path & "\" & kdnr & "_Maut.pdf"
        Dim p As New GrapeCity.ActiveReports.Export.Pdf.Section.PdfExport
        rpt.Run(False)




        Dim rpt2 As New rptPLOSE_LaenderGesamt
        rpt2.DataSource = dtLaender

        rpt2.Label7.Visible = False
        rpt2.lblEU.Visible = False

        rpt2.lblUeberschrift.Text = "Länder Gesamt"

        Dim sum = 0
        '  rpt.lblUeberschrift.Text = "PLOSE Summenbericht " & dat_Sum_Von.Text & " bis " & dat_Sum_Bis.Text
        rpt2.lblSachbearbeiter.Text = VERAG_PROG_ALLGEMEIN.cAllgemein.USRNAME
        'rpt.lblMandantNiederlassung.Text = PERSONAL.Mandant & "  /  " & PERSONAL.Niederlassung

        'Dim cnt As Integer = 0
        rpt2.lblDat.Text = Now.ToLongDateString


        Dim sumPreis As Double = 0
        Dim sumNettoLaender As Double = 0
        Dim sumMWSTLaender As Double = 0
        Dim sumBruttoLaender As Double = 0
        Dim sumBruttoAlleLeistungen As Double = 0
        Dim sumMenge As Double = 0

        AddHandler rpt2.Detail.Format, Sub()
                                           rpt2.lblLand.Text = sql.isDbnullEmpty(rpt2.Fields.Item("Transaction Country").Value, "")
                                           rpt2.lblEU.Text = "" 'sql.isDbnullEmpty(rpt.Fields.Item("EU").Value, "")

                                           rpt2.lblNetto.Text = sql.isDbnullEmptyDbl(rpt2.Fields.Item("Netto").Value, 2, "")
                                           rpt2.lblMWST.Text = sql.isDbnullEmptyDbl(rpt2.Fields.Item("MWST").Value, 2, "")
                                           rpt2.lblBrutto.Text = sql.isDbnullEmptyDbl(rpt2.Fields.Item("Brutto").Value, 2, "")

                                           sumNetto += sql.isDbnullEmptyDbl(rpt2.Fields.Item("Netto").Value, 4, 0)
                                           sumMWST += sql.isDbnullEmptyDbl(rpt2.Fields.Item("MWST").Value, 4, 0)
                                           sumBrutto += sql.isDbnullEmptyDbl(rpt2.Fields.Item("Brutto").Value, 4, 0)



                                       End Sub


        AddHandler rpt2.ReportFooter1.Format, Sub()
                                                  rpt2.lblSumNetto.Text = sumNetto.ToString("N2")
                                                  rpt2.lblSumMwst.Text = sumMWST.ToString("N2")
                                                  rpt2.lblSumBrutto.Text = sumBrutto.ToString("N2")

                                              End Sub
        rpt2.Run()

        For i = 0 To rpt2.Document.Pages.Count - 1
            rpt.Document.Pages.Add(rpt2.Document.Pages(i))
        Next

        p.NeverEmbedFonts = ""
        p.Export(rpt.Document, tmpPath)

        rpt.Dispose()

        Return tmpPath

    End Function

    Private Sub cbxDateMautbericht_SelectedValueChanged(sender As Object, e As EventArgs) Handles cbxDateMautbericht.SelectedValueChanged


        Dim dtSummen As DataTable = (New SQL).loadDgvBySql("SELECT [Datenquelle] as Lieferant,sum([Net Amount]) as Netto,sum([VAT Amount]) as VAT,sum([Total Amount]) as Brutto
                                                            FROM [VERAG].[dbo].[tblMautbericht] 
                                                              where   cast([Billingdate] as date) = '" & cbxDateMautbericht._value & "'
                                                              group by [Datenquelle]", "FMZOLL")

        Dim sumNetto As Double = 0
        Dim sumVAT As Double = 0
        Dim sumBrutto As Double = 0

        For Each row As DataRow In dtSummen.Rows
            If Not IsDBNull(row("Netto")) AndAlso IsNumeric(row("Netto")) Then sumNetto += CDbl(row("Netto"))
            If Not IsDBNull(row("VAT")) AndAlso IsNumeric(row("VAT")) Then sumVAT += CDbl(row("VAT"))
            If Not IsDBNull(row("Brutto")) AndAlso IsNumeric(row("Brutto")) Then sumBrutto += CDbl(row("Brutto"))
        Next

        Dim drLast = dtSummen.NewRow

        If dtSummen.Columns.Contains("Lieferant") Then drLast.Item("Lieferant") = "SUMME"
        If dtSummen.Columns.Contains("Netto") Then drLast.Item("Netto") = sumNetto
        If dtSummen.Columns.Contains("VAT") Then drLast.Item("VAT") = sumVAT
        If dtSummen.Columns.Contains("Brutto") Then drLast.Item("Brutto") = sumBrutto

        dtSummen.Rows.InsertAt(drLast, dtSummen.Rows.Count)


        With dgvMautbericht

            .Columns.Clear()

            .DataSource = dtSummen

            If dtSummen.Columns.Contains("Netto") Then
                .Columns(1).DefaultCellStyle.Format = "c2"
                .Columns(1).DefaultCellStyle.FormatProvider = CultureInfo.GetCultureInfo("de-DE")
                .Columns(1).DefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleRight
            End If

            If .Columns.Contains("VAT") Then
                .Columns(2).DefaultCellStyle.Format = "c2"
                .Columns(2).DefaultCellStyle.FormatProvider = CultureInfo.GetCultureInfo("de-DE")
                .Columns(2).DefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleRight
            End If

            If .Columns.Contains("Brutto") Then
                .Columns(3).DefaultCellStyle.Format = "c2"
                .Columns(3).DefaultCellStyle.FormatProvider = CultureInfo.GetCultureInfo("de-DE")
                .Columns(3).DefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleRight
            End If

            .AllowUserToAddRows = False
            .Columns("Lieferant").AutoSizeMode = DataGridViewAutoSizeColumnMode.Fill


        End With
    End Sub

    Private Sub KdSearchBox3_TextChanged(sender As Object, e As EventArgs) Handles KdSearchBox3.TextChanged
        rbkunde.Checked = True
    End Sub

    Private Sub Button1_Click_1(sender As Object, e As EventArgs) Handles btnMDMSammelrechnung.Click

        Dim f As New frmFaktSammelRgDrucken(19)
        f.Height = Screen.FromRectangle(Me.Bounds).WorkingArea.Size.Height
        f.Top = 0
        f.ShowDialog(Me)

    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

    Private Sub btnRechnugnsdaten_Click(sender As Object, e As EventArgs) Handles btnRechnugnsdaten.Click
        Dim f As New SDL.frmRechnungenSuche
        f.Show(Me)
    End Sub

    Private Sub Button1_Click_2(sender As Object, e As EventArgs) Handles btnMautanh_pruefen.Click

        Dim Sachbearbeiter = cboSachbearbeiter._value
        Dim rechnungsdatum As Date = CDate(dtRechnungsdatum.Text)
        Dim deleted As Boolean = False

        If rechnungsdatum > Today() Then
            MsgBox("Rechnungsdatum liegt in der Zukunft, nicht möglich")
            Exit Sub

        End If

        If Sachbearbeiter = "" Then
            MsgBox("Sachbearbeiter auswählen!")
            Exit Sub
        End If


        Dim rechnungenMitGesamtmautanhantCSV As String = (New SQL).getValueTxtBySqlVarList("SELECT COUNT(*) FROM Rechnungsausgang
                        inner join RechnungsausgangAnhaenge on Rechnungsausgang.RK_ID = RechnungsausgangAnhaenge.RK_ID
                        WHERE ([Status] = 0 or [Status] = 2 or [Status] = 4) AND [Sammelrechnung] = 6 AND UPPER([Sachbearbeiter]) = '" & Sachbearbeiter & "' AND ([SteuerpflichtigerGesamtbetrag] <> 0 OR [SteuerfreierGesamtbetrag] <> 0) AND cast(Abfertigungsdatum as Date) = '" & rechnungsdatum & "'   
                        and (RechnungsausgangAnhaenge.Bezeichnung like '%Maut.csv')", "FMZOLL",, 0)


        Dim rechnungenMitGesamtmautanhantPDF As String = (New SQL).getValueTxtBySqlVarList("SELECT COUNT(*) FROM Rechnungsausgang
                        inner join RechnungsausgangAnhaenge on Rechnungsausgang.RK_ID = RechnungsausgangAnhaenge.RK_ID
                        WHERE ([Status] = 0 or [Status] = 2 or [Status] = 4) AND [Sammelrechnung] = 6 AND UPPER([Sachbearbeiter]) = '" & Sachbearbeiter & "' AND ([SteuerpflichtigerGesamtbetrag] <> 0 OR [SteuerfreierGesamtbetrag] <> 0) AND cast(Abfertigungsdatum as Date) = '" & rechnungsdatum & "'   
                        and (RechnungsausgangAnhaenge.Bezeichnung like '%Maut.pdf')", "FMZOLL",, 0)



        MsgBox("Anzahl CSV-Anhänge: " & rechnungenMitGesamtmautanhantCSV & vbNewLine & "Anzahl PDF-Anhänge: " & rechnungenMitGesamtmautanhantPDF)

        If Directory.GetFiles(PathMautberichte) IsNot Nothing Then
            If Directory.GetFiles(PathMautberichte).Count = (countCSV + countPDF) OrElse (rechnungenMitGesamtmautanhantCSV = "0" AndAlso rechnungenMitGesamtmautanhantPDF = "0") Then Exit Sub
        End If


        Dim sqlCSV = "SELECT VermittlerKundenNr FROM Rechnungsausgang
                        inner join RechnungsausgangAnhaenge on Rechnungsausgang.RK_ID = RechnungsausgangAnhaenge.RK_ID
                        WHERE ([Status] = 0 or [Status] = 2 or [Status] = 4) AND [Sammelrechnung] = 6 AND UPPER([Sachbearbeiter]) = '" & Sachbearbeiter & "' AND ([SteuerpflichtigerGesamtbetrag] <> 0 OR [SteuerfreierGesamtbetrag] <> 0) AND cast(Abfertigungsdatum as Date) = '" & rechnungsdatum & "'   
                        and (RechnungsausgangAnhaenge.Bezeichnung like '%Maut.csv') order by VermittlerKundenNr "


        Dim sqlPDF = "SELECT VermittlerKundenNr FROM Rechnungsausgang
                        inner join RechnungsausgangAnhaenge on Rechnungsausgang.RK_ID = RechnungsausgangAnhaenge.RK_ID
                        WHERE ([Status] = 0 or [Status] = 2 or [Status] = 4) AND [Sammelrechnung] = 6 AND UPPER([Sachbearbeiter]) = '" & Sachbearbeiter & "' AND ([SteuerpflichtigerGesamtbetrag] <> 0 OR [SteuerfreierGesamtbetrag] <> 0) AND cast(Abfertigungsdatum as Date) = '" & rechnungsdatum & "'   
                        and (RechnungsausgangAnhaenge.Bezeichnung like '%Maut.pdf') order by VermittlerKundenNr "

        Dim dtVorhandeneCSV As DataTable = (New SQL).loadDgvBySql(sqlCSV, "FMZOLL")

        Dim dtVorhandenePDF As DataTable = (New SQL).loadDgvBySql(sqlPDF, "FMZOLL")

        Dim dtMissing As New DataTable()
        dtMissing.Columns.Add("name", GetType(String))

        If Directory.GetFiles(PathMautberichte) IsNot Nothing Then
            For Each f In Directory.GetFiles(PathMautberichte)
                If f.ToString.ToLower.EndsWith(".pdf") Then
                    Dim fileInfo As New FileInfo(f.ToString)
                    Dim KdNr As Integer = CInt(fileInfo.Name.ToString.Substring(0, 6))
                    If Not CheckValue(dtVorhandenePDF, Function(x) x("VermittlerKundenNr") = KdNr) Then
                        dtMissing.Rows.Add(fileInfo.Name)
                    End If
                End If


                If f.ToString.ToLower.EndsWith(".csv") Then
                    Dim fileInfo As New FileInfo(f.ToString)
                    Dim KdNr As Integer = CInt(fileInfo.Name.ToString.Substring(0, 6))
                    If Not CheckValue(dtVorhandeneCSV, Function(x) x("VermittlerKundenNr") = KdNr) Then
                        dtMissing.Rows.Add(fileInfo.Name)
                    End If
                End If



            Next




            If dtMissing.Rows.Count > 0 Then

                Dim b = New System.Text.StringBuilder()
                For Each resultRow In dtMissing.Rows
                    b.Append(resultRow(0) & vbNewLine)
                Next

                MsgBox("Folgende Anhänge wurden NICHT an die Rechnung angehängt:" & vbNewLine & b.ToString)


            End If

        End If



    End Sub

    Private Sub dtRechnungsdatum_ValueChanged(sender As Object, e As EventArgs) Handles dtRechnungsdatum.ValueChanged
        Dim sammelrechnung0vorhanden As Boolean = True
        sammelrechnung0vorhanden = checkIfStatus0Sammelrechnugnenvorhanden(cboSachbearbeiter._value, CDate(dtRechnungsdatum.Text))

        btnRePos.Enabled = sammelrechnung0vorhanden
        'Button19.Enabled = sammelrechnung0vorhanden wenn RE bereits Status 2 wird sie nur gedruckt!!!!
        btn_Mautanh_entfernen.Enabled = sammelrechnung0vorhanden


    End Sub


    Private Function checkIfStatus0Sammelrechnugnenvorhanden(Sachbearbeiter As String, rechnungsdatum As Date) As Boolean

        If Sachbearbeiter = "" Then Return False

        If rechnungsdatum > Today() Then Return False


        Dim rechnungenMitStatus0 As Integer = CInt((New SQL).getValueTxtBySqlVarList("SELECT COUNT(distinct(RechnungsKundenNr)) From Rechnungsausgang
                                                     Where [Status] = 0 And [Sammelrechnung] = 6 And UPPER([Sachbearbeiter]) = '" & Sachbearbeiter & "' AND ([SteuerpflichtigerGesamtbetrag] <> 0 OR [SteuerfreierGesamtbetrag] <> 0) AND cast(Abfertigungsdatum as Date) = '" & rechnungsdatum & "'", "FMZOLL",, 0))

        Dim rechnungenErledigt As Integer = CInt((New SQL).getValueTxtBySqlVarList("SELECT COUNT(distinct(RechnungsKundenNr)) From Rechnungsausgang
                                                     Where [Status] <> 0 And [Sammelrechnung] = 6 And UPPER([Sachbearbeiter]) = '" & Sachbearbeiter & "' AND ([SteuerpflichtigerGesamtbetrag] <> 0 OR [SteuerfreierGesamtbetrag] <> 0) AND cast(Abfertigungsdatum as Date) = '" & rechnungsdatum & "'", "FMZOLL",, 0))

        lblAnzRE.Text = rechnungenMitStatus0 & " /" & rechnungenErledigt & " (" & rechnungenMitStatus0 + rechnungenErledigt & ")"

        Return rechnungenMitStatus0 > 0

    End Function

    Private Sub cboSachbearbeiter_SelectedIndexChanged(sender As Object, e As EventArgs) Handles cboSachbearbeiter.SelectedIndexChanged
        Dim sammelrechnung0vorhanden As Boolean = True
        sammelrechnung0vorhanden = checkIfStatus0Sammelrechnugnenvorhanden(cboSachbearbeiter._value, CDate(dtRechnungsdatum.Text))

        'Button19.Enabled = sammelrechnung0vorhanden wenn RE bereits Status 2 wird sie nur gedruckt!!!!
        btnRePos.Enabled = True 'sammelrechnung0vorhanden
        btn_Mautanh_entfernen.Enabled = sammelrechnung0vorhanden

    End Sub

    Private Sub Button2_Click_1(sender As Object, e As EventArgs) Handles Button2.Click, Button3.Click, btnREJdruck.Click, btnAbfdruck.Click, btnFixeTaxe.Click

        Dim Sachbearbeiter = cboSachbearbeiter._value
        Dim rechnungsdatum As Date = CDate(dtRechnungsdatum.Text)
        Dim kdNr As Integer = -1

        If rechnungsdatum > Today() Then
            MsgBox("Rechnungsdatum liegt in der Zukunft, nicht möglich")
            Exit Sub

        End If

        If Sachbearbeiter = "" Then
            MsgBox("Sachbearbeiter auswählen!")
            Exit Sub
        End If

        If rbkunde.Checked Then
            If KdSearchBox3.KdNr > 0 Then
                kdNr = KdSearchBox3.KdNr
            Else
                MsgBox("Kunde auswählen!")
                Exit Sub
            End If
        End If



        Select Case sender.Name
            Case "Button2"

                ' Porto/Papiere berechnen.
                showPic(PortoPapiere(Sachbearbeiter, rechnungsdatum, kdNr), PictureBox4)


            Case "Button3"

                'Berechnet Banküberweisung/Bankspesen.
                showPic(Bankspesen(Sachbearbeiter, rechnungsdatum, kdNr), PictureBox5)


            Case "btnREJdruck"

                REJournalExcel(Sachbearbeiter, rechnungsdatum, kdNr)
                REJournaByCountrylExcel(Sachbearbeiter, rechnungsdatum, kdNr)

            Case "btnAbfdruck"

                AbfVerbotExcel(Sachbearbeiter, rechnungsdatum, kdNr)

            Case "btnFixeTaxe"

                showPic(FixeTaxe(Sachbearbeiter, rechnungsdatum, kdNr), PictureBox6)

        End Select




    End Sub



    Private Sub AbfVerbotExcel(Sachbearbeiter, rechnungsdatum, kdnr)

        Dim dtEbfertigungsverbot As DataTable = (New SQL).loadDgvBySql("SELECT 
                                                                                  Rechnungsausgang.Buchungsjahr, 
                                                                                  Rechnungsausgang.Währungscode, 
                                                                                  Rechnungsausgang.RechnungsNr, 
                                                                                  Rechnungsausgang.RechnungsDatum, 
                                                                                  MIN(Rechnungsausgang.KundenNrZentrale) AS KundenNrZentrale, 
                                                                                  MIN(Rechnungsausgang.RechnungsKundenNr) AS RechnungsKundenNr, 
                                                                                  MIN(Rechnungsausgang.[RechnungsName 1]) AS [RechnungsName 1], 
                                                                                  MAX(Rechnungsausgang.Abfertigungsdatum) AS Abfertigungsdatum, 
                                                                                  SUM(RechnungsausgangPositionen.SteuerpflichtigerBetrag) AS SteuerpflichtigerGesamtbetrag, 
                                                                                  SUM(RechnungsausgangPositionen.SteuerfreierBetrag) AS SteuerfreierGesamtbetrag, 
                                                                                  MIN(Rechnungsausgang.[Steuersatz %]) AS [Steuersatz %], 
                                                                                  Rechnungsausgang.Status, 
                                                                                  Rechnungsausgang.DruckDatumZeit, 
                                                                                  Rechnungsausgang.Sachbearbeiter
                                                                              FROM 
                                                                                  Rechnungsausgang
                                                                              INNER JOIN 
                                                                                  Filialen ON Rechnungsausgang.FilialenNr = Filialen.FilialenNr
                                                                              INNER JOIN 
                                                                                  Kunden ON Rechnungsausgang.RechnungsKundenNr = Kunden.KundenNr
                                                                              INNER JOIN 
                                                                                  RechnungsausgangPositionen ON Rechnungsausgang.RK_ID = RechnungsausgangPositionen.RK_ID
                                                                              WHERE 
                                                                                  Kunden.Abfertigungsverbot = 1 AND [Status] in (2,4) AND Rechnungsausgang.[Sammelrechnung] = 6 AND UPPER(Rechnungsausgang.[Sachbearbeiter]) = '" & Sachbearbeiter & "' AND ([SteuerpflichtigerGesamtbetrag] <> 0 OR [SteuerfreierGesamtbetrag] <> 0) AND cast(Abfertigungsdatum as Date) = '" & rechnungsdatum & "'  and RechnungsNr is not null " & IIf(kdnr > 0, " AND Rechnungsausgang.RechnungsKundenNr = " & kdnr, "") & "
                                                                              GROUP BY 
                                                                                  Rechnungsausgang.Buchungsjahr, 
                                                                                  Rechnungsausgang.Währungscode, 
                                                                                  Rechnungsausgang.RechnungsNr, 
                                                                                  Rechnungsausgang.RechnungsDatum, 
                                                                                  Rechnungsausgang.Status, 
                                                                                  Rechnungsausgang.DruckDatumZeit, 
                                                                                  Rechnungsausgang.Sachbearbeiter
                                                                              ORDER BY 
                                                                                  Rechnungsausgang.Buchungsjahr, 
                                                                                  Rechnungsausgang.Währungscode, 
                                                                                  Rechnungsausgang.RechnungsNr;", "FMZOLL")

        If dtEbfertigungsverbot.Rows.Count > 0 Then

            createSumFunciton(dtEbfertigungsverbot)

            cProgramFunctions.genExcelFromDT_NEW(dtEbfertigungsverbot, {"I1:I" & (dtEbfertigungsverbot.Rows.Count + 1), "J1:J" & (dtEbfertigungsverbot.Rows.Count + 1), "K1:K" & (dtEbfertigungsverbot.Rows.Count + 1)},, "RECHNUNGEN VOM " & rechnungsdatum.ToShortDateString & " MIT ABFERTIGUNGSVERBOT",,, True)

        Else
            MsgBox("Keine Daten für Abfertigungsverbot")

        End If

    End Sub

    Private Sub REJournalExcel(Sachbearbeiter, rechnungsdatum, kdnr)

        Dim dtRechnungsjournal As DataTable = (New SQL).loadDgvBySql("SELECT      count(distinct(Rechnungsausgang.RechnungsKundenNr)) as Anzahl,
                                                                                  Rechnungsausgang.Währungscode, 
                                                                                  Rechnungsausgang.RechnungsLandKz, 
                                                                                  Rechnungsausgang.RechnungsNr, 
                                                                                  Rechnungsausgang.RechnungsDatum, 
                                                                                  MIN(Rechnungsausgang.KundenNrZentrale) AS KundenNrZentrale, 
                                                                                  MIN(Rechnungsausgang.RechnungsKundenNr) AS RechnungsKundenNr, 
                                                                                  MIN(Rechnungsausgang.[RechnungsName 1]) AS [RechnungsName 1], 
                                                                                  MAX(Rechnungsausgang.Abfertigungsdatum) AS Abfertigungsdatum, 
                                                                                  SUM(RechnungsausgangPositionen.SteuerpflichtigerBetrag) AS SteuerpflichtigerGesamtbetrag, 
                                                                                  SUM(RechnungsausgangPositionen.SteuerfreierBetrag) AS SteuerfreierGesamtbetrag, 
                                                                                  MIN(Rechnungsausgang.[Steuersatz %]) AS [Steuersatz %], 
                                                                                  Rechnungsausgang.Status, 
                                                                                  Rechnungsausgang.DruckDatumZeit, 
                                                                                  Rechnungsausgang.Sachbearbeiter
                                                                              FROM 
                                                                                  Rechnungsausgang
                                                                              INNER JOIN 
                                                                                  Filialen ON Rechnungsausgang.FilialenNr = Filialen.FilialenNr
                                                                              INNER JOIN 
                                                                                  RechnungsausgangPositionen ON Rechnungsausgang.RK_ID = RechnungsausgangPositionen.RK_ID
                                                                              WHERE
                                                                              	[Status] in (2,4) AND [Sammelrechnung] = 6 AND UPPER([Sachbearbeiter]) = '" & Sachbearbeiter & "' AND ([SteuerpflichtigerGesamtbetrag] <> 0 OR [SteuerfreierGesamtbetrag] <> 0) AND cast(Abfertigungsdatum as Date) = '" & rechnungsdatum & "'  and RechnungsNr is not null " & IIf(kdnr > 0, " AND Rechnungsausgang.RechnungsKundenNr = " & kdnr, "") & "
                                                                              GROUP BY 
                                                                                  Rechnungsausgang.Buchungsjahr, 
                                                                                  Rechnungsausgang.Währungscode, 
                                                                                  Rechnungsausgang.RechnungsLandKz, 
                                                                                  Rechnungsausgang.RechnungsNr, 
                                                                                  Rechnungsausgang.RechnungsDatum, 
                                                                                  Rechnungsausgang.Status, 
                                                                                  Rechnungsausgang.DruckDatumZeit, 
                                                                                  Rechnungsausgang.Sachbearbeiter
                                                                              ORDER BY 
                                                                                  Rechnungsausgang.Buchungsjahr, 
                                                                                  Rechnungsausgang.Währungscode, 
                                                                                  Rechnungsausgang.RechnungsLandKz,                                                                                    
                                                                                  Rechnungsausgang.RechnungsNr", "FMZOLL")

        If dtRechnungsjournal.Rows.Count > 0 Then
            createSumFunciton(dtRechnungsjournal)

            cProgramFunctions.genExcelFromDT_NEW(dtRechnungsjournal, {"J1:J" & (dtRechnungsjournal.Rows.Count + 1), "k1:K" & (dtRechnungsjournal.Rows.Count + 1), "L1:L" & (dtRechnungsjournal.Rows.Count + 1)},, "RECHNUNGSJOURNAL VOM " & rechnungsdatum.ToShortDateString,,, True)

        Else
            MsgBox("Keine Daten für Rechnungsjournal")

        End If


    End Sub

    Private Sub REJournaByCountrylExcel(Sachbearbeiter, rechnungsdatum, kdnr)

        Dim dtLaender As DataTable = (New SQL).loadDgvBySql("SELECT               count(distinct(Rechnungsausgang.RechnungsKundenNr)) as Anzahl, 
                                                                                  Rechnungsausgang.Buchungsjahr, 
																				  Rechnungsausgang.Währungscode, 
                                                                                  Rechnungsausgang.RechnungsLandKz, 
                                                                                  SUM(RechnungsausgangPositionen.SteuerpflichtigerBetrag) AS SteuerpflichtigerGesamtbetrag, 
                                                                                  SUM(RechnungsausgangPositionen.SteuerfreierBetrag) AS SteuerfreierGesamtbetrag
                                                                              FROM 
                                                                                  Rechnungsausgang
                                                                              INNER JOIN 
                                                                                  Filialen ON Rechnungsausgang.FilialenNr = Filialen.FilialenNr
                                                                              INNER JOIN 
                                                                                  RechnungsausgangPositionen ON Rechnungsausgang.RK_ID = RechnungsausgangPositionen.RK_ID
                                                                              WHERE
                                                                              	[Status] in (2,4) AND [Sammelrechnung] = 6 AND UPPER([Sachbearbeiter]) = '" & Sachbearbeiter & "' AND ([SteuerpflichtigerGesamtbetrag] <> 0 OR [SteuerfreierGesamtbetrag] <> 0) AND cast(Abfertigungsdatum as Date) = '" & rechnungsdatum & "'  and RechnungsNr is not null " & IIf(kdnr > 0, " AND Rechnungsausgang.RechnungsKundenNr = " & kdnr, "") & "
                                                                              GROUP BY 
                                                                                  Rechnungsausgang.Buchungsjahr, 
                                                                                  Rechnungsausgang.Währungscode, 
                                                                                  Rechnungsausgang.RechnungsLandKz 
                                                                             
                                                                              ORDER BY 
                                                                                  Rechnungsausgang.Buchungsjahr, 
                                                                                  Rechnungsausgang.Währungscode, 
                                                                                  Rechnungsausgang.RechnungsLandKz     ", "FMZOLL")

        If dtLaender.Rows.Count > 0 Then
            createSumFunciton(dtLaender)

            cProgramFunctions.genExcelFromDT_NEW(dtLaender, {"DI1:D" & (dtLaender.Rows.Count + 1), "E1:E" & (dtLaender.Rows.Count + 1)},, "RECHNUNGSJOURNAL LÄNDER VOM " & rechnungsdatum.ToShortDateString,,, True)

        Else
            MsgBox("Keine Daten für Rechnungsjournal")

        End If


    End Sub

    Private Sub createSumFunciton(dt As DataTable)


        Dim SteuerpflichtigerBetrag As Double = 0
        Dim SteuerfreierBetrag As Double = 0
        Dim Anzahl As Integer = 0
        For Each row In dt.Rows
            If Not IsDBNull(row("SteuerpflichtigerGesamtbetrag")) AndAlso IsNumeric(row("SteuerpflichtigerGesamtbetrag")) Then SteuerpflichtigerBetrag += CDbl(row("SteuerpflichtigerGesamtbetrag"))
            If Not IsDBNull(row("SteuerfreierGesamtbetrag")) AndAlso IsNumeric(row("SteuerfreierGesamtbetrag")) Then SteuerfreierBetrag += CDbl(row("SteuerfreierGesamtbetrag"))
            If dt.Columns.Contains("Anzahl") AndAlso Not IsDBNull(row("Anzahl")) AndAlso IsNumeric(row("Anzahl")) Then Anzahl += CInt(row("Anzahl"))
        Next


        Dim drLast = dt.NewRow
        If dt.Columns.Contains("Anzahl") Then drLast.Item("Anzahl") = Anzahl
        If dt.Columns.Contains("Währungscode") Then drLast.Item("Währungscode") = DBNull.Value
        If dt.Columns.Contains("RechnungsLandKz") Then drLast.Item("RechnungsLandKz") = DBNull.Value
        If dt.Columns.Contains("RechnungsNr") Then drLast.Item("RechnungsNr") = DBNull.Value
        If dt.Columns.Contains("RechnungsDatum") Then drLast.Item("RechnungsDatum") = DBNull.Value
        If dt.Columns.Contains("KundenNrZentrale") Then drLast.Item("KundenNrZentrale") = DBNull.Value
        If dt.Columns.Contains("RechnungsKundenNr") Then drLast.Item("RechnungsKundenNr") = DBNull.Value
        If dt.Columns.Contains("RechnungsName 1") Then drLast.Item("RechnungsName 1") = DBNull.Value
        If dt.Columns.Contains("Abfertigungsdatum") Then drLast.Item("Abfertigungsdatum") = DBNull.Value
        If dt.Columns.Contains("Steuersatz %") Then drLast.Item("Steuersatz %") = DBNull.Value
        If dt.Columns.Contains("Status") Then drLast.Item("Status") = DBNull.Value
        If dt.Columns.Contains("DruckDatumZeit") Then drLast.Item("DruckDatumZeit") = DBNull.Value
        If dt.Columns.Contains("Sachbearbeiter") Then drLast.Item("Sachbearbeiter") = DBNull.Value
        If dt.Columns.Contains("SteuerpflichtigerGesamtbetrag") Then drLast.Item("SteuerpflichtigerGesamtbetrag") = SteuerpflichtigerBetrag
        If dt.Columns.Contains("SteuerfreierGesamtbetrag") Then drLast.Item("SteuerfreierGesamtbetrag") = SteuerfreierBetrag

        dt.Rows.InsertAt(drLast, dt.Rows.Count)


    End Sub

    Private Sub Button4_Click(sender As Object, e As EventArgs) Handles btnLieferantenrechnungen.Click

        Dim frm As New frmMDMLieferantenrechnungen
        frm.Show(Me)

    End Sub


    Shared Function CheckValue(myTable As DataTable, checkFunc As Func(Of DataRow, Boolean)) As Boolean
        For Each row As DataRow In myTable.Rows
            If checkFunc(row) Then Return True
        Next
        Return False
    End Function

    Private Sub btnWikiStatusmails_Click(sender As Object, e As EventArgs) Handles btnWikiStatusmails.Click
        Dim webAddress As String = "https://wiki.verag.ag/software/sdl/sammelrechnung"
        Process.Start(webAddress)
    End Sub

    Private Sub btnRE_Text_Click(sender As Object, e As EventArgs) Handles btnRE_Text.Click

        Dim Sachbearbeiter = cboSachbearbeiter._value
        Dim rechnungsdatum As Date = CDate(dtRechnungsdatum.Text)
        Dim dtSammelrechnungen As New DataTable

        Dim setText As Boolean = False

        Dim res As MsgBoxResult
        res = MsgBox("Möchten Sie den Rechnungstext für bereits gedruckte Rechnungen setzen (WENN TEXT = NULL)?" & vbNewLine & "JA -> nur bei Text = NULL und STATUS = 4" & vbNewLine & "NEIN -> Text bei STATUS = 0" & vbNewLine & "ABBRUCH ->NICHTS MACHEN", vbYesNoCancel)
        Select Case res
            Case MsgBoxResult.Yes : setText = True
            Case MsgBoxResult.No : setText = False
            Case MsgBoxResult.Cancel : Exit Sub
        End Select

        showPic(setRechnungstext(Sachbearbeiter, rechnungsdatum, dtSammelrechnungen, setText), PictureBox3)
    End Sub
End Class
