コード例 #1
0
ファイル: FormInput.cs プロジェクト: miki010/Biblioteka
        private void tilePotvrdi_Click(object sender, EventArgs e)
        {
            ///
            bool postojiIme = false;

            if (myInterface.GetType() == typeof(PropertyLogin))
            {
                DataTable     dt     = new DataTable();
                SqlDataReader reader = SqlHelper.ExecuteReader(SqlHelper.GetConnectionString(), CommandType.Text,
                                                               myInterface.GetSelectQuery());
                dt.Load(reader);
                reader.Close();
                bool postoji = false;
                foreach (DataRow row in dt.Rows)
                {
                    string ime = row["KorisnickoIme"].ToString();
                    foreach (var item in flPanelControls.Controls)
                    {
                        if (item.GetType() == typeof(InputControl))
                        {
                            InputControl input = item as InputControl;
                            string       value = input.GetValue();
                            if (input.Name == "KorisnickoIme" && ime == value)
                            {
                                postoji = true;
                                break;
                            }
                        }
                    }
                }

                postojiIme = postoji;

                if (postoji)
                {
                    MessageBox.Show("Korisnicko ime vec postoji u bazi. Molimo Vas da ga promjenite!", "Obajvestenje");
                    return;
                }
                //else if (!postoji)
                //{
                //    return postojiIme;
                //}
            }


            /////


            DateTime[] datumi     = new DateTime[2]; //cuva datum Iznajmljivanja i datum Razduzivanja(u slucaju razduzivanja)
            int        j          = 0;               //brojac datuma^
            var        properties = myInterface.GetType().GetProperties();
            int        idClana    = 0;               //cuva vrijednost iz lookup kontrole pri provjere da li clan postoji u tabeli clanarina
            int        lol        = 0;

            if (state != StateEnum.Search)
            {
                foreach (var item in flPanelControls.Controls)
                {
                    if (item.GetType() == typeof(LookUpControl))
                    {
                        LookUpControl input = item as LookUpControl;
                        string        value = input.Key;

                        if (input.Name == "ClanID")
                        {
                            idClana = Convert.ToInt32(input.Key);
                        }

                        try
                        {
                            PropertyInfo property = properties.Where(x => input.Name == x.Name).FirstOrDefault();
                            //provjera unosa

                            if (property.GetCustomAttribute <RequiredAttribute>() != null && value == null)
                            {
                                input.txtID.Focus();

                                input.SetLabelObavezno(property.GetCustomAttribute <RequiredAttribute>().ErrorMessage);
                                popunjeno = false;
                                return;
                            }
                            else
                            {
                                popunjeno = true;
                                property.SetValue(myInterface, Convert.ChangeType(value, property.PropertyType));
                            }
                            #region Skidanje i Vracanje/Dodavanje na stanje
                            if (myInterface.GetType() == typeof(PropertyIznajmljivanje))
                            {
                                if (state == StateEnum.Create)
                                {
                                    stanje = "zaduzivanje";
                                    PropertyInfo propertyIznajmljivanje = properties.Where(x => input.Name == x.Name).FirstOrDefault();
                                    if (input.Name == "KnjigaID")
                                    {
                                        propertyIznajmljivanje.SetValue(iznajmljivanje, Convert.ChangeType(value, property.PropertyType));
                                    }
                                }
                                else if (state == StateEnum.Update)
                                {
                                    stanje = "vracanje";
                                    PropertyInfo propertyIznajmljivanje = properties.Where(x => input.Name == x.Name).FirstOrDefault();

                                    if (input.Name == "KnjigaID")
                                    {
                                        propertyIznajmljivanje.SetValue(iznajmljivanje, Convert.ChangeType(value, property.PropertyType));
                                    }
                                }
                            }
                            else if (myInterface.GetType() == typeof(PropertyIzdavacKnjiga))
                            {
                                stanje = "kpp";//kolicina++;
                                PropertyInfo propertyIzdavac = properties.Where(x => input.Name == x.Name).FirstOrDefault();
                                propertyIzdavac.SetValue(izdavacKnjiga, Convert.ChangeType(value, propertyIzdavac.PropertyType));
                            }
                            else if (myInterface.GetType() == typeof(PropertyZaposleni))
                            {
                                stanje = "pristupniPodaci";
                                PropertyInfo propertyLoginInfo = properties.Where(x => input.Name == x.Name).FirstOrDefault();
                                propertyLoginInfo.SetValue(propertyLogin, Convert.ChangeType(value, propertyLoginInfo.PropertyType));//XXXXXXXXXXXXXXXXXXXXXXX
                            }

                            #endregion
                        }
                        catch (Exception ex)
                        {
                            MessageBox.Show("Podatak uspješno sačuvan!");///////////////////////////////////////////////
                        }
                    }
                    else if (item.GetType() == typeof(InputControl))
                    {
                        InputControl input = item as InputControl;
                        string       value = input.GetValue();

                        if (input.Name == "Kolicina" && myInterface is PropertyIzdavacKnjiga)
                        {
                            try
                            {
                                lol = Convert.ToInt32(value);
                            }
                            catch (Exception)
                            {
                            }
                        }

                        string pom = value; //cuvam value(morao sam pjeske ovako jer je doslo do hiljadu konflikta)
                        try
                        {
                            PropertyInfo property = properties.Where(x => input.Name == x.Name).FirstOrDefault();

                            if (myInterface is PropertyLogin && state == StateEnum.Create && input.Name == "KorisnickoIme")
                            {
                                string normal            = value.Normalize(NormalizationForm.FormD);
                                var    withoutDiacritics = normal.Where(
                                    c => CharUnicodeInfo.GetUnicodeCategory(c) != UnicodeCategory.NonSpacingMark);
                                string final = new string(withoutDiacritics.ToArray());
                                if (final != value)
                                {
                                    MessageBox.Show("Korisničko ime prihvata samo standardnu kolaciju!", "Greška!");
                                    return;
                                }
                            }
                            if (input.Name.Contains("ID") || input.Name.Contains("Iznos") || input.Name.Contains("Kolicina") && input.Enabled == true)
                            {
                                if (!int.TryParse(input.GetValue(), out int number1))
                                {
                                    MessageBox.Show("Polje " + input.Name + " može biti samo cjelobrojni podatak!", "Greška");
                                    input.SetValue("");
                                    return;
                                }
                                else if (lol < 1 && myInterface is PropertyIzdavacKnjiga) //prilikom dodavanja knjige na stanje
                                {
                                    MessageBox.Show("Potrebno je dodati barem jednu knjigu!", "Greška");
                                    return;
                                }
                            }

                            if (input.Name == "Kolicina" && value == "" && myInterface is PropertyKnjiga)
                            {
                                value = "0";
                            }

                            //zadrzati provjera unosa da li je popunjeno obavezno polje
                            if (property.GetCustomAttribute <RequiredAttribute>() != null && value.Trim().Equals(""))
                            {
                                input.SetLblObavezno(property.GetCustomAttribute <RequiredAttribute>().ErrorMessage);
                                popunjeno = false;
                                return;
                            }
                            else
                            {
                                popunjeno = true;
                                property.SetValue(myInterface, Convert.ChangeType(value, property.PropertyType));
                            }

                            #region Skidanje i Vracanje/Dodavanje na stanje
                            //-**************************

                            if (myInterface.GetType() == typeof(PropertyIznajmljivanje))
                            {
                                if (state == StateEnum.Create)
                                {
                                    stanje = "zaduzivanje";
                                    PropertyInfo propertyIznajmljivanje = properties.Where(x => input.Name == x.Name).FirstOrDefault();
                                    if (input.Name == "KnjigaID")
                                    {
                                        propertyIznajmljivanje.SetValue(iznajmljivanje, Convert.ChangeType(value, property.PropertyType));
                                    }
                                }
                                else if (state == StateEnum.Update)
                                {
                                    stanje = "vracanje";
                                    PropertyInfo propertyIzdavacKnjiga = properties.Where(x => input.Name == x.Name).FirstOrDefault();

                                    if (input.Name == "KnjigaID")
                                    {
                                        propertyIzdavacKnjiga.SetValue(izdavacKnjiga, Convert.ChangeType(value, property.PropertyType));
                                    }
                                }
                            }
                            else if (myInterface.GetType() == typeof(PropertyIzdavacKnjiga))
                            {
                                stanje = "kpp";//kolicina++;
                                PropertyInfo propertyIzdavac = properties.Where(x => input.Name == x.Name).FirstOrDefault();
                                propertyIzdavac.SetValue(izdavacKnjiga, Convert.ChangeType(value, propertyIzdavac.PropertyType));
                            }
                            //************************************
                            #endregion
                        }
                        catch (Exception ex)
                        {
                            MessageBox.Show(ex.ToString());
                            //input.SetLblObavezno(property.GetCustomAttribute<RequiredAttribute>().ErrorMessage);
                            //return;
                        }
                    }

                    else if (item.GetType() == typeof(DateTimeControl))
                    {
                        DateTimeControl input    = item as DateTimeControl;
                        DateTime        value    = input.GetValue();
                        PropertyInfo    property = properties.Where(x => input.Name == x.Name).FirstOrDefault();
                        property.SetValue(myInterface, Convert.ChangeType(value, property.PropertyType));
                        if (myInterface is PropertyIznajmljivanje && state == StateEnum.Update)
                        {
                            datumi[j++] = input.GetValue(); //cuva datum Iznajmljivanja i Danasnji datum(datum Razduzivanja knjige)
                        }
                    }
                    else if (item.GetType() == typeof(UserControlRadio))
                    {
                        UserControlRadio input    = item as UserControlRadio;
                        string           value    = input.GetValue();
                        PropertyInfo     property = properties.Where(x => input.Name == x.Name).FirstOrDefault();
                        if (property.GetCustomAttribute <RequiredAttribute>() != null && value == "N")
                        {
                            input.SetLblObavezno(property.GetCustomAttribute <RequiredAttribute>().ErrorMessage);
                            popunjeno = false;
                            return;
                        }
                        else
                        {
                            popunjeno = true;
                            property.SetValue(myInterface, Convert.ChangeType(value, property.PropertyType));
                        }
                    }
                }
            }
            #region Pretraga
            else
            {
                for (int i = 0; i < flPanelControls.Controls.Count; i++)
                {
                    var item = flPanelControls.Controls[i];

                    if (item.GetType() == typeof(LookUpControl))
                    {
                        LookUpControl input = item as LookUpControl;
                        if (string.IsNullOrEmpty(input.Key))
                        {
                            continue;
                        }

                        string value = input.Key.Trim();
                        filterString.FStr += input.Name + " = " + value + " and ";
                    }
                    else if (item.GetType() == typeof(InputControl))
                    {
                        InputControl input = item as InputControl;
                        string       value = input.GetValue().Trim();
                        if (input.Name.Contains("ID") || input.Name.Contains("Iznos") || input.Name.Contains("Kolicina"))
                        {
                            if (string.IsNullOrEmpty(input.GetValue()))
                            {
                                continue;
                            }
                            else if (!int.TryParse(input.GetValue(), out int number1) && !double.TryParse(input.GetValue(), out double numer2))
                            {
                                MessageBox.Show("Polje " + input.Name + " može sadržati samo brojevne podatke!", "Greška");
                                input.SetValue("");
                                return;
                            }
                        }

                        if (!string.IsNullOrEmpty(input.GetValue()) && (input.Name.Contains("ID") || input.Name.Contains("Iznos") || input.Name.Contains("Kolicina")))
                        {
                            filterString.FStr += input.Name + " = " + value + " and ";
                        }
                        else if (!string.IsNullOrEmpty(input.GetValue()))
                        {
                            filterString.FStr += input.Name + " LIKE '%" + value + "%' and ";
                        }
                    }
                    else if (item.GetType() == typeof(DateRangeControl))
                    {
                        DateRangeControl input = item as DateRangeControl;
                        DateTime[]       dates = input.GetValue();
                        if (!input.GetChecked())
                        {
                            continue;
                        }
                        else if (dates[0].Date > dates[1].Date)
                        {
                            MessageBox.Show("Izaberite validan raspon datuma!", "Greška");
                            return;
                        }
                        filterString.FStr += input.Name + " >= '" + dates[0].Date.ToString() + "' and " + input.Name + " <= '" + dates[1].Date.ToString() + "' and ";
                    }
                    else if (item.GetType() == typeof(UserControlRadio))
                    {
                        UserControlRadio input = item as UserControlRadio;
                        if (input.GetValue() != "M" && input.GetValue() != "Ž")
                        {
                            continue;
                        }
                        string value = input.GetValue();
                        filterString.FStr += input.Name + " LIKE '" + value + "' and ";
                    }
                    else if (item is CheckBoxControl)
                    {
                        CheckBoxControl input = item as CheckBoxControl;
                        if (!input.cbRazduzeno.Enabled)
                        {
                            continue;
                        }
                        else
                        {
                            if (input.cbRazduzeno.Checked)
                            {
                                filterString.FStr += input.Name + " = 1 and ";
                            }
                            else
                            {
                                filterString.FStr += input.Name + " = 0 and ";
                            }
                        }
                    }
                }
                if (string.IsNullOrEmpty(filterString.FStr) || filterString.FStr.Length == 0)
                {
                    return;
                }
                filterString.FStr = filterString.FStr.Substring(0, filterString.FStr.Length - 5);
                // MessageBox.Show(filterString.FStr);
            }
            #endregion

            #region ProvjeraDaLiJePlacenaClanarina
            if (myInterface is PropertyIznajmljivanje)
            {
                if (state == StateEnum.Create) // provjerava da li je clanu istekla clanarina pri pokusaju iznajmljivanja knjige
                {
                    DataTable     dataTable1  = new DataTable();
                    SqlDataReader dataReader1 = SqlHelper.ExecuteReader(SqlHelper.GetConnectionString(), CommandType.Text,
                                                                        myInterface.GetProcedureKnjigaNaStanju(), myInterface.GetProcedureParameters().ToArray());
                    dataTable1.Load(dataReader1);
                    dataReader1.Close();

                    if (Convert.ToInt32(dataTable1.Rows[0][0]) < 1)
                    {
                        MessageBox.Show("Knjige trenutno nema na stanju!", "Greška");
                        return;
                    }

                    PropertyClanarina clanarina = new PropertyClanarina();

                    DataTable     tableClanarina      = new DataTable();
                    SqlDataReader readerNemaClanarine = SqlHelper.ExecuteReader(SqlHelper.GetConnectionString(), CommandType.Text,
                                                                                clanarina.GetSelectQuery());
                    tableClanarina.Load(readerNemaClanarine);
                    readerNemaClanarine.Close();

                    bool ima = false;
                    for (int i = 0; i < tableClanarina.Rows.Count; i++)
                    {
                        if ((int)(tableClanarina.Rows[i][1]) == idClana)
                        {
                            ima = true;
                        }
                    }
                    if (!ima)
                    {
                        MessageBox.Show("Korisnik nije uplatio članarinu, iznajmljivanje nije moguće!", "Greška!");
                        return;
                    }


                    DataTable     dt = new DataTable();
                    SqlDataReader readerIstekClanarine = SqlHelper.ExecuteReader(SqlHelper.GetConnectionString(), CommandType.Text,
                                                                                 myInterface.GetProcedureStatusClanarineZaClanID(), myInterface.GetProcedureParametersClanID().ToArray());
                    dt.Load(readerIstekClanarine);
                    readerIstekClanarine.Close();

                    DateTime datumIsteka = (DateTime)dt.Rows[0][1];
                    if (datumIsteka < DateTime.Now)
                    {
                        MessageBox.Show("Korisniku je istekla clanarina, iznajmljivanje nije moguce!", "Greška!");
                        return;
                    }
                    dt.Clear();

                    DataTable     dataTable  = new DataTable();
                    SqlDataReader dataReader = SqlHelper.ExecuteReader(SqlHelper.GetConnectionString(), CommandType.Text,
                                                                       myInterface.GetProcedureMozeLiSeDici(), myInterface.GetProcedureParametersClanID().ToArray());
                    dataTable.Load(dataReader);
                    dataReader.Close();

                    if (dataTable.Rows.Count > 1)
                    {
                        MessageBox.Show("Korisnik ima više od jedne nerazdužene knjige! Iznajmljivanje nije moguće.", "Greška!");
                        return;
                    }
                    dataTable.Clear();
                }
                else if (state == StateEnum.Update)
                {
                    if (datumi[1] <= datumi[0].AddDays(15))
                    {
                        MessageBox.Show("Knjiga uredno vracena");
                    }
                    else
                    {
                        MessageBox.Show((datumi[1] - datumi[0].AddDays(15)).Days.ToString());
                        MessageBox.Show(DatePart.TimeSpanToDateParts(datumi[0].AddDays(15), datumi[1]));
                    }
                }
            }
            #endregion

            #region Upis u bazu
            if (popunjeno)
            {
                if (state == StateEnum.Create)
                {
                    try
                    {
                        SqlHelper.ExecuteNonQuery(SqlHelper.GetConnectionString(), CommandType.Text,
                                                  myInterface.GetInsertQuery(), myInterface.GetInsertParameters().ToArray());
                    }
                    catch (Exception)
                    {
                        MessageBox.Show("U bazi već postoji podatak sa istim identifikatorom!");
                        return;
                    }

                    if (stanje == "zaduzivanje")
                    {
                        try
                        {
                            SqlHelper.ExecuteNonQuery(SqlHelper.GetConnectionString(), CommandType.Text,
                                                      iznajmljivanje.GetProcedureUpdateKnjiga(), iznajmljivanje.GetProcedureParameters().ToArray());
                        }
                        catch (Exception)
                        {
                            return;
                        }
                        //MessageBox.Show("Knjiga je skinuta sa stanja!", "Poruka", MessageBoxButtons.OK, MessageBoxIcon.Information);
                    }

                    if (stanje == "kpp")
                    {
                        try
                        {
                            SqlHelper.ExecuteNonQuery(SqlHelper.GetConnectionString(), CommandType.Text,
                                                      izdavacKnjiga.GetProcedureUpdateKnjiga(), izdavacKnjiga.GetProcedureParameters().ToArray());
                        }
                        catch (Exception)
                        {
                            //throw;
                            return;
                        }
                        //MessageBox.Show("Uvecano stanje knjiga!", "Poruka", MessageBoxButtons.OK, MessageBoxIcon.Information);
                    }

                    //MessageBox.Show("Podatak je sačuvan!", "Poruka", MessageBoxButtons.OK, MessageBoxIcon.Information);
                    if (stanje == "pristupniPodaci")
                    {
                        //popuniPristupnePodatke();
                        SqlHelper.ExecuteNonQuery(SqlHelper.GetConnectionString(), CommandType.Text,
                                                  propertyLogin.GetInsertQuery(), propertyLogin.GetLoginParameters().ToArray());
                    }

                    MessageBox.Show("Podatak je sacuvan!", "Poruka", MessageBoxButtons.OK, MessageBoxIcon.Information);
                }
                else if (state == StateEnum.Update)
                {
                    try
                    {
                        SqlHelper.ExecuteNonQuery(SqlHelper.GetConnectionString(), CommandType.Text,
                                                  myInterface.GetUpdateQuery(), myInterface.GetUpdateParameters().ToArray());
                    }
                    catch (Exception)
                    {
                        MessageBox.Show("U bazi već postoji podatak sa istim identifikatorom!");
                        return;
                    }

                    if (stanje == "vracanje")
                    {
                        try
                        {
                            SqlHelper.ExecuteNonQuery(SqlHelper.GetConnectionString(), CommandType.Text,
                                                      iznajmljivanje.GetProcedureSelectAllDetails(), iznajmljivanje.GetProcedureParameters().ToArray());
                        }
                        catch (Exception)
                        {
                            return;
                        }
                        //MessageBox.Show("Knjiga je vracena na stanje!", "Poruka", MessageBoxButtons.OK, MessageBoxIcon.Information);
                    }

                    MessageBox.Show("Podatak je izmjenjen!", "Poruka", MessageBoxButtons.OK, MessageBoxIcon.Information);
                }
                DialogResult = DialogResult.OK;
                if (myInterface is PropertyIznajmljivanje)
                {
                    ((PropertyIznajmljivanje)myInterface).Razduzeno = false;
                }
            }
            else
            {
                return;
            }
        }/// dodane dvije zagrade