Imports System.Data.SqlClient

Public Class cKassenbuch
    Property Mandant As String = "VERA"
    Property Niederlassung As String = "SUB"
    Property Benutzer As Integer = -1
    Property Geschäftsjahr As Integer = cRKSV.getGJ_FIRMA(Now, VERAG_PROG_ALLGEMEIN.cAllgemein.FIRMA) ' cRKSV.getGJ(Now) ' IIf(Now.Month = 1, Now.Year - 1, Now.Year)
    Property JournalNr As Integer = -1
    Property Buchungsdatum As Object = Nothing
    Property BelegDat As Object = Nothing
    Property BelegNr As Integer = -1
    Property Belegart As Integer = 1
    Property Buchungstext As String = ""
    Property Betrag As Double = 0.0
    Property Währung As Integer = 900
    Property Kurs As Integer = 1
    Property Eingabeart As Integer = 0
    Property Konto As Integer = -1
    Property Soll As Double = 0.0
    Property Haben As Double = 0.0
    Property Steuer As Integer = 0
    Property Steuerbetrag As Double = 0.0
    Property Referenz As String = ""
    Property Belegverbuchung As Boolean = False
    Property gebucht As Boolean = False
    Property Finanzwege As String = ""
    Property rksv_id As Object = Nothing
    Property rksv_BelegId As Object = Nothing
    Property rksv_aktiv As Boolean = False
    Property durchfuehrender_Benutzer As Integer = -1
    Property Trdin As Boolean = False

    Dim SQL As New SQL

    Public Sub New(Mandant As String, Niederlassung As String, Benutzer As Integer, Geschäftsjahr As Integer, JournalNr As Integer)
        Me.Mandant = Mandant
        Me.Niederlassung = Niederlassung
        Me.Benutzer = Benutzer
        Me.Geschäftsjahr = Geschäftsjahr
        Me.JournalNr = JournalNr
    End Sub

    Public Sub New(op As String, Mandant As String, Niederlassung As String, Benutzer As Integer, Geschäftsjahr As Integer, JournalNr As Integer)
        Select Case op
            Case "LOAD" : LOAD(Mandant, Niederlassung, Benutzer, Geschäftsjahr, JournalNr)
            Case "INSERT"
        End Select
    End Sub

    Public Function SAVE() As Boolean 'obj As Object, tablename As String, where As String) As Boolean
        Dim list As List(Of VERAG_PROG_ALLGEMEIN.MyListItem2) = getParameterList()

        Dim sqlstr = " BEGIN TRAN IF EXISTS(SELECT * FROM [tblKassenbuch] WITH(updlock,serializable) WHERE [Mandant]=@Mandant AND Niederlassung=@Niederlassung AND Benutzer=@Benutzer AND Geschäftsjahr=@Geschäftsjahr AND JournalNr=@JournalNr ) " &
                       " BEGIN " & getUpdateCmd() & " END " &
                       " Else " &
                       " BEGIN " & getInsertCmd() & " END " &
                       " commit tran "
        'MsgBox(sqlstr)
        Return SQL.doSQL(sqlstr, "FMZOLL", , list)
    End Function

    Public Function INSERT() As Boolean 'obj As Object, tablename As String, where As String) As Boolean
        Dim list As List(Of VERAG_PROG_ALLGEMEIN.MyListItem2) = getParameterList()
        '  MsgBox(getInsertCmd())
        Return SQL.doSQL(getInsertCmd(), "FMZOLL", , list)
    End Function

    Public Sub LOAD(Mandant As String, Niederlassung As String, Benutzer As Integer, Geschäftsjahr As Integer, JournalNr As Integer)
        Try
            Using conn As SqlConnection = cSqlDb.GetNewOpenConnectionFMZOLL()
                Using cmd As New SqlCommand("SELECT * FROM tblKassenbuch WHERE  [Mandant]=@Mandant AND Niederlassung=@Niederlassung AND Benutzer=@Benutzer AND Geschäftsjahr=@Geschäftsjahr AND JournalNr=@JournalNr ", conn)
                    cmd.Parameters.AddWithValue("@Mandant", Mandant)
                    cmd.Parameters.AddWithValue("@Niederlassung", Niederlassung)
                    cmd.Parameters.AddWithValue("@Benutzer", Benutzer)
                    cmd.Parameters.AddWithValue("@Geschäftsjahr", Geschäftsjahr)
                    cmd.Parameters.AddWithValue("@JournalNr", JournalNr)

                    Dim dr = cmd.ExecuteReader()
                    If dr.Read Then
                        Me.Mandant = cSqlDb.checkNullStr(dr.Item("Mandant"))
                        Me.Niederlassung = cSqlDb.checkNullStr(dr.Item("Niederlassung"))
                        Me.Benutzer = cSqlDb.checkNullStr(dr.Item("Benutzer"))
                        Me.Geschäftsjahr = cSqlDb.checkNullInteger(dr.Item("Geschäftsjahr"))
                        Me.JournalNr = cSqlDb.checkNullInteger(dr.Item("JournalNr"))

                        Me.Buchungsdatum = cSqlDb.checkNullDate(dr.Item("Buchungsdatum"))
                        Me.BelegDat = cSqlDb.checkNullDate(dr.Item("BelegDat"))
                        Me.BelegNr = cSqlDb.checkNullInteger(dr.Item("BelegNr"))
                        Me.Belegart = cSqlDb.checkNullInteger(dr.Item("Belegart"))
                        Me.Buchungstext = cSqlDb.checkNullStr(dr.Item("Buchungstext"))
                        Me.Betrag = cSqlDb.checkNulDbl(dr.Item("Betrag"))
                        Me.Währung = cSqlDb.checkNullInteger(dr.Item("Währung"))
                        Me.Kurs = cSqlDb.checkNullInteger(dr.Item("Kurs"))
                        Me.Eingabeart = cSqlDb.checkNullInteger(dr.Item("Eingabeart"))
                        Me.Konto = cSqlDb.checkNullInteger(dr.Item("Konto"))
                        Me.Soll = cSqlDb.checkNulDbl(dr.Item("Soll"))
                        Me.Haben = cSqlDb.checkNulDbl(dr.Item("Haben"))
                        Me.Steuer = cSqlDb.checkNullInteger(dr.Item("Steuer"))
                        Me.Steuerbetrag = cSqlDb.checkNulDbl(dr.Item("Steuerbetrag"))
                        Me.Referenz = cSqlDb.checkNullStr(dr.Item("Referenz"))
                        Me.Belegverbuchung = cSqlDb.checkNullBool(dr.Item("Belegverbuchung"))
                        Me.gebucht = cSqlDb.checkNullBool(dr.Item("gebucht"))
                        Me.Finanzwege = cSqlDb.checkNullStr(dr.Item("Finanzwege"))
                        Me.rksv_id = cSqlDb.checkNullReturnValue(dr.Item("rksv_id"), Nothing)
                        Me.rksv_BelegId = cSqlDb.checkNullReturnValue(dr.Item("rksv_BelegId"), Nothing)
                        Me.rksv_aktiv = cSqlDb.checkNullReturnValue(dr.Item("rksv_aktiv"), False)
                        Me.durchfuehrender_Benutzer = cSqlDb.checkNullInteger(dr.Item("durchfuehrender_Benutzer"))
                        Me.Trdin = cSqlDb.checkNullReturnValue(dr.Item("Trdin"), False)



                    End If
                    dr.Close()
                End Using
            End Using
            'Return Nothing
        Catch ex As Exception
            MsgBox("Fehler in der Funktion '" & System.Reflection.MethodInfo.GetCurrentMethod.Name & "'" & vbNewLine & vbNewLine & ex.Message & vbNewLine & vbNewLine & ex.StackTrace)
        End Try
        '  Return Nothing
    End Sub

   


    Function getParameterList() As List(Of VERAG_PROG_ALLGEMEIN.MyListItem2)
        Dim list As New List(Of VERAG_PROG_ALLGEMEIN.MyListItem2)
        list.Add(New VERAG_PROG_ALLGEMEIN.MyListItem2("Mandant", Mandant))
        list.Add(New VERAG_PROG_ALLGEMEIN.MyListItem2("Niederlassung", Niederlassung))
        list.Add(New VERAG_PROG_ALLGEMEIN.MyListItem2("Benutzer", Benutzer))
        list.Add(New VERAG_PROG_ALLGEMEIN.MyListItem2("Geschäftsjahr", Geschäftsjahr))
        list.Add(New VERAG_PROG_ALLGEMEIN.MyListItem2("JournalNr", JournalNr))
        list.Add(New VERAG_PROG_ALLGEMEIN.MyListItem2("Buchungsdatum", Buchungsdatum))
        list.Add(New VERAG_PROG_ALLGEMEIN.MyListItem2("BelegDat", BelegDat))
        list.Add(New VERAG_PROG_ALLGEMEIN.MyListItem2("BelegNr", BelegNr))
        list.Add(New VERAG_PROG_ALLGEMEIN.MyListItem2("Belegart", Belegart))
        list.Add(New VERAG_PROG_ALLGEMEIN.MyListItem2("Buchungstext", Buchungstext))
        list.Add(New VERAG_PROG_ALLGEMEIN.MyListItem2("Betrag", Betrag))
        list.Add(New VERAG_PROG_ALLGEMEIN.MyListItem2("Währung", Währung))
        list.Add(New VERAG_PROG_ALLGEMEIN.MyListItem2("Kurs", Kurs))
        list.Add(New VERAG_PROG_ALLGEMEIN.MyListItem2("Eingabeart", Eingabeart))
        list.Add(New VERAG_PROG_ALLGEMEIN.MyListItem2("Konto", Konto))
        list.Add(New VERAG_PROG_ALLGEMEIN.MyListItem2("Soll", Soll))
        list.Add(New VERAG_PROG_ALLGEMEIN.MyListItem2("Haben", Haben))
        list.Add(New VERAG_PROG_ALLGEMEIN.MyListItem2("Steuer", Steuer))
        list.Add(New VERAG_PROG_ALLGEMEIN.MyListItem2("Steuerbetrag", Steuerbetrag))
        list.Add(New VERAG_PROG_ALLGEMEIN.MyListItem2("Referenz", Referenz))
        list.Add(New VERAG_PROG_ALLGEMEIN.MyListItem2("Belegverbuchung", Belegverbuchung))
        list.Add(New VERAG_PROG_ALLGEMEIN.MyListItem2("gebucht", gebucht))
        list.Add(New VERAG_PROG_ALLGEMEIN.MyListItem2("Finanzwege", Finanzwege))
        list.Add(New VERAG_PROG_ALLGEMEIN.MyListItem2("rksv_id", rksv_id))
        list.Add(New VERAG_PROG_ALLGEMEIN.MyListItem2("rksv_BelegId", rksv_BelegId))
        list.Add(New VERAG_PROG_ALLGEMEIN.MyListItem2("rksv_aktiv", rksv_aktiv))
        list.Add(New VERAG_PROG_ALLGEMEIN.MyListItem2("durchfuehrender_Benutzer", durchfuehrender_Benutzer))
        list.Add(New VERAG_PROG_ALLGEMEIN.MyListItem2("Trdin", Trdin))

        Return list
    End Function

    Public Function getUpdateCmd() As String
        Try
            Dim list As List(Of VERAG_PROG_ALLGEMEIN.MyListItem2) = getParameterList()

            Dim str As String = ""
            For Each i In list
                str &= "[" & i.Text & "] = @" & i.Text.Replace("-", "").Replace(" ", "") & ","
            Next
            str = str.Substring(0, str.Length - 1) 'wg. ','
            Return (" UPDATE [tblKassenbuch] SET " & str & " WHERE  [Mandant]=@Mandant AND Niederlassung=@Niederlassung AND Benutzer=@Benutzer AND Geschäftsjahr=@Geschäftsjahr AND JournalNr=@JournalNr ")

        Catch ex As Exception
            MsgBox("Fehler in der Funktion '" & System.Reflection.MethodInfo.GetCurrentMethod.Name & "'" & vbNewLine & vbNewLine & ex.Message & vbNewLine & vbNewLine & ex.StackTrace)
        End Try
        Return ""
    End Function

    Public Function getInsertCmd() As String
        Try
            Dim list As List(Of VERAG_PROG_ALLGEMEIN.MyListItem2) = getParameterList()
            Dim str As String = ""
            Dim values As String = ""
            For Each i In list
                str &= "[" & i.Text & "],"
                values &= "@" & i.Text.Replace("-", "").Replace(" ", "") & ","
            Next
            str = str.Substring(0, str.Length - 1) 'wg. ','
            values = values.Substring(0, values.Length - 1) 'wg. ','
            Return (" INSERT INTO [tblKassenbuch]  (" & str & ") VALUES(" & values & ")  ")
        Catch ex As Exception
            MsgBox("Fehler in der Funktion '" & System.Reflection.MethodInfo.GetCurrentMethod.Name & "'" & vbNewLine & vbNewLine & ex.Message & vbNewLine & vbNewLine & ex.StackTrace)
        End Try
        Return ""
    End Function



End Class
