Imports System.Windows.Forms

Public Class cMeineFunktionenAVISO
    'Diese Klasse beinhaltet alle meine Funktionen, die in allen Projekten verwendet werden können
    Public Shared Function grayoutForm() As Form
        Dim f As New frmGrayOut
        f.Show()
        Return f
    End Function

    Public Const LeerDatum As Date = #12/30/1899#   'wird als leerer Datumswert verwendet, da sonst Probleme bei Null/Date

    Public Shared Function SQLDatum(dat As Date) As String
        'Datum für SQLAbfrage umwandeln (31.01.1998 --> #1/31/1998#)
        SQLDatum = ""
        If Not IsDate(dat) Then Exit Function
        SQLDatum = "'" & DateAndTime.Day(dat) & "." & DateAndTime.Month(dat) & "." & DateAndTime.Year(dat) & " 00:00:00'"
        'SQLDatum = dat.ToString
    End Function

    Public Shared Function SQLDatumZeit(dat As Date) As String
        'Datum inklusive Zeit für SQLAbfrage umwandeln (31.01.1998 10:15 Uhr --> #1/31/1998 10:15:00#)
        SQLDatumZeit = ""

        If Not IsDate(dat) Then Exit Function
        SQLDatumZeit = "'" & DateAndTime.Day(dat) & "." & DateAndTime.Month(dat) & "." & DateAndTime.Year(dat) & " " &
                  DateAndTime.Hour(dat) & ":" & DateAndTime.Minute(dat) & "'"
    End Function

    Public Shared Function SQLDatumZeitSekunden(dat As Date) As String
        'Datum inklusive Zeit für SQLAbfrage umwandeln (31.01.1998 10:15 Uhr --> #1/31/1998 10:15:00#)
        SQLDatumZeitSekunden = ""
        If Not IsDate(dat) Then Exit Function
        SQLDatumZeitSekunden = "'" & DateAndTime.Day(dat) & "." & DateAndTime.Month(dat) & "." & DateAndTime.Year(dat) & " " &
                  DateAndTime.Hour(dat) & ":" & DateAndTime.Minute(dat) & ":" & DateAndTime.Second(dat) & "'"
    End Function

    Public Shared Function SQLNullDate(d As Date) As Object
        'Wenn Datum 00.00.0000, dann wird dbnull zurückgegeben
        If d = New Date Then : SQLNullDate = DBNull.Value
        Else : SQLNullDate = d : End If
    End Function

    Public Shared Function GetProgrammIcon() As Drawing.Icon
        Return My.Resources.Aviso
    End Function

    Public Shared Function VarToInt(ByVal wert As Object) As Integer
        Try
            If wert Is Nothing OrElse wert Is DBNull.Value Then
                Return 0
            Else
                Return CInt(wert)
            End If
        Catch generatedExceptionName As Exception
            Return 0
        End Try
    End Function

    Public Shared Function VarToInt2(ByVal wert As Object) As Integer
        Try
            If wert Is Nothing OrElse wert Is DBNull.Value OrElse Not IsNumeric(wert) Then
                Return -1
            Else
                Return CInt(wert)
            End If
        Catch generatedExceptionName As Exception
            Return -1
        End Try
    End Function

    Public Shared Function VarToLng(ByVal wert As Object) As Long
        Try
            If wert Is Nothing OrElse wert Is DBNull.Value Then
                Return 0
            Else
                Return CLng(wert)
            End If
        Catch generatedExceptionName As Exception
            Return 0
        End Try
    End Function

    Public Shared Function VarToDbl(ByVal wert As Object) As Double
        Try
            If wert Is Nothing OrElse wert Is DBNull.Value Then
                Return 0
            Else
                Return CDbl(wert)
            End If
        Catch generatedExceptionName As Exception
            Return 0
        End Try
    End Function

    Public Shared Function checkNullReturnValue(ByVal o As Object, ByVal returnValue As Object) As Object
        If o IsNot Nothing And o IsNot DBNull.Value Then Return (o)
        Return returnValue
    End Function

    Public Shared Function VarToBool(ByVal wert As Object) As Boolean
        Try
            If wert Is Nothing OrElse wert Is DBNull.Value Then
                Return False
            Else
                Return CBool(wert)
            End If
        Catch generatedExceptionName As Exception
            Return False
        End Try
    End Function

    Public Shared Function VarToStr(ByVal wert As Object) As String
        Try
            If wert Is Nothing OrElse wert Is DBNull.Value Then
                Return ""
            Else
                Return Trim(DirectCast(wert, String))
            End If
        Catch generatedExceptionName As Exception
            Return ""
        End Try
    End Function

    Public Shared Function VarToDate(ByVal wert As Object) As Nullable(Of DateTime)
        Try
            If wert Is Nothing OrElse wert Is DBNull.Value Then
                Return LeerDatum  'Nothing
            Else
                Return DirectCast(wert, DateTime)
            End If
        Catch generatedExceptionName As Exception
            Return Nothing
        End Try
    End Function

    Public Shared Function IstGleich(i As Integer, ParamArray list As Integer()) As Boolean
        'prüft, ob ein Wert in einer Liste enthalten ist - z.B. i = 5 or 7 or 11 or 29
        For x As Integer = 0 To list.Length - 1
            If list(x) = i Then
                Return True
            End If
            On Error Resume Next
        Next
        Return False
    End Function

    Public Shared Function Minuten_auf_Text(hMinuten As Long) As String

        If hMinuten <= 0 Then Return ""

        Dim hStunden As Long
        Dim hMinus As Boolean
        Dim hMin As Long

        Minuten_auf_Text = ""
        hMin = hMinuten

        If hMin = 0 Then
            Minuten_auf_Text = "0:00"
            Exit Function
        End If

        If hMin < 0 Then
            hMinus = True
            hMin = hMin * -1
        End If

        hStunden = CLng(Fix(hMin / 60))
        hMin = hMin - (hStunden * 60)
        If hMinus Then Minuten_auf_Text = "-" 'Minus wird nur bei Stunden angezeigt
        Minuten_auf_Text = Minuten_auf_Text & hStunden & ":" & Format(hMin, "00")
    End Function

    Public Shared Function ZeitInMinuten(hDat As Date) As Long
        ZeitInMinuten = 0
        If Not IsDate(hDat) Then Exit Function
        ZeitInMinuten = Hour(hDat) * 60 + Minute(hDat)
    End Function

    Public Shared Function GetNewMaxPosNr(ByVal FilialeNr As Integer, Optional Year As Integer = -1) As Integer
        Return VERAG_PROG_ALLGEMEIN.cAllgemein.getMaxPosNrIncrement(FilialeNr, CInt(IIf(Year > 0, Year, Now.Year)))
    End Function

    Public Shared Function LKWFertig(AvisoID, Optional newLKWOK = Nothing) As Boolean

        Dim AvisoDAL As New VERAG_PROG_ALLGEMEIN.cAvisoDAL
        Dim VermerkeDAL As New VERAG_PROG_ALLGEMEIN.cVermerkeDAL
        If VERAG_PROG_ALLGEMEIN.cBerechtignunen.CHECK_BERECHTIGUNG_bool("VERIMEX", "AVISO") Then
            MsgBox("Keine Berechtigung!")
            Return False
        End If

        'falls keine Auswahl bzw. kein Datensatz, dann nichts machen
        If AvisoID <= 0 Then
            MsgBox("Kein Aviso ausgewählt!")
            Return False
        End If

        'jetzt ausgewählten Datensatz einlesen
        Dim Aviso As New cAviso
        Aviso = AvisoDAL.LesenAviso(AvisoID, "")
        If Aviso Is Nothing Then Return False
        If Aviso.Abgeschlossen Then MsgBox("Der Akt wurde bereichts abgeschlossen.", vbInformation) : Return False

        If newLKWOK Is Nothing Then
            newLKWOK = Not Aviso.LKW_fertig
        Else
            If newLKWOK = Aviso.LKW_fertig Then Return True 'Wenn schon OK ist
        End If


        Dim msg As String
        Dim antwort As MsgBoxResult


        'Taste LKW ist fertig
        If Aviso.Status <> VERAG_PROG_ALLGEMEIN.cGlobal.Status_Ankunft Then
            MsgBox("Es kann nur ein LKW mit Status ANKUNFT auf 'FERTIG/nicht FERTIG' gesetzt werden.", vbInformation)
            Return False
        End If
        Dim aendArt As String = ""
        Dim aendText As String = ""

        'Status ist Ankunft - LKW wird je nach Eintrag auf Fertig/nicht fertig gesetzt
        Aviso.letzterMitarbeiter = VERAG_PROG_ALLGEMEIN.cGlobal.AktiverMitarbeiter.Mitarbeiter
        Aviso.TeamId = VERAG_PROG_ALLGEMEIN.cAllgemein.MITARBEITER.mit_teamId
        Dim hVermerk As New cVermerk   'bei Fertig zusätzlich einen Vermerk setzen
        hVermerk.AvisoID = Aviso.AvisoID
        hVermerk.Datum = Now
        hVermerk.Mitarbeiter = VERAG_PROG_ALLGEMEIN.cGlobal.AktiverMitarbeiter.Mitarbeiter
        hVermerk.MitarbeiterId = VERAG_PROG_ALLGEMEIN.cGlobal.AktiverMitarbeiter.MitarbeiterID

        If newLKWOK Then
            Aviso.LKW_fertig = True
            Aviso.Änderungen = "LKW ist fertig - gesetzt von " & VERAG_PROG_ALLGEMEIN.cGlobal.AktiverMitarbeiter.Mitarbeiter & " am " & Format(Now, "dd.MM.yyyy HH:mm") & vbCrLf & Trim(VarToStr(Aviso.Änderungen))
            hVermerk.Hinweis_Vermerk = "LKW ist fertig!"
            hVermerk.VermerkCodeId = 26
            VermerkeDAL.SpeichernVermerk(hVermerk)
            aendArt = "LKW ist fertig - gesetzt"
            aendText = "LKW ist fertig - gesetzt von " & VERAG_PROG_ALLGEMEIN.cGlobal.AktiverMitarbeiter.Mitarbeiter & " am " & Format(Now, "dd.MM.yyyy HH:mm")
        Else
            Aviso.LKW_fertig = False
            Aviso.Änderungen = "LKW ist nicht fertig - gesetzt von " & VERAG_PROG_ALLGEMEIN.cGlobal.AktiverMitarbeiter.Mitarbeiter & " am " & Format(Now, "dd.MM.yyyy HH:mm") & vbCrLf & Trim(VarToStr(Aviso.Änderungen))
            hVermerk.Hinweis_Vermerk = "LKW ist nicht fertig."
            hVermerk.VermerkCodeId = 27
            VermerkeDAL.SpeichernVermerk(hVermerk)
            aendArt = "LKW ist nicht fertig - gesetzt"
            aendText = "LKW ist nicht fertig - gesetzt von " & VERAG_PROG_ALLGEMEIN.cGlobal.AktiverMitarbeiter.Mitarbeiter & " am " & Format(Now, "dd.MM.yyyy HH:mm")
        End If
        Dim tmpid = AvisoDAL.SpeichernAviso(Aviso)
        AvisoDAL.addAenderung(tmpid, aendArt, aendText)

        Return (tmpid > 0)
    End Function


End Class
