Imports System.Data.OleDb
Imports System.Configuration.ConfigurationSettings
Imports Mediatheek.data

Public Class clsOntlenerDA

#Region "Get Ontleners"

    Public Shared Function GetOntleners() As ArrayList
        'Hier maken we een functie getontleners om alle ontleners op te roepen en te steken in een arraylist 
        'Hier worden alle records ingelezen van de tabel ontlener
        Try
            '1. Select en Pars aanmaken
            Dim sSQL As String = "SELECT * FROM tblOntlener ORDER BY Achternaam"

            '3. De gegevens selecteren en naar een DataTable overbrengen
            Dim oDataTable As DataTable = clsDatabase.GetDT(sSQL)

            '4. De gegegevens van de DataTable naar 
            '   een ArrayList van student-objecten overbrengen
            Dim arlOntleners As ArrayList = New ArrayList
            Dim oRow As DataRow
            For Each oRow In oDataTable.Rows

                Dim sId, sVoorNaam, sAchterNaam, sAdres, sPostCode, sGemeente, sGeboorteDatum, sTelefoon, sEmail As String

                sId = Convert.ToString(oRow.Item("OntlenerID"))
                sVoorNaam = Convert.ToString(oRow.Item("Voornaam"))
                sAchterNaam = Convert.ToString(oRow.Item("Achternaam"))
                sAdres = Convert.ToString(oRow.Item("StraatEnNr"))
                sPostCode = Convert.ToString(oRow.Item("Postcode"))
                sGemeente = Convert.ToString(oRow.Item("Gemeente"))
                sGeboorteDatum = Convert.ToString(oRow.Item("Geboortedatum"))
                sTelefoon = Convert.ToString(oRow.Item("Telefoon"))
                sEmail = Convert.ToString(oRow.Item("Email"))
                Dim oOntlener As New clsOntlener(sId, sVoorNaam, sAchterNaam, sAdres, sPostCode, sGemeente, sGeboorteDatum, sTelefoon, sEmail)
                arlOntleners.Add(oOntlener)
            Next

            '5. De ArrayList returnen
            Return arlOntleners

        Catch ex As Exception
            Debug.WriteLine(ex.Message)

            Throw
        End Try
    End Function

    Public Shared Function GetOntleners2(ByVal sNaamGekozen As String) As ArrayList
       
        Try

            Dim sSQL As String = "SELECT * FROM tblOntlener WHERE Achternaam='" + sNaamGekozen + "'   "
            Dim oDataTable As DataTable = clsDatabase.GetDT(sSQL)

           
            Dim arlOntleners As ArrayList = New ArrayList
            Dim oRow As DataRow
            For Each oRow In oDataTable.Rows

                Dim sId, sVoorNaam, sAchterNaam, sAdres, sPostCode, sGemeente, sGeboorteDatum, sTelefoon, sEmail As String

                sId = Convert.ToString(oRow.Item("OntlenerID"))
                sVoorNaam = Convert.ToString(oRow.Item("Voornaam"))
                sAchterNaam = Convert.ToString(oRow.Item("Achternaam"))
                sAdres = Convert.ToString(oRow.Item("StraatEnNr"))
                sPostCode = Convert.ToString(oRow.Item("Postcode"))
                sGemeente = Convert.ToString(oRow.Item("Gemeente"))
                sGeboorteDatum = Convert.ToString(oRow.Item("Geboortedatum"))
                sTelefoon = Convert.ToString(oRow.Item("Telefoon"))
                sEmail = Convert.ToString(oRow.Item("Email"))
                Dim oOntlener As New clsOntlener(sId, sVoorNaam, sAchterNaam, sAdres, sPostCode, sGemeente, sGeboorteDatum, sTelefoon, sEmail)
                arlOntleners.Add(oOntlener)
            Next


            Return arlOntleners

        Catch ex As Exception
            Debug.WriteLine(ex.Message)

            Throw
        End Try
    End Function

    Public Shared Function GetOntlenersById(ByVal sIdGevonden As String) As ArrayList
        'Hier maken we een functie getontleners om de ontlener met een bepaalde id terug te geven 

        Try

            Dim sSQL As String = "SELECT * FROM tblOntlener WHERE OntlenerID=" + sIdGevonden


            Dim oDataTable As DataTable = clsDatabase.GetDT(sSQL)

            
            Dim arlOntleners As ArrayList = New ArrayList
            Dim oRow As DataRow
            For Each oRow In oDataTable.Rows

                Dim sId, sVoorNaam, sAchterNaam, sAdres, sPostCode, sGemeente, sGeboorteDatum, sTelefoon, sEmail As String

                sId = Convert.ToString(oRow.Item("OntlenerID"))
                sVoorNaam = Convert.ToString(oRow.Item("Voornaam"))
                sAchterNaam = Convert.ToString(oRow.Item("Achternaam"))
                sAdres = Convert.ToString(oRow.Item("StraatenNr"))
                sPostCode = Convert.ToString(oRow.Item("Postcode"))
                sGemeente = Convert.ToString(oRow.Item("Gemeente"))
                sGeboorteDatum = Convert.ToString(oRow.Item("Geboortedatum"))
                sTelefoon = Convert.ToString(oRow.Item("Telefoon"))
                sEmail = Convert.ToString(oRow.Item("Email"))
                Dim oOntlener As New clsOntlener(sId, sVoorNaam, sAchterNaam, sAdres, sPostCode, sGemeente, sGeboorteDatum, sTelefoon, sEmail)
                arlOntleners.Add(oOntlener)
            Next

            Return arlOntleners

        Catch ex As Exception
            Debug.WriteLine(ex.Message)

            Throw
        End Try
    End Function

    Public Shared Function GetOntlenersById2(ByVal sOntlenerID2 As String) As clsOntlener
        Dim oOntlener As clsOntlener
        For Each oOntlener In GetOntleners()
            If oOntlener.Id = sOntlenerID2 Then
                Return oOntlener
            End If
        Next
    End Function

    Public Shared Function GetOntlenersPerGemeente() As ArrayList
        'Hier maken we een functie om alle ontleners per gemeente terug te geven ( excell )
        Dim sSQL As String = "SELECT Gemeente, COUNT(Gemeente) as OntlenerID FROM tblOntlener GROUP BY Gemeente"

        Dim oDataTable As DataTable = clsDatabase.GetDT(sSQL)
        Dim arlOntleners As ArrayList = New ArrayList
        Dim oRow As DataRow
        For Each oRow In oDataTable.Rows
            Dim oOntlenerInfo As New clsOntlener

            oOntlenerInfo.Gemeente = oRow.Item("Gemeente")
            oOntlenerInfo.Id = oRow.Item("OntlenerID")


            arlOntleners.Add(oOntlenerInfo)
        Next

        '5. De ArrayList returnen
        Return arlOntleners
    End Function


    Public Shared Function GetOntleners3(ByVal sNaamGekozen As String, ByVal sVoorNaamGekozen As String) As ArrayList
        'hier maken we een fucntie om de ontlenerinfo terug te geven van een bepaalde ontlener
        Try
            '1. Select en Pars aanmaken
            Dim sSQL As String = "SELECT * FROM tblOntlener WHERE Achternaam='" + sNaamGekozen + "'  and Voornaam='" + sVoorNaamGekozen + "' "
            Dim oDataTable As DataTable = clsDatabase.GetDT(sSQL)


            Dim arlOntleners As ArrayList = New ArrayList
            Dim oRow As DataRow
            For Each oRow In oDataTable.Rows

                Dim sId, sVoorNaam, sAchterNaam, sAdres, sPostCode, sGemeente, sGeboorteDatum, sTelefoon, sEmail As String

                sId = Convert.ToString(oRow.Item("OntlenerID"))
                sVoorNaam = Convert.ToString(oRow.Item("Voornaam"))
                sAchterNaam = Convert.ToString(oRow.Item("Achternaam"))
                sAdres = Convert.ToString(oRow.Item("StraatEnNr"))
                sPostCode = Convert.ToString(oRow.Item("Postcode"))
                sGemeente = Convert.ToString(oRow.Item("Gemeente"))
                sGeboorteDatum = Convert.ToString(oRow.Item("Geboortedatum"))
                sTelefoon = Convert.ToString(oRow.Item("Telefoon"))
                sEmail = Convert.ToString(oRow.Item("Email"))
                Dim oOntlener As New clsOntlener(sId, sVoorNaam, sAchterNaam, sAdres, sPostCode, sGemeente, sGeboorteDatum, sTelefoon, sEmail)
                arlOntleners.Add(oOntlener)
            Next

            '5. De ArrayList returnen
            Return arlOntleners

        Catch ex As Exception
            Debug.WriteLine(ex.Message)

            Throw
        End Try
    End Function
#End Region

#Region "Voeg Ontleners Toe"

    Public Shared Sub VoegOntlener(ByVal oOntlener As clsOntlener)
        'functie om een ontlener toe te voegen
        Dim sValue As String
        sValue = System.Configuration.ConfigurationSettings.AppSettings.Item("ConnectionString")
        Dim oCon As System.Data.OleDb.OleDbConnection
        oCon = New OleDbConnection(sValue)
        oCon.Open()

        Dim oCommand As OleDbCommand
        oCommand = oCon.CreateCommand()

        oOntlener.Id = getVolgendOntlenerId()
        Dim sInsert As String
        sInsert = "INSERT INTO tblOntlener(OntlenerID,Voornaam,Achternaam,StraatEnNr,Postcode,Gemeente,Geboortedatum,Telefoon,Email)VALUES(?,?,?,?,?,?,?,?,?)"

        Dim oPar1 As New OleDbParameter("@OntlenerID", oOntlener.Id)
        Dim oPar2 As New OleDbParameter("@Voornaam", oOntlener.VoorNaam)
        Dim oPar3 As New OleDbParameter("@Achternaam", oOntlener.AchterNaam)
        Dim oPar4 As New OleDbParameter("@StraatEnNr", oOntlener.Adres)
        Dim oPar5 As New OleDbParameter("@Postcode", oOntlener.PostCode)
        Dim oPar6 As New OleDbParameter("@Gemeente", oOntlener.Gemeente)
        Dim oPar7 As New OleDbParameter("@Geboortedatum", oOntlener.GeboorteDatum)
        Dim oPar8 As New OleDbParameter("@Telefoon", oOntlener.Telefoon)
        Dim oPar9 As New OleDbParameter("@Email", oOntlener.Email)
        oCommand.CommandText = sInsert
        oCommand.Parameters.Add(oPar1)
        oCommand.Parameters.Add(oPar2)
        oCommand.Parameters.Add(oPar3)
        oCommand.Parameters.Add(oPar4)
        oCommand.Parameters.Add(oPar5)
        oCommand.Parameters.Add(oPar6)
        oCommand.Parameters.Add(oPar7)
        oCommand.Parameters.Add(oPar8)
        oCommand.Parameters.Add(oPar9)
        oCommand.ExecuteNonQuery()
        oCon.Close()
    End Sub

    Private Shared Function getVolgendOntlenerId() As Integer
        Try
            Dim sSQL As String = "SELECT MAX(OntlenerID) FROM tblOntlener"
            Dim iMaxId As Integer
            Try
                iMaxId = Convert.ToInt32(clsDatabase.ExecuteScalar(sSQL))
            Catch
                iMaxId = 0

            End Try
            Return iMaxId + 1
        Finally
        End Try
    End Function

#End Region

#Region "Wijzig Ontleners"


    Public Shared Function WijzigOntlener(ByVal oOntlener As clsOntlener)
        'functie om een ontlener te wijzigen
        Dim oCon As OleDbConnection
        Try
            Dim sValue As String
            sValue = System.Configuration.ConfigurationSettings.AppSettings.Item("ConnectionString")
            Dim oCon2 As System.Data.OleDb.OleDbConnection
            oCon2 = New OleDbConnection(sValue)
            oCon2.Open()

            Dim oCommand2 As OleDbCommand
            oCommand2 = oCon2.CreateCommand()
            Dim sInsert As String
            
            sInsert = "UPDATE tblOntlener SET Voornaam=?, Achternaam=?, StraatEnNr=?, Postcode=?, Gemeente=?, Geboortedatum=? , Telefoon=?, Email=? WHERE OntlenerID=?"


            Dim oPar1 As New OleDbParameter("@Voornaam", oOntlener.VoorNaam)
            Dim oPar2 As New OleDbParameter("@Achternaam", oOntlener.AchterNaam)
            Dim oPar3 As New OleDbParameter("@StraatEnNr", oOntlener.Adres)
            Dim oPar4 As New OleDbParameter("@Postcode", oOntlener.PostCode)
            Dim oPar5 As New OleDbParameter("@Gemeente", oOntlener.Gemeente)
            Dim oPar6 As New OleDbParameter("@Geboortedatum", oOntlener.GeboorteDatum)
            Dim oPar7 As New OleDbParameter("@Telefoon", oOntlener.Telefoon)
            Dim oPar8 As New OleDbParameter("@Email", oOntlener.Email)
            Dim oPar9 As New OleDbParameter("@OntelenerID", oOntlener.Id)
            oCommand2.CommandText = sInsert
            oCommand2.Parameters.Add(oPar1)
            oCommand2.Parameters.Add(oPar2)
            oCommand2.Parameters.Add(oPar3)
            oCommand2.Parameters.Add(oPar4)
            oCommand2.Parameters.Add(oPar5)
            oCommand2.Parameters.Add(oPar6)
            oCommand2.Parameters.Add(oPar7)
            oCommand2.Parameters.Add(oPar8)
            oCommand2.Parameters.Add(oPar9)

            oCommand2.ExecuteNonQuery()
            oCon2.Close()


        Catch ex As Exception
            Debug.WriteLine(ex.Message)
            Throw
        Finally
            '4. Connectie vrijgeven
            If Not oCon Is Nothing Then
                oCon.Close()
                oCon.Dispose()
            End If
        End Try
    End Function
#End Region

#Region "Verwijder Ontleners"
    'functie om een ontlener te verwijderen
    Public Shared Function VerwijderOntlener(ByVal iId As Integer)
        Dim oCon As OleDbConnection

        Try
            Dim sValue As String
            sValue = System.Configuration.ConfigurationSettings.AppSettings.Item("ConnectionString")
            Dim oCon3 As System.Data.OleDb.OleDbConnection
            oCon3 = New OleDbConnection(sValue)
            oCon3.Open()

            Dim oCommand3 As OleDbCommand
            oCommand3 = oCon3.CreateCommand()
            Dim sInsert As String

            sInsert = "DELETE FROM tblOntlener WHERE OntlenerID=?"

            Dim oPar As New OleDbParameter("@OntlenerID", iId)
            oCommand3.CommandText = sInsert
            oCommand3.Parameters.Add(oPar)


            oCommand3.ExecuteNonQuery()

            oCon3.Close()
        Catch ex As Exception
            Debug.WriteLine(ex.Message)
            Throw
        Finally

            If Not oCon Is Nothing Then
                oCon.Close()
                oCon.Dispose()
            End If
        End Try
    End Function

    Public Shared Function VerwijderOntleningenByOntlenerID(ByVal sOntlenerID As String)
        Dim oCon As OleDbConnection
        Try
            Dim sValue As String
            sValue = System.Configuration.ConfigurationSettings.AppSettings.Item("ConnectionString")
            Dim oCon4 As System.Data.OleDb.OleDbConnection
            oCon4 = New OleDbConnection(sValue)
            oCon4.Open()

            Dim oCommand4 As OleDbCommand
            oCommand4 = oCon4.CreateCommand()
            Dim sInsert As String


            sInsert = "DELETE FROM tblAlbum_Ontlener WHERE OntlenerID=" & sOntlenerID


            oCommand4.CommandText = sInsert

            MsgBox(oCommand4.CommandText)
            '3. Uitvoeren op de DB
            oCommand4.ExecuteNonQuery()
            oCon4.Close()
        Catch ex As Exception
            Debug.WriteLine(ex.Message)
            Throw
        Finally
            '4. Connectie vrijgeven
            If Not oCon Is Nothing Then
                oCon.Close()
                oCon.Dispose()
            End If
        End Try
    End Function

#End Region

End Class
