Files
SDL/SDL/seriendruck/usrCntlFakturierung.vb

2206 lines
119 KiB
VB.net

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
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")
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 automatisch 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 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
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!!!)
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
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 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
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
'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 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 Exit Sub
Dim reNrisSet = setStatus2(Sachbearbeiter, rechnungsdatum, dtSammelrechnungenGruppiert, cbxStatusAUTOMAIL.Checked)
showPic(reNrisSet, PictureBox8)
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 -> 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
End Class