Imports System.IO 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\" 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 MsgBox("Mautbericht-Pfad " & PathMautberichte & " nicht verfügbar!") End If lblAnzahlMautberichte.Text = countCSV + countPDF & "x Mautberichte (" & countCSV & "x CSV " & countPDF & "x PDF )" If VERAG_PROG_ALLGEMEIN.cBerechtignunen.CHECK_BERECHTIGUNG("MDM_FAKTURIERUNG", "SDL") = 0 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 = False End If If VERAG_PROG_ALLGEMEIN.cBerechtignunen.CHECK_BERECHTIGUNG_bool("ADMINFUNCTIONS", "SDL") Then Button2.Visible = True Button3.Visible = True End If End Sub Private Sub Button20_Click(sender As Object, e As EventArgs) Handles Button20.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 Button14.Click Label70.Text = "6. 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 PictureBox6.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") ok = SQL.doSQL("update [Rechnungsausgang] set Sachbearbeiter='" & Sachbearbeiter & "' where Firma_ID = 19 And Sammelrechnung = 6 And Abfertigungsdatum > DateAdd(Month, -3, 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 autoamtisch auf " & rechnungsdatum & " gesetzt) ?", 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 : Exit Sub End Select 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 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 rechnungenMitGesamtmautanhantPDF 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 rechnungenMitGesamtmautanhantPDF <> "" Then MsgBox("Bei " & rechnungenMitGesamtmautanhantPDF & " 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 rechnungenMitGesamtmautanhantCSV <> "" Then MsgBox("Bei " & rechnungenMitGesamtmautanhantCSV & " 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") '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!!!) 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) ' Porto/Papiere berechnen. showPic(PortoPapiere(Sachbearbeiter, rechnungsdatum), PictureBox4) 'Berechnet Banküberweisung/Bankspesen. showPic(Bankspesen(Sachbearbeiter, rechnungsdatum), PictureBox5) 'Gesamtmautberichte an Sammelrechnung anhängen Dim okMaut As Boolean = False okMaut = setMautgesamtberichtInRechnung(Sachbearbeiter, rechnungsdatum, dtSammelrechnungen) showPic(okMaut, PictureBox6) 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 Rechnungsausgang.UPPER(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 RECHNUNG.SteuerpflichtigerGesamtbetrag = stgesBetr 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) 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 [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 RECHNUNG.SteuerpflichtigerGesamtbetrag = steuerpflichtigerGesamtbetrag 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 NEWPOS.LeistungsBez = "Überweisungs/Bankspesen" Dim preis As Double = 0 If rowBS("Bankspesen %") > 0 Then If sumCurrenRow > 0 Then preis = Math.Round(sumCurrenRow * rowBS("Bankspesen %") + 0.5, 2) Else preis = Math.Round(0 - sumCurrenRow * rowBS("Bankspesen %") + 0.5, 2) 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() Dim RECHNUNG As New cRechnungsausgang(RK_ID) attachmentIsSet = AddAttachementToRE(FileCSV.FullName, KundenNr, RECHNUNG, rechnungsdatum) If attachmentIsSet Then counterCSV = counterCSV + 1 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() 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 Next End If Label70.Text = "6. 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 = "6. 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 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) 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, , ,,, ,, ) 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 Button19.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 If Not vbYes = MsgBox("Möchten Sie die Rechnungsnummern setzen?" & vbNewLine & "Es wird eine Rechnungsnummer vergeben, die Rechnungen gelten somit als gedruckt und können nicht mehr bearbeitet werden.", vbYesNoCancel) Then Exit Sub Dim listPDFs As New List(Of String) Dim SQLString = "SELECT [Firma_ID], RechnungsNr,Buchungsjahr,DruckDatumZeit,[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 [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]" Dim dtSammelrechnungen As DataTable = (New SQL).loadDgvBySql(SQLString, "FMZOLL") If dtSammelrechnungen.Rows.Count > 0 Then Dim reNrisSet = setStatus2(Sachbearbeiter, rechnungsdatum, dtSammelrechnungen) showPic(reNrisSet, PictureBox7) If Not reNrisSet Then MsgBox("Fehler beim Setzen der Rechnungsnummer" & vbNewLine & "Vorgang 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 -> OROGINAL-RE cFakturierung.doSAMMELRechnungsDruck_Abschnitt(rowRE("RechnungsNr"), rowRE("Firma_ID"), rowRE("Buchungsjahr"), rowRE("DruckDatumZeit"), "", True, True, 7, path,, , , , , , ,,, cbxMautanh.Checked, False) Else 'MWST Kunde -> wenn ohne MWST-BEtrag ->Original sonst Kopie! 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 cFakturierung.doSAMMELRechnungsDruck_Abschnitt(rowRE("RechnungsNr"), rowRE("Firma_ID"), rowRE("Buchungsjahr"), rowRE("DruckDatumZeit"), "", True, True, 7, path,, , , , , , ,,, cbxMautanh.Checked, False) Else 'MWST Kunde -> wenn ohne MWST-BEtrag ->Original sonst Kopie! 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 'todo nach test auskommentieren!!! 'If cnt > 3 Then Exit For 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, PictureBox8) Else showPic(True, PictureBox8) Process.Start(pathPDFMerge) End If Else showPic(True, PictureBox8) 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) If cbxAbfVerbotdrucken.Checked Then AbfVerbotExcel(Sachbearbeiter, rechnungsdatum, -1) Else showPic(False, PictureBox8) 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 With MyDatagridview1 .Columns.Clear() .SET_SQL("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") .LOAD() 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.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 Button1.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)) Button14.Enabled = sammelrechnung0vorhanden 'Button19.Enabled = sammelrechnung0vorhanden wenn RE bereits Status 2 wird sie nur gedruckt!!!! Button20.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(*) 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)) 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!!!! Button14.Enabled = True 'sammelrechnung0vorhanden Button20.Enabled = sammelrechnung0vorhanden End Sub Private Sub Button2_Click_1(sender As Object, e As EventArgs) Handles Button2.Click, Button3.Click, btnREJdruck.Click, btnAbfdruck.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) Case "btnAbfdruck" AbfVerbotExcel(Sachbearbeiter, rechnungsdatum, kdNr) 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] = 2 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 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 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] = 2 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 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 Button4_Click(sender As Object, e As EventArgs) Handles btnLieferantenrechnungen.Click If VERAG_PROG_ALLGEMEIN.cBerechtignunen.CHECK_BERECHTIGUNG("MDM_Fakturierung", "SDL") = 0 Then Dim frm As New frmMDMLieferantenrechnungen frm.Show(Me) End If 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 End Class