Imports Parkzeit.cMeineFunktionen
Imports System.Data.OleDb
Imports System.Data.SqlClient

Public Class frmAuswahl_Abrechnung

    Private Sub frmAuswahl_Abrechnung_KeyDown(sender As Object, e As System.Windows.Forms.KeyEventArgs) Handles Me.KeyDown
        'Escape händisch abfangen und auf Abbruch-Taste legen
        If e.KeyCode = Keys.Escape Then
            btnAbbruch.PerformClick()
        End If
    End Sub

    Private Sub frmAuswahl_Abrechnung_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load
        Me.CenterToParent()
        cboTarif.fillWithSQL("SELECT distinct([TarifArt]) ,TarifArt FROM [Parkzeiten]", False, "PARKZEIT")
        cboTarif.changeItem("WABERERS")

        'Vorschlagswerte setzen
        dtpVon.Value = DateSerial(Now.Date.AddMonths(-1).Year, Now.Date.AddMonths(-1).Month, 1)
        dtpBis.Value = dtpVon.Value.AddMonths(1).AddDays(-1)

        txtKosten.Text = Format(frmMain.Optionen.Kosten_je_Stunde, "#0.00")

        optAlle.Checked = True
    End Sub

    Private Sub btnAbbruch_Click(sender As System.Object, e As System.EventArgs) Handles btnAbbruch.Click
        'Fenster schließen
        Me.Close()
    End Sub

    Private Sub txtFeld_GotFocus(sender As Object, e As System.EventArgs) Handles txtKosten.GotFocus
        'txtBilanzart.SelectAll()
        CType(sender, TextBox).SelectAll()
    End Sub

    'Private Sub txtKosten_KeyPress(sender As Object, e As System.Windows.Forms.KeyPressEventArgs) Handles txtKosten.KeyPress
    '  'Es sind nur Zahleneingaben erlaubt
    '  Dim asc As Integer = Convert.ToInt32(e.KeyChar)
    '  Select Case asc
    '    'Folgende Tasten sind erlaubt
    '    '8 = Rücktaste (Back)
    '    '13 = Enter
    '    '27 = Esc
    '    '48 To 57 = 0 bis 9
    '    Case 8, 13, 27, 48 To 57
    '    Case Else
    '      e.Handled = True
    '  End Select
    'End Sub

    Private Sub btnDruck_Click(sender As System.Object, e As System.EventArgs) Handles btnDruck.Click, btnCheck.Click
        Dim hSummeZeit As Integer
        Dim hAnzahl As Integer
        Dim hKosten As Double

        'Logische Prüfungen vor dem Drucken
        If dtpBis.Value < dtpVon.Value Then
            MsgBox("Bis-Datum muß größer/gleich dem Von-Datum sein.", vbInformation)
            dtpBis.Focus()
            Exit Sub
        End If

        If VarToDbl(txtKosten.Text) = 0 Then
            MsgBox("Bitte einen gültigen Kostensatz eingeben.", vbInformation)
            txtKosten.Focus()
            Exit Sub
        End If

        'Zusammenbau der SQL-Abfrage
        Dim hSQL As String = "SELECT * FROM Parkzeiten WHERE Von >= " & SQLDatum(dtpVon.Value) & " AND Von <= " & SQLDatum(dtpBis.Value.AddDays(1))

        Dim hauswahl As String = "Auswahl: "


        If optUngarn.Checked Then
            hSQL += " AND (((Left(CAST(Kennzeichen AS varchar),1))>='A' And (Left(CAST(Kennzeichen AS varchar),1))<='Z') AND ((right(left(CAST(Kennzeichen AS varchar),2),1))>='A' And (right(left(CAST(Kennzeichen AS varchar),2),1))<='Z') " &
              "AND ((right(left(CAST(Kennzeichen AS varchar),3),1))>='A' And (right(left(CAST(Kennzeichen AS varchar),3),1))<='Z'))"
            'hSQL += " AND Left(CAST(Kennzeichen AS varchar),1)>='A' "
            hauswahl += "ungarische LKWs"
        ElseIf optRumänien.Checked Then
            hSQL += " AND (((Parkzeiten.Von)>=" & SQLDatum(dtpVon.Value) & " And (Parkzeiten.Von)<=" & SQLDatum(dtpBis.Value) &
                    ") AND ((Left(CAST(Kennzeichen AS varchar),1))>='A' And (Left(CAST(Kennzeichen AS varchar),1))<='Z') AND ((right(left(CAST(Kennzeichen AS varchar),2),1))>='0' And " &
                    "(right(left(CAST(Kennzeichen AS varchar),2),1))<='9')) OR (((Parkzeiten.Von)>=" & SQLDatum(dtpVon.Value) & " And (Parkzeiten.Von)<=" &
                    SQLDatum(dtpBis.Value) & ") AND ((Left(CAST(Kennzeichen AS varchar),1))>='0' And (Left(CAST(Kennzeichen AS varchar),1))<='9') AND " &
                    "((right(left(CAST(Kennzeichen AS varchar),2),1))>='A' And (right(left(CAST(Kennzeichen AS varchar),2),1))<='Z')) OR (((Parkzeiten.Von)>=" & SQLDatum(dtpVon.Value) &
                    " And (Parkzeiten.Von)<=" & SQLDatum(dtpBis.Value) & ") AND ((Left(CAST(Kennzeichen AS varchar),1))>='A' And (Left(CAST(Kennzeichen AS varchar),1))<='Z') " &
                    "AND ((right(left(CAST(Kennzeichen AS varchar),3),1))>='0' And (right(left(CAST(Kennzeichen AS varchar),3),1))<='9') AND ((right(left(CAST(Kennzeichen AS varchar),2),1))>='A' And " &
                    "(right(left(CAST(Kennzeichen AS varchar),2),1))<='Z')) OR (((Parkzeiten.Von)>=" & SQLDatum(dtpVon.Value) & " And (Parkzeiten.Von)<=" &
                    SQLDatum(dtpBis.Value) & ") AND ((Left(CAST(Kennzeichen AS varchar),1))>='0' And (Left(CAST(Kennzeichen AS varchar),1))<='9') AND " &
                    "((right(left(CAST(Kennzeichen AS varchar),3),1))>='A' And (right(left(CAST(Kennzeichen AS varchar),3),1))<='Z') AND ((right(left(CAST(Kennzeichen AS varchar),2),1))>='A' And " &
                    "(right(left(CAST(Kennzeichen AS varchar),2),1))<='Z'))"
            hauswahl += "rumänische LKWs"
        ElseIf optSonstige.Checked Then
            hSQL += " AND (((Left(CAST(Kennzeichen AS varchar),1))>='0' And (Left(CAST(Kennzeichen AS varchar),1))<='9') AND ((right(left(CAST(Kennzeichen AS varchar),2),1))>='0' And (right(left(CAST(Kennzeichen AS varchar),2),1))<='9'))"
            hauswahl += "sonstige LKWs"
        Else
            If txtKundenNr.Text <> "" Then
                hauswahl += "Kunde: " & txtKundenNr.Text
            Else

                hauswahl += "alle"
            End If

        End If


        hSQL += "  AND TarifArt='" & cboTarif._value & "' "
        If txtKundenNr.Text <> "" Then hSQL += "  AND KundenNr='" & txtKundenNr.Text & "' "
        If txtKennzeichen.Text <> "" Then hSQL += "  AND Kennzeichen='" & txtKennzeichen.Text & "' "
        hSQL += "  AND TarifArt='" & cboTarif._value & "' "
        hSQL += " ORDER BY Laufende_Nr"


        hSummeZeit = 0
        hAnzahl = 0
        Using conn As SqlConnection = cDatenbank.GetNewOpenConnection()
            Using cmd As New SqlCommand(hSQL, conn)
                Dim dr = cmd.ExecuteReader() 'AL: ERR
                If Not IsNothing(dr) Then
                    While dr.Read()
                        hSummeZeit += VarToInt(dr.Item("Dauer_Minuten"))
                        hAnzahl += 1
                    End While
                End If
            End Using
        End Using

        'If hSummeZeit Mod 60 = 0 Then
        'hSummeZeit = CInt(Fix(hSummeZeit / 60)) 'umgerechnet auf Stunden
        'Else
        'hSummeZeit = CInt(Fix(hSummeZeit / 60) + 1) 'umgerechnet auf Stunden + Aufrundung auf nächste volle Stunde
        'End If

        hKosten = hSummeZeit / 60 * VarToDbl(txtKosten.Text.Trim)


        Dim hGesamtdauer As String = Minuten_auf_Text(hSummeZeit)
        Dim hGesamtkosten As String = Format(hKosten, "€ #,##0.00")

        'Check gedrückt -> es wird nur eine Messagebox angezeigt
        If sender Is btnCheck Then


            MsgBox("Für diesen Zeitraum fallen folgende Werte an: " & vbCrLf & vbCrLf &
                   "Anzahl LKWs: " & hAnzahl & vbCrLf &
                   "Summe Stunden: " & hGesamtdauer & vbCrLf &
                   "Kosten: " & hGesamtkosten)

            Exit Sub
        End If

        hauswahl += "; " & Format(dtpVon.Value, "dd.MM.yyyy") & " bis " &
                                 Format(dtpBis.Value, "dd.MM.yyyy") & " / Kosten je Stunde: € " & Format(VarToDbl(txtKosten.Text), "#0.00")

        Dim Auswertung As New frmDruckansicht
        Dim Parkzeiten = New cParkzeitenDAL
        Select Case cboTarif._value
            Case "WABERERS"
                Auswertung.BefüllenAbrechnung("Auswertung Parkzeiten Waberer's LKWs", Parkzeiten.LeseParkzeitenFürDruck(hSQL, VarToDbl(txtKosten.Text)), cboTarif._value, hauswahl, hGesamtdauer, hGesamtkosten)
            Case "VERAG"
                Auswertung.BefüllenAbrechnung("Auswertung Parkzeiten LKWs", Parkzeiten.LeseParkzeitenFürDruck(hSQL, VarToDbl(txtKosten.Text)), cboTarif._value, hauswahl, hGesamtdauer, hGesamtkosten)
                '  Auswertung.genPDF()
        End Select

        Auswertung.Show()

    End Sub

    Private Sub btnExport_Click(sender As System.Object, e As System.EventArgs) Handles btnExport.Click
        Me.Cursor = Cursors.WaitCursor
        btnAbbruch.Visible = False
        btnCheck.Visible = False

        'Zusammenbau der SQL-Abfrage
        Dim hSQL As String = "SELECT * FROM Parkzeiten WHERE Von >= " & SQLDatum(dtpVon.Value) & " AND Von <= " & SQLDatum(dtpBis.Value.AddDays(1))
        hSQL += "  AND TarifArt='" & cboTarif._value & "' "
        hSQL += " ORDER BY Laufende_Nr"
        Dim hDatei As String = Application.StartupPath & "\Parkzeiten_Abrechnung_per_" & Format(Now, "yyyy_MM_dd_HH_mm") & ".csv"
        Dim hExport As New cParkzeitenDAL
        Dim hanz As Long = hExport.LeseDatenFürExport(hSQL, hDatei)

        MsgBox("Es wurden " & hanz & " Sätze in die Datei '" & hDatei & "' exportiert.", vbInformation, "Export Parkzeiten")

        Me.Cursor = Cursors.Default
        btnAbbruch.Visible = True
        btnCheck.Visible = True
    End Sub
End Class
