private void btnObrisi_Click(object sender, EventArgs e)
        {
            Rezervacija izabranaRezervacija = (Rezervacija)lbListaRezervacija.SelectedItem;

            if (izabranaRezervacija == null)
            {
                MessageBox.Show("Izaberite rezervaciju koju želite da izbrišete!");
            }
            else
            {
                DialogResult dr = MessageBox.Show("Da li ste sigurni da želite da otkažete" +
                                                  " izabranu rezervaciju: " + izabranaRezervacija.ToString() + "?", "Otkazivanje rezervacije", MessageBoxButtons.YesNo);
                if (dr == DialogResult.Yes)
                {
                    listaRezervacija.Remove(izabranaRezervacija);

                    TimeSpan dani   = izabranaRezervacija.DatumRezDo - izabranaRezervacija.DatumRezOd;
                    int      brDana = (int)dani.Days + 1;

                    int cenaPoDanu = izabranaRezervacija.Cena / brDana;

                    Ponuda p = new Ponuda(izabranaRezervacija.IdAuta, izabranaRezervacija.DatumRezOd, izabranaRezervacija.DatumRezDo, cenaPoDanu);

                    listaPonuda.Add(p);

                    Administrator.SerijalizuPonude(listaPonuda);
                    Administrator.SerijalizuRezervacije(listaRezervacija);

                    listaRezervacija = Administrator.DeserijalizujRezervacije();
                    listaPonuda      = Administrator.DeserijalizujPonude();

                    lbListaRezervacija.Items.Clear();
                    foreach (Rezervacija r in listaRezervacija)
                    {
                        if (r.IdKupca == idUlogovanog)
                        {
                            if (!lbListaRezervacija.Items.Contains(r))
                            {
                                lbListaRezervacija.Items.Add(r);
                            }
                        }
                    }

                    MessageBox.Show("Rezervacija otkazana.");
                }
                else if (dr == DialogResult.No)
                {
                    MessageBox.Show("Rezervacija nije otkazana.");
                }
            }
        }
        private void cbRezervacijeZaAzuriranje_SelectedIndexChanged(object sender, EventArgs e)
        {
            izabranaRez = cbRezervacijeZaAzuriranje.SelectedItem as Rezervacija;

            txtAutoAzuiraranje.Text = izabranaRez.IdAuta.ToString();

            datePreuzimanjeAzuriranje.Value = izabranaRez.DatumRezOd.Date;
            dateVracanjeAzuriranje.Value    = izabranaRez.DatumRezDo.Date;

            TimeSpan dani   = dateVracanjeAzuriranje.Value - datePreuzimanjeAzuriranje.Value;
            int      brDana = (int)dani.Days;

            txtCenaPoDanuAzuriranje.Text = (izabranaRez.Cena / brDana).ToString();

            txtNovaUkupnaCenaAzuiranje.Text = izabranaRez.Cena.ToString();
        }
        private void btnOtkazi_Click(object sender, EventArgs e)
        {
            izabranaRez = cbRezervacijeZaBrisanje.SelectedItem as Rezervacija;

            if (izabranaRez == null)
            {
                MessageBox.Show("Izaberite rezervaciju koju želite da otkažete!");
            }
            else
            {
                DialogResult dr = MessageBox.Show("Da li ste sigurni da želite da otkažete" +
                                                  " izabranu rezervaciju: " + izabranaRez.ToString() + "?", "Otkazivanje rezervacije", MessageBoxButtons.YesNo);
                if (dr == DialogResult.Yes)
                {
                    listaRezervacija.Remove(izabranaRez);

                    TimeSpan dani   = izabranaRez.DatumRezDo - izabranaRez.DatumRezOd;
                    int      brDana = (int)dani.Days + 1;

                    int cenaPoDanu = izabranaRez.Cena / brDana;

                    Ponuda p = new Ponuda(izabranaRez.IdAuta, izabranaRez.DatumRezOd, izabranaRez.DatumRezDo, cenaPoDanu);

                    listaPonuda.Add(p);

                    Administrator.SerijalizuPonude(listaPonuda);
                    Administrator.SerijalizuRezervacije(listaRezervacija);

                    listaRezervacija = Administrator.DeserijalizujRezervacije();
                    listaPonuda      = Administrator.DeserijalizujPonude();

                    cbRezervacijeZaBrisanje.Items.Clear();
                    cbAutomobili.Items.Clear();
                    cbRezervacijeZaAzuriranje.Items.Clear();
                    cbRezervacijeZaBrisanje.Text   = "";
                    cbAutomobili.Text              = "";
                    cbRezervacijeZaAzuriranje.Text = "";

                    foreach (Rezervacija r in listaRezervacija)
                    {
                        if (r.IdKupca == izabraniKupac.IdKupca)
                        {
                            if (!cbRezervacijeZaBrisanje.Items.Contains(r))
                            {
                                cbRezervacijeZaBrisanje.Items.Add(r);
                            }
                            if (!cbRezervacijeZaAzuriranje.Items.Contains(r))
                            {
                                cbRezervacijeZaAzuriranje.Items.Add(r);
                            }
                        }
                    }

                    foreach (Automobil a in Administrator.DeserijalizujAute())
                    {
                        if (!cbAutomobili.Items.Contains(a))
                        {
                            cbAutomobili.Items.Add(a.IdAutomobila);
                        }
                    }

                    MessageBox.Show("Rezervacija otkazana.");
                }
                else if (dr == DialogResult.No)
                {
                    MessageBox.Show("Rezervacija nije otkazana.");
                }
            }
        }
        private void btnAzuriraj_Click(object sender, EventArgs e)
        {
            izabranaRez = cbRezervacijeZaAzuriranje.SelectedItem as Rezervacija;

            if (izabranaRez == null)
            {
                MessageBox.Show("Izaberite rezervaciju koju želite da ažurirate!");
            }
            else
            {
                int datumiSeNePoklapajuSaPostojecomPonudom = 0;
                int brojPonuda = 0;
                foreach (Ponuda ponuda in listaPonuda)
                {
                    if (txtAutoAzuiraranje.Text.Equals(ponuda.IdAuta.ToString()))
                    {
                        //da su oba datuma kasnije ili ranije od već postojeće ponude
                        //i da je datum OD ranije od datuma DO
                        if (
                            (datePreuzimanjeAzuriranje.Value.Date.CompareTo(ponuda.DatumOd.Date) > 0 &&
                             dateVracanjeAzuriranje.Value.Date.CompareTo(ponuda.DatumDo.Date) > 0 &&
                             datePreuzimanjeAzuriranje.Value.Date.CompareTo(ponuda.DatumDo.Date) > 0 &&
                             dateVracanjeAzuriranje.Value.Date.CompareTo(ponuda.DatumOd.Date) > 0)
                            ||
                            (datePreuzimanjeAzuriranje.Value.Date.CompareTo(ponuda.DatumOd.Date) < 0 &&
                             dateVracanjeAzuriranje.Value.Date.CompareTo(ponuda.DatumDo.Date) < 0 &&
                             datePreuzimanjeAzuriranje.Value.Date.CompareTo(ponuda.DatumDo.Date) < 0 &&
                             dateVracanjeAzuriranje.Value.Date.CompareTo(ponuda.DatumOd.Date) < 0)

                            && datePreuzimanjeAzuriranje.Value.Date.CompareTo(dateVracanjeAzuriranje.Value.Date) <= 0)
                        {
                            datumiSeNePoklapajuSaPostojecomPonudom++;
                        }
                        brojPonuda++;
                    }
                }

                if (datumiSeNePoklapajuSaPostojecomPonudom != brojPonuda)
                {
                    MessageBox.Show("Vaši datumi se poklapaju sa nekom od postojećih ponuda!");
                    return;
                }
                else
                {
                    listaRezervacija.Remove(izabranaRez);
                    izabranaRez = new Rezervacija(izabranaRez.IdAuta, izabranaRez.IdKupca, datePreuzimanjeAzuriranje.Value, dateVracanjeAzuriranje.Value, izabranaRez.Cena);
                    listaRezervacija.Add(izabranaRez);

                    Administrator.SerijalizuRezervacije(listaRezervacija);

                    MessageBox.Show("Uspešno ste ažurirali rezervaciju!\n" +
                                    "Termin: " + izabranaRez.DatumRezOd.Date.ToShortDateString()
                                    + "-" + izabranaRez.DatumRezDo.Date.ToShortDateString()
                                    + "\nCena: " + izabranaRez.Cena.ToString() + " din");

                    listaRezervacija = Administrator.DeserijalizujRezervacije();

                    cbRezervacijeZaBrisanje.Items.Clear();
                    cbAutomobili.Items.Clear();
                    cbRezervacijeZaAzuriranje.Items.Clear();
                    cbRezervacijeZaBrisanje.Text   = "";
                    cbAutomobili.Text              = "";
                    cbRezervacijeZaAzuriranje.Text = "";

                    foreach (Rezervacija r in listaRezervacija)
                    {
                        if (r.IdKupca == izabraniKupac.IdKupca)
                        {
                            if (!cbRezervacijeZaBrisanje.Items.Contains(r))
                            {
                                cbRezervacijeZaBrisanje.Items.Add(r);
                            }
                            if (!cbRezervacijeZaAzuriranje.Items.Contains(r))
                            {
                                cbRezervacijeZaAzuriranje.Items.Add(r);
                            }
                        }
                    }

                    foreach (Automobil a in Administrator.DeserijalizujAute())
                    {
                        if (!cbAutomobili.Items.Contains(a))
                        {
                            cbAutomobili.Items.Add(a.IdAutomobila);
                        }
                    }
                }
            }
        }
        private void btnDodajRez_Click(object sender, EventArgs e)
        {
            if (cbAutomobili.SelectedItem == null)
            {
                MessageBox.Show("Izaberite automobil!");
            }
            else
            {
                if (string.IsNullOrEmpty(txtCenaPoDanuDodavanje.Text))
                {
                    MessageBox.Show("Niste uneli cenu!");
                    return;
                }

                int IdIzabranogAuta = (int)cbAutomobili.SelectedItem;
                int datumiSeNePoklapajuSaPostojecomPonudom = 0;
                int brojPonudaZaTajAuto = 0;

                foreach (Ponuda ponuda in listaPonuda)
                {
                    if (ponuda.IdAuta == IdIzabranogAuta)
                    {
                        //da su oba datuma kasnije ili ranije od već postojeće ponude
                        //i da je datum OD ranije od datuma DO
                        if (
                            (datePreuzimanjeDodavanje.Value.Date.CompareTo(ponuda.DatumOd.Date) > 0 &&
                             dateVracanjeDodavanje.Value.Date.CompareTo(ponuda.DatumDo.Date) > 0 &&
                             datePreuzimanjeDodavanje.Value.Date.CompareTo(ponuda.DatumDo.Date) > 0 &&
                             dateVracanjeDodavanje.Value.Date.CompareTo(ponuda.DatumOd.Date) > 0)
                            ||
                            (datePreuzimanjeDodavanje.Value.Date.CompareTo(ponuda.DatumOd.Date) < 0 &&
                             dateVracanjeDodavanje.Value.Date.CompareTo(ponuda.DatumDo.Date) < 0 &&
                             datePreuzimanjeDodavanje.Value.Date.CompareTo(ponuda.DatumDo.Date) < 0 &&
                             dateVracanjeDodavanje.Value.Date.CompareTo(ponuda.DatumOd.Date) < 0)

                            && datePreuzimanjeDodavanje.Value.Date.CompareTo(dateVracanjeDodavanje.Value.Date) <= 0)
                        {
                            datumiSeNePoklapajuSaPostojecomPonudom++;
                        }
                        brojPonudaZaTajAuto++;
                    }
                }

                if (datumiSeNePoklapajuSaPostojecomPonudom != brojPonudaZaTajAuto)
                {
                    MessageBox.Show("Vaši datumi se poklapaju sa nekom od postojećih ponuda!");
                    return;
                }
                else
                {
                    TimeSpan dani   = dateVracanjeDodavanje.Value - datePreuzimanjeDodavanje.Value;
                    int      brDana = (int)dani.Days + 1;

                    int         ukupnaCena = brDana * int.Parse(txtCenaPoDanuDodavanje.Text);
                    Rezervacija nova       = new Rezervacija(IdIzabranogAuta, izabraniKupac.IdKupca, datePreuzimanjeDodavanje.Value, dateVracanjeDodavanje.Value, ukupnaCena);

                    listaRezervacija.Add(nova);

                    Administrator.SerijalizuRezervacije(listaRezervacija);

                    MessageBox.Show("Uspešno ste dodali rezervaciju!\n" +
                                    "Termin: " + nova.DatumRezOd.Date.ToShortDateString() + "-" + nova.DatumRezDo.Date.ToShortDateString()
                                    + "\nCena: " + nova.Cena.ToString() + " din");

                    listaRezervacija = Administrator.DeserijalizujRezervacije();

                    cbRezervacijeZaBrisanje.Items.Clear();
                    cbAutomobili.Items.Clear();
                    cbRezervacijeZaAzuriranje.Items.Clear();
                    cbRezervacijeZaBrisanje.Text   = "";
                    cbAutomobili.Text              = "";
                    cbRezervacijeZaAzuriranje.Text = "";

                    foreach (Rezervacija r in listaRezervacija)
                    {
                        if (r.IdKupca == izabraniKupac.IdKupca)
                        {
                            if (!cbRezervacijeZaBrisanje.Items.Contains(r))
                            {
                                cbRezervacijeZaBrisanje.Items.Add(r);
                            }
                            if (!cbRezervacijeZaAzuriranje.Items.Contains(r))
                            {
                                cbRezervacijeZaAzuriranje.Items.Add(r);
                            }
                        }
                    }

                    foreach (Automobil a in Administrator.DeserijalizujAute())
                    {
                        if (!cbAutomobili.Items.Contains(a))
                        {
                            cbAutomobili.Items.Add(a.IdAutomobila);
                        }
                    }
                }
            }
        }
        private void btnRezervisi_Click(object sender, EventArgs e)
        {
            if (dostupnePonude.Count <= 0)
            {
                MessageBox.Show("Prvo izaberite automobil!");
            }
            else
            {
                Rezervacija rezervacija       = null;
                Ponuda      rezervisanaPonuda = null;

                // >= 0 kasnije ili isti dan
                // <= 0 ranije ili isti dan
                foreach (Ponuda ponuda in dostupnePonude)
                {
                    if (datePreuzimanje.Value.Date.CompareTo(ponuda.DatumOd.Date) >= 0 &&
                        dateVracanje.Value.Date.CompareTo(ponuda.DatumDo.Date) <= 0 &&
                        datePreuzimanje.Value.Date.CompareTo(dateVracanje.Value.Date) <= 0)
                    {
                        rezervacija = new Rezervacija(idIzabranogAuta, idUlogovanog, datePreuzimanje.Value, dateVracanje.Value, ukupnaCena);
                        listaRezervacija.Add(rezervacija);

                        Administrator.SerijalizuRezervacije(listaRezervacija);

                        rezervisanaPonuda = ponuda;

                        MessageBox.Show("Uspešno ste rezervisali automobil u terminu: "
                                        + datePreuzimanje.Value.ToShortDateString() + "-"
                                        + dateVracanje.Value.ToShortDateString()
                                        + " po ceni od " + ukupnaCena + "din");
                    }
                }

                if (rezervacija == null)
                {
                    MessageBox.Show("Vaši datumi se ne poklapaju ni sa jednim dostupnim terminom!");
                    return;
                }

                if (rezervisanaPonuda != null)
                {
                    listaPonuda.Remove(rezervisanaPonuda);

                    if (rezervacija.DatumRezOd.Date.CompareTo(rezervisanaPonuda.DatumOd.Date) == 0 &&
                        rezervacija.DatumRezDo.Date.CompareTo(rezervisanaPonuda.DatumDo.Date) != 0)
                    {
                        Ponuda p = new Ponuda(idIzabranogAuta, rezervacija.DatumRezDo.Date.AddDays(1),
                                              rezervisanaPonuda.DatumDo.Date, rezervisanaPonuda.CenaPoDanu);

                        listaPonuda.Add(p);
                        Administrator.SerijalizuPonude(listaPonuda);
                        listaPonuda = Administrator.DeserijalizujPonude();
                    }

                    else if (rezervacija.DatumRezDo.Date.CompareTo(rezervisanaPonuda.DatumDo.Date) == 0 &&
                             rezervacija.DatumRezOd.Date.CompareTo(rezervisanaPonuda.DatumOd.Date) != 0)
                    {
                        Ponuda p = new Ponuda(idIzabranogAuta, rezervisanaPonuda.DatumOd.Date,
                                              rezervacija.DatumRezOd.Date.AddDays(-1), rezervisanaPonuda.CenaPoDanu);

                        listaPonuda.Add(p);
                        Administrator.SerijalizuPonude(listaPonuda);
                        listaPonuda = Administrator.DeserijalizujPonude();
                    }

                    else if (rezervacija.DatumRezOd.Date.CompareTo(rezervisanaPonuda.DatumOd.Date) > 0 && rezervacija.DatumRezDo.Date.CompareTo(rezervisanaPonuda.DatumDo) < 0)
                    {
                        Ponuda p1 = new Ponuda(idIzabranogAuta,
                                               rezervisanaPonuda.DatumOd.Date,
                                               rezervacija.DatumRezOd.Date.AddDays(-1),
                                               rezervisanaPonuda.CenaPoDanu);

                        Ponuda p2 = new Ponuda(idIzabranogAuta,
                                               rezervacija.DatumRezDo.Date.AddDays(1),
                                               rezervisanaPonuda.DatumDo.Date,
                                               rezervisanaPonuda.CenaPoDanu);

                        listaPonuda.Add(p1);
                        listaPonuda.Add(p2);
                        Administrator.SerijalizuPonude(listaPonuda);
                        listaPonuda = Administrator.DeserijalizujPonude();
                    }

                    Administrator.SerijalizuPonude(listaPonuda);
                    frmVaseRezervacije frmVaseRez = new frmVaseRezervacije(idUlogovanog);
                    frmVaseRez.MdiParent = this.MdiParent;
                    Hide();
                    frmVaseRez.Show();
                    Close();
                }
            }
        }