public WinkelwagenItem(Producten product, int kwantiteit, string maat, string kleur)
 {
     this.product = product;
     this.kwantiteit = kwantiteit;
     this.kleur = kleur;
     this.maat = maat;
 }
        public bool GetProduct(Producten product, string response)
        {
            try
            {
                conn.Open();

                string selectQuery = "select * from tempwinkelwagen where productcode=@productcode AND guid=@guid";
                MySqlCommand cmd = new MySqlCommand(selectQuery, conn);

                MySqlParameter productcodeParam = new MySqlParameter("productcode", MySqlDbType.Int32);
                MySqlParameter guidParam = new MySqlParameter("guid", MySqlDbType.VarChar);

                productcodeParam.Value = product.productCode;
                guidParam.Value = response;

                cmd.Parameters.Add(productcodeParam);
                cmd.Parameters.Add(guidParam);

                cmd.Prepare();

                MySqlDataReader dataReader = cmd.ExecuteReader();
                if (dataReader.Read())
                    return true;
                else
                    return false;

            }
            catch (Exception e)
            {

                Console.Write("Ophalen van Product mislukt " + e);
                throw e;
            }
            finally
            {
                conn.Close();
            }
        }
        public void InsertTempWinkelwagenItem(Producten product, string maat, string kleur, string response)
        {
            try
            {
                conn.Open();

                string insertString = @"insert into tempWinkelwagen (guid, productcode, maat, kleur, eind_datum) " +
                                                       " values (@guid, @productcode, @maat, @kleur, @eind_datum)";

                //commando en prepared statement
                MySqlCommand cmd = new MySqlCommand(insertString, conn);
                MySqlParameter guidParam = new MySqlParameter("@guid", MySqlDbType.VarChar);
                MySqlParameter productcodeParam = new MySqlParameter("@productcode", MySqlDbType.Int32);
                MySqlParameter kleurParam = new MySqlParameter("@kleur", MySqlDbType.VarChar);
                MySqlParameter einddatumParam = new MySqlParameter("@eind_datum", MySqlDbType.DateTime);
                MySqlParameter maatParam = new MySqlParameter("@maat", MySqlDbType.VarChar);

                // Get dateTime
                var now = DateTime.Now;

                //set parameters naar view Waarden
                guidParam.Value = response;
                productcodeParam.Value = product.productCode;
                kleurParam.Value = kleur;
                maatParam.Value = maat;
                einddatumParam.Value = now.AddMonths(1);

                //voeg parameters toe
                cmd.Parameters.Add(guidParam);
                cmd.Parameters.Add(productcodeParam);
                cmd.Parameters.Add(kleurParam);
                cmd.Parameters.Add(maatParam);
                cmd.Parameters.Add(einddatumParam);

                //prepare Execute Commit
                cmd.Prepare();
                cmd.ExecuteNonQuery();
            }
            catch (Exception e)
            {// is er een fout?
                Console.Write("Temp Winkelwagen niet toegevoegd: " + e);
                throw e;
            }
            finally
            {
                conn.Close();
            }
        }
        public void InsertFactuurEnBestellingDetail(Producten product, int kwantiteit, string maat, string kleur, int usr, string response, string keuze)
        {
            MySqlTransaction trans = null;
            int id = GetFactuurId() + 1; ;
            try
            {
                conn.Open();

                trans = conn.BeginTransaction();
                InsertFactuur(product, kwantiteit, maat, kleur, usr, response);
                InsertBestellingDetail(response, id, keuze);

                trans.Commit();
            }
            catch (Exception e)
            {
                Console.WriteLine("Exceptie in Insert Factuur en Bestelling, Transactie mislukt");
                trans.Rollback();
                throw e;
            }
            finally
            {
                conn.Close();
            }
        }
        public void InsertFactuur(Producten product, int kwantiteit, string maat, string kleur, int usr, string response)
        {
            try
            { //open transactie en maak insert string en verbinding
                // conn.Open();

                string insertString = @"insert into factuur (datum, klant_code, product_code, totaalbedrag, kwantiteit, maat, kleur, guid) " +
                                                       " values (@datum, @klant_code, @product_code, @totaalbedrag, @kwantiteit, @maat, @kleur, @guid)";

                //command en prepared statement
                MySqlCommand cmd = new MySqlCommand(insertString, conn);
                MySqlParameter datumParam = new MySqlParameter("@datum", MySqlDbType.Date);
                MySqlParameter klantcodeParam = new MySqlParameter("@klant_code", MySqlDbType.Int32);
                MySqlParameter productcodeParam = new MySqlParameter("@product_code", MySqlDbType.Int32);
                MySqlParameter totaalbedragParam = new MySqlParameter("@totaalbedrag", MySqlDbType.Double);
                MySqlParameter kwantiteitParam = new MySqlParameter("@kwantiteit", MySqlDbType.Int32);
                MySqlParameter maatParam = new MySqlParameter("@maat", MySqlDbType.VarChar);
                MySqlParameter kleurParam = new MySqlParameter("@kleur", MySqlDbType.VarChar);
                MySqlParameter guidParam = new MySqlParameter("@guid", MySqlDbType.VarChar);

                //set parameters naar view Waarden
                datumParam.Value = DateTime.Now;
                klantcodeParam.Value = usr;
                productcodeParam.Value = product.productCode;
                totaalbedragParam.Value = product.productVerkoopprijs * kwantiteit;
                kwantiteitParam.Value = kwantiteit;
                maatParam.Value = maat;
                kleurParam.Value = kleur;
                guidParam.Value = response;

                //voeg parameters toe
                cmd.Parameters.Add(datumParam);
                cmd.Parameters.Add(klantcodeParam);
                cmd.Parameters.Add(productcodeParam);
                cmd.Parameters.Add(totaalbedragParam);
                cmd.Parameters.Add(kwantiteitParam);
                cmd.Parameters.Add(maatParam);
                cmd.Parameters.Add(kleurParam);
                cmd.Parameters.Add(guidParam);

                //prepare Execute Commit
                cmd.Prepare();
                cmd.ExecuteNonQuery();
            }
            catch (Exception e)
            {// is er een fout?
                Console.Write("Temp Winkelwagen niet toegevoegd: " + e);
                throw e;
            }
        }
        public Boolean UpdateProductEnInkoopVoorraad(Producten product, int aanbiedingscode)
        {
            MySqlTransaction trans = null;
            try
            {
                conn.Open();
                trans = conn.BeginTransaction();

                UpdateProduct(product, aanbiedingscode);
                UpdateInkoopVoorraad(product.productCode, product.productVoorraad);

                trans.Commit();
            }
            catch (Exception e)
            {
                trans.Rollback();
                throw e;
            }
            finally
            {
                conn.Close();
            }
            return true;
        }
        public void UpdateProduct(Producten product, int aanbiedingscode)
        {
            try
            {

                string insertString = @"UPDATE product
                                        SET naam=@productnaam, merk=@productmerk, inkoopprijs=@productinkoopprijs, verkoopprijs=@productverkoopprijs, voorraad=@productvoorraad, aanbiedingscode=@productaanbiedingscode, producttype=@producttype, omschrijving=@productomschrijving
                                         WHERE productcode=@productId";

                MySqlCommand cmd = new MySqlCommand(insertString, conn);
                MySqlParameter productcodeParameter = new MySqlParameter("@productId", MySqlDbType.Int32);
                MySqlParameter productnaamParameter = new MySqlParameter("@productnaam", MySqlDbType.String);
                MySqlParameter productmerkParameter = new MySqlParameter("@productmerk", MySqlDbType.String);
                MySqlParameter productinkoopprijsParameter = new MySqlParameter("@productinkoopprijs", MySqlDbType.Double);
                MySqlParameter productverkoopprijsParameter = new MySqlParameter("@productverkoopprijs", MySqlDbType.Double);
                MySqlParameter productvoorraadParameter = new MySqlParameter("@productvoorraad", MySqlDbType.Int32);
                MySqlParameter productaanbiedingscodeParameter = new MySqlParameter("@productaanbiedingscode", MySqlDbType.Int32);
                MySqlParameter producttypeParameter = new MySqlParameter("@producttype", MySqlDbType.String);
                MySqlParameter productOmschrijvingParameter = new MySqlParameter("@productomschrijving", MySqlDbType.String);

                productnaamParameter.Value = product.productNaam;
                productcodeParameter.Value = product.productCode;
                productmerkParameter.Value = product.productMerk;
                productinkoopprijsParameter.Value = product.productInkoopprijs;
                productverkoopprijsParameter.Value = product.productVerkoopprijs;
                productvoorraadParameter.Value = product.productVoorraad;
                productaanbiedingscodeParameter.Value = aanbiedingscode;
                producttypeParameter.Value = product.productType;
                productOmschrijvingParameter.Value = product.productOmschrijving;

                cmd.Parameters.Add(productcodeParameter);
                cmd.Parameters.Add(productnaamParameter);
                cmd.Parameters.Add(productmerkParameter);
                cmd.Parameters.Add(productinkoopprijsParameter);
                cmd.Parameters.Add(productverkoopprijsParameter);
                cmd.Parameters.Add(productvoorraadParameter);
                cmd.Parameters.Add(productaanbiedingscodeParameter);
                cmd.Parameters.Add(producttypeParameter);
                cmd.Parameters.Add(productOmschrijvingParameter);

                cmd.Prepare();
                cmd.ExecuteNonQuery();
            }
            catch (Exception e)
            {
                Console.Write("Updaten product niet gelukt: " + e);
                throw e;
            }
        }
        public void InsertProductInkoop(Producten product/*Product Voorraad*/, int id /*FK productcode*/, string maat /*Maat*/)
        {
            try
            { //open transactie en maak insert string en verbinding
                conn.Open();

                string insertString = @"insert into product_inkoop (voorraad, maat, productcode) " +
                                                       " values (@voorraad, @maat,  @productcode)";

                //commando en prepared statement
                MySqlCommand cmd = new MySqlCommand(insertString, conn);
                MySqlParameter voorraadParameter = new MySqlParameter("@voorraad", MySqlDbType.Int32);
                MySqlParameter maatParameter = new MySqlParameter("@maat", MySqlDbType.String);
                MySqlParameter productcodeParameter = new MySqlParameter("@productcode", MySqlDbType.Int32);

                //set parameters naar view Waarden
                voorraadParameter.Value = product.productVoorraad;
                maatParameter.Value = maat;
                productcodeParameter.Value = id;

                //voeg parameters toe
                cmd.Parameters.Add(voorraadParameter);
                cmd.Parameters.Add(maatParameter);
                cmd.Parameters.Add(productcodeParameter);

                //prepare Execute Commit
                cmd.Prepare();
                cmd.ExecuteNonQuery();
            }
            catch (Exception e)
            {// is er een fout?
                Console.Write("Product niet toegevoegd: " + e);
                throw e;
            }
            finally
            {
                conn.Close();
            }
        }
        public bool InsertProductEnInkoop(Producten product, int aanbieding)
        {
            // Geen Transaction, of we moeten nieuwe reference "Transaction" gebruiken met TransactionScope.
            int id;

            try
            {
                // Insert Product in tabel product
                InsertProduct(product, aanbieding);

                id = GetInsertId();

                // Check of id 0 is.
                if (id == 0)
                    return false;

                // Get Maten voor kledingstuk
                // ATTENTIE: Moet checken of heer / vrouw is!(Extra)
                List<MaatModel> maat = GetMaat();

                // Insert Product in tabel product_inkoop voor verschillende voorraden per maat. (ALLE MATEN HEBBEN DUS DEZELFDE INITIELE VOORRAAD!)
                for (int i = 0; i < maat.Count; i++)
                {
                    InsertProductInkoop(product, id, maat[i].grootte);
                }
            }
            catch (Exception e)
            {
                VerwijderProduct( GetInsertId());
                // VerwijderProductInkoop(id); // ON CASCADE UPDATE / DELETE
                return false;
                throw e;
            }
            return true;
        }
        public void InsertProduct(Producten product)
        {
            try
            { //open transactie en maak insert string en verbinding
                conn.Open();

                string insertString = @"insert into product (naam, merk, inkoopprijs, verkoopprijs, voorraad , aanbiedingscode , producttype, omschrijving) " +
                                                       " values (@naam, @merk,  @inkoopprijs, @verkoopprijs, @voorraad , @aanbiedingscode, @producttype, @omschrijving)";

                //commando en prepared statement
                MySqlCommand cmd = new MySqlCommand(insertString, conn);
                MySqlParameter naamparameter = new MySqlParameter("@naam", MySqlDbType.String);
                MySqlParameter merkparameter = new MySqlParameter("@merk", MySqlDbType.String);
                MySqlParameter inkoopprijsparameter = new MySqlParameter("@inkoopprijs", MySqlDbType.Double);
                MySqlParameter verkoopprijsparameter = new MySqlParameter("@verkoopprijs", MySqlDbType.Double);
                MySqlParameter voorraadparameter = new MySqlParameter("@voorraad", MySqlDbType.Int32);
                MySqlParameter aanbiedingscodeparameter = new MySqlParameter("@aanbiedingscode", MySqlDbType.Int32);
                MySqlParameter producttypeparameter = new MySqlParameter("@producttype", MySqlDbType.String);
                MySqlParameter omschrijvingParameter = new MySqlParameter("@omschrijving", MySqlDbType.String);

                //set parameters naar view Waarden
                naamparameter.Value = product.productNaam;
                merkparameter.Value = product.productMerk;
                inkoopprijsparameter.Value = product.productInkoopprijs;
                verkoopprijsparameter.Value = product.productVerkoopprijs;
                voorraadparameter.Value = product.productVoorraad;
                aanbiedingscodeparameter.Value = product.productAanbiedingscode;
                producttypeparameter.Value = product.productType;
                omschrijvingParameter.Value = product.productOmschrijving;

                //voeg parameters toe
                cmd.Parameters.Add(naamparameter);
                cmd.Parameters.Add(merkparameter);
                cmd.Parameters.Add(inkoopprijsparameter);
                cmd.Parameters.Add(verkoopprijsparameter);
                cmd.Parameters.Add(voorraadparameter);
                cmd.Parameters.Add(aanbiedingscodeparameter);
                cmd.Parameters.Add(producttypeparameter);
                cmd.Parameters.Add(omschrijvingParameter);

                //prepare Execute Commit
                cmd.Prepare();
                cmd.ExecuteNonQuery();
            }
            catch (Exception e)
            {// is er een fout?
                Console.Write("Product niet toegevoegd: " + e);
                throw e;
            }
            finally
            {
                conn.Close();
            }
        }
 public WinkelwagenItem(Producten product, int kwantiteit)
 {
     this.product = product;
     this.kwantiteit = kwantiteit;
 }