public void GetHoeveelheidMateriaalTest()
 {
     Materiaal mat = new Materiaal("Laptop", 0, 10); ; // TODO: Initialize to an appropriate value
     int expected = 49; // TODO: Initialize to an appropriate value
     int actual;
     actual = DatabaseKoppeling.GetHoeveelheidMateriaal(mat);
     Assert.AreEqual(expected, actual);
 }
        /// <summary> addUitlening voegt een nieuwe uitlening toe.
        /// <para>Er wordt een nieuwe uitlening in de Database aangemaakt mbv de gegeven parameters.</para>
        /// </summary>
        /// <param name="Reserveringsnummer">Het reserveringsnummer van de klant.</param>
        /// <param name="mat">Het materiaal dat de klant wil lenen.</param>
        /// <param name="Uitgeleend">De datum waarop de uitlening van start gaat.</param>
        /// <param name="Ingeleverd">De datum waarop het materiaal uiterlijk teruggebracht moet worden.</param>
        /// <param name="lBox">De listbox met beschikbare materiaal dat al door de klant gehuurd wordt (Wordt gebruikt om te kijken of er een INSERT of UPDATE SQL commando uitgevoerd moet worden.</param>
        public static void addUitlening(int Reserveringsnummer, Materiaal mat, DateTime Uitgeleend, DateTime Ingeleverd, ListBox lBox)
        {
            {
                if (lBox.FindString(mat.Type) == ListBox.NoMatches)
                {
                    string nieuwuitleningins = "INSERT INTO UITLENING (RESERVERINGSNUMMER, TYPE, BETAALD, DATUM_UITGELEEND, DATUM_INGELEVERD, AANTAL) VALUES(" + Reserveringsnummer + ", " + "'" + mat.Type + "', '" + "', '" + Uitgeleend.ToString("dd/MM/yyyy") + "', '" + Ingeleverd.ToString("dd/MM/yyyy") + "', 1)";
                    OracleCommand insertuitleningcmd = new OracleCommand(nieuwuitleningins, conn);

                    try
                    {
                        conn.Open();
                        insertuitleningcmd.ExecuteNonQuery();
                    }
                    catch (Exception ef)
                    {
                        System.Windows.Forms.MessageBox.Show(ef.Message);
                    }
                    finally
                    {
                        conn.Close();
                    }
                }

                else
                {
                    string sqlverhoogaantal = "UPDATE UITLENING SET AANTAL = AANTAL + 1 WHERE (RESERVERINGSNUMMER = " + Reserveringsnummer + " AND TYPE = '" + mat.Type + "')";
                    OracleCommand verhoogcmd = new OracleCommand(sqlverhoogaantal, conn);
                    try
                    {
                        conn.Open();
                        verhoogcmd.ExecuteNonQuery();

                    }
                    catch (Exception fe)
                    {

                        MessageBox.Show(fe.Message);
                    }
                    finally
                    {
                        conn.Close();
                    }
                }
            }
        }
        /// <summary> getMateriaal haalt al het materiaal op uit de Database.
        /// <para>Al het ingevoerde materiaal in de MATERIAAL tabel wordt in een lijst ingevoerd en gereturned. </para>
        /// </summary>
        /// <returns>List met Materiaal</returns>
        public static List<Materiaal> getMateriaal()
        {
            List<Materiaal> materialen = new List<Materiaal>();

            string sql = "SELECT * FROM MATERIAAL";
            OracleCommand cmd = new OracleCommand(sql, conn);

            try
            {
                conn.Open();
                OracleDataReader reader = cmd.ExecuteReader();
                while (reader.Read())
                {
                    Materiaal materiaal = new Materiaal(Convert.ToString(reader["TYPE"]), Convert.ToInt32(reader["VERHUURPRIJS"]), Convert.ToInt32(reader["AANTAL"]));
                    materialen.Add(materiaal);
                }
            }
            catch (Exception fail)
            {

                System.Windows.Forms.MessageBox.Show(fail.Message);
            }
            finally
            {
                conn.Close();
            }
            return materialen;
        }
        /// <summary>
        /// Deze methode kijkt hoeveel materiaal er nog over is.
        /// <para>Het beschikbaar materiaal wordt uitgelezen vanaf de DB, het uitgeleend materiaal wordt uitgelezen uit de DB. Hierdoor kan lokaal het aantal materiaal bijgehouden worden zonder dit in de Database aan te passen.</para>
        /// </summary>
        /// <param name="mat">Het materiaal.</param>
        /// <returns>Een int; de hoeveelheid Materiaal dat er nog is.</returns>
        public static int GetHoeveelheidMateriaal(Materiaal mat)
        {
            int beschikbaar = 0; // Hoeveel materiaal er normaal is.
            int uitgeleend = 0; // Hoeveel materiaal er is verhuurd.
            int totaal = 0;     // beschikbaar - uitgeleend

            string sqla = "SELECT AANTAL FROM MATERIAAL WHERE TYPE = '" + mat.Type + "'";
            string sqlb = "SELECT AANTAL FROM UITLENING WHERE TYPE = '" + mat.Type + "'";
            OracleCommand sqlacommand = new OracleCommand(sqla, conn);
            OracleCommand sqlbcommand = new OracleCommand(sqlb, conn);

            try
            {
                conn.Open();
                OracleDataReader sqlareader = sqlacommand.ExecuteReader();
                while (sqlareader.Read())
                {
                    beschikbaar = Convert.ToInt32(sqlareader["AANTAL"]);
                }
                OracleDataReader sqlbreader = sqlbcommand.ExecuteReader();
                while (sqlbreader.Read())
                {
                    uitgeleend = Convert.ToInt32(sqlbreader["AANTAL"]);
                }
                totaal = (beschikbaar - uitgeleend);
            }
            catch (Exception ex)
            {

                MessageBox.Show(ex.Message);
            }
            finally
            {
                conn.Close();

            }
            return totaal;
        }
        private void buttonReserveren_Click(object sender, EventArgs e)
        {
            if (dateTimePicker1.Value > dateTimePicker2.Value)
            {
                MessageBox.Show("De einddatum ligt voor de begindatum!");
                return;
            }
            else
            {
                //Maak een nieuwe reservering aan.
                try
                {
                    Materiaal nieuwmat = new Materiaal(materialen[listboxBeschikbaarMateriaal.SelectedIndex].Type, materialen[listboxBeschikbaarMateriaal.SelectedIndex].Prijs, materialen[listboxBeschikbaarMateriaal.SelectedIndex].Aantal);

                    DatabaseKoppeling.addUitlening(Convert.ToInt32(textBoxReserveringsNr.Text), nieuwmat, dateTimePicker1.Value, dateTimePicker2.Value, ListboxDoorKlantGehuurd);
                    RefreshListboxes();
                }
                catch (ArgumentOutOfRangeException)
                {
                    MessageBox.Show("Selecteer het materiaal dat je wilt reserveren.");
                }
                catch (FormatException)
                {
                    MessageBox.Show("Voer wel een geldig reserveringsnummer in!");
                }
                catch (Exception)
                {
                    MessageBox.Show("Voer een geldig reserveringsnummer in.");
                }

            }
        }
 public void getMateriaalTest()
 {
     List<Materiaal> expected = new List<Materiaal>();
     Materiaal newmat = new Materiaal("Speedboat", 500, 10);
     Materiaal newmat2 = new Materiaal("Laptop", 50, 50);
     Materiaal newmat3 = new Materiaal("Extreme Laptop", 500, 50);
     Materiaal newmat4 = new Materiaal("Partytent", 20, 100);
     Materiaal newmat5 = new Materiaal("Feestmuts",2,500);
     expected.Add(newmat);
     expected.Add(newmat2);
     expected.Add(newmat3);
     expected.Add(newmat4);
     expected.Add(newmat5);
     List<Materiaal> actual;
     actual = DatabaseKoppeling.getMateriaal();
     for (int i = 0; i < expected.Count; i++)
     {
         Assert.AreEqual(expected[i].Type, actual[i].Type);
     }
 }
        /// <summary>
        /// Een aparte methode om uitleningen toe te voegen voor aspx.
        /// </summary>
        /// <param name="reserveringsnummer">Het reserveringsnummer van de klant.</param>
        /// <param name="mat">Het materiaal dat de klant wil lenen.</param>
        /// <param name="uitgeleend">De datum waarop de uitlening van start gaat.</param>
        /// <param name="ingeleverd">De datum waarop het materiaal uiterlijk teruggebracht moet worden.</param>
        /// <param name="list">Een lijst met daarin alle materialen die de klant al heeft gehuurd.</param>
        public static void AddUitleningAspx(int reserveringsnummer, Materiaal mat, DateTime uitgeleend, DateTime ingeleverd, List<string> list)
        {
            {
                if (!list.Contains(mat.Type))
                {
                    string nieuwuitleningins = "INSERT INTO UITLENING (RESERVERINGSNUMMER, TYPE, DATUM_UITGELEEND, DATUM_INGELEVERD, AANTAL) VALUES(" + reserveringsnummer + ", " + "'" + mat.Type + "', TO_DATE('" + uitgeleend.ToString("DD/MMM/YYYY") + "'), TO_DATE('" + ingeleverd.ToString("DD/MMM/YYYY") + "'), 1)";
                    OracleCommand insertuitleningcmd = new OracleCommand(nieuwuitleningins, conn);

                    try
                    {
                        conn.Open();
                        insertuitleningcmd.ExecuteNonQuery();
                    }
                    catch (Exception ef)
                    {
                        System.Windows.Forms.MessageBox.Show(ef.Message);
                    }
                    finally
                    {
                        conn.Close();
                    }
                }
                else
                {
                    string sqlverhoogaantal = "UPDATE UITLENING SET AANTAL = AANTAL + 1 WHERE (RESERVERINGSNUMMER = " + reserveringsnummer + " AND TYPE = '" + mat.Type + "')";
                    OracleCommand verhoogcmd = new OracleCommand(sqlverhoogaantal, conn);
                    try
                    {
                        conn.Open();
                        verhoogcmd.ExecuteNonQuery();

                    }
                    catch (Exception fe)
                    {

                        MessageBox.Show(fe.Message);
                    }
                    finally
                    {
                        conn.Close();
                    }
                }
            }
        }
        /// <summary> getMateriaal haalt al het materiaal op uit de Database.
        /// <para>Al het ingevoerde materiaal in de MATERIAAL tabel wordt in een lijst ingevoerd en gereturned. </para>
        /// </summary>
        /// <returns>List met Materiaal</returns>
        public static List<Materiaal> GetMateriaal()
        {
            List<Materiaal> materialen = new List<Materiaal>();

            string sql = "SELECT * FROM MATERIAAL";
            OracleCommand cmd = new OracleCommand(sql, conn);

            try
            {
                conn.Open();
                OracleDataReader reader = cmd.ExecuteReader();
                while (reader.Read())
                {
                    Materiaal materiaal = new Materiaal(Convert.ToString(reader["TYPE"]), Convert.ToInt32(reader["VERHUURPRIJS"]), Convert.ToInt32(reader["AANTAL"]));
                    materialen.Add(materiaal);
                }
            }
            catch
            {

            }
            finally
            {
                conn.Close();
            }
            return materialen;
        }