示例#1
0
        private void DodavanjePolaznika_OnSelectionChanged(object sender, SelectionChangedEventArgs e)
        {
            Func <string, string[]> parser = s =>
            {
                string[] result         = new string[3];
                var      splittedString = s.Split(' ');
                if (splittedString.Length >= 3)
                {
                    result[2] = splittedString[splittedString.Length - 1].Substring(1, splittedString[splittedString.Length - 1].Length - 2);
                    result[1] = splittedString[splittedString.Length - 2];
                    result[0] = splittedString.Take(splittedString.Length - 2).Aggregate("", (acc, x) => acc + x);;
                }
                return(result);
            };

            if (flag)
            {
                using (ErsteModel ersteModel = new ErsteModel())
                {
                    if (e.AddedItems.Count > 0)
                    {
                        string   text     = e.AddedItems[0].ToString();
                        var      p        = parser(text);
                        string   ime      = p[0];
                        string   prezime  = p[1];
                        string   email    = p[2];
                        polaznik polaznik = ersteModel.polaznici.First(g => g.osoba.Ime == ime && g.osoba.Prezime == prezime && g.osoba.Email == email);
                        grupa    grupica  = ersteModel.grupe.Where(gr => gr.Id == grupa.Id).ToList().First();
                        grupica.polaznici.Add(polaznik);
                        polaznik.grupe.Add(grupica);
                        string odabraniNivo        = NivoKursa.Text;
                        string odabraniJezik       = jezikKursa.Text;
                        polaznik_na_cekanju p_na_c = polaznik.polaznik_na_cekanju;
                        kurs kurs_za_p_na_c        = p_na_c.kursevi.First(k => k.Nivo.Equals(odabraniNivo) &&
                                                                          k.jezik.Naziv.Equals(odabraniJezik));
                        kurs_za_p_na_c.polaznici_na_cekanju.Remove(p_na_c);
                        p_na_c.kursevi.Remove(kurs_za_p_na_c);
                        p_na_c.polaznik.polaznik_na_cekanju = null;
                        ersteModel.SaveChanges();
                        Init();
                        NazivGrupeCombo.Text = text;
                    }
                }
            }
        }
        private void Apply_Btn_Click(object sender, RoutedEventArgs e)
        {
            ResetBorderColors();

            string odabraniJezik = (string)chb_Jezik.SelectedItem;
            string odabraniNivo  = (string)chb_Nivo.SelectedItem;

            if (string.IsNullOrEmpty(textBox_Ime.Text) || string.IsNullOrEmpty(textBox_Prezime.Text) ||
                string.IsNullOrEmpty(textBox_Email.Text) || string.IsNullOrEmpty(textBox_BrojTelefona.Text) ||
                string.IsNullOrEmpty(odabraniJezik) || string.IsNullOrWhiteSpace(odabraniNivo))
            {
                MessageBox.Show("Sva polja za unos moraju biti popunjena.");
                var textBoxes = grid.Children.OfType <TextBox>();
                foreach (var t in textBoxes)
                {
                    if (String.IsNullOrEmpty(t.Text))
                    {
                        t.BorderBrush = Brushes.Red;
                    }
                }
                if (string.IsNullOrEmpty(odabraniJezik))
                {
                    chb_Jezik.BorderBrush = Brushes.Red;
                }
                else if (string.IsNullOrWhiteSpace(odabraniNivo))
                {
                    chb_Nivo.BorderBrush = Brushes.Red;
                }
                return;
            }

            if (!GrupeDataGrid.Items.IsEmpty && (GrupeDataGrid.SelectedItems == null || GrupeDataGrid.SelectedItems.Count == 0))
            {
                MessageBox.Show("Izaberite grupu iz tabele.");
                return;
            }

            var ersteModel = new ErsteModel();

            osoba o = new osoba();

            o.Ime          = textBox_Ime.Text;
            o.Prezime      = textBox_Prezime.Text;
            o.BrojTelefona = textBox_BrojTelefona.Text;
            o.Email        = textBox_Email.Text;
            polaznik p = new polaznik();

            p.osoba = o;

            if (!GrupeDataGrid.Items.IsEmpty)
            {
                GrupaKursZapis zapis      = (GrupaKursZapis)GrupeDataGrid.SelectedItem;
                grupa          zapisGrupa = (from g in ersteModel.grupe where g.Id == zapis.Grupa.Id select g).First();
                p.grupe.Add(zapisGrupa);
                zapisGrupa.polaznici.Add(p);

                MessageBox.Show("Uspjesno dodan polaznik.");
                ersteModel.SaveChanges();
                ersteModel.Dispose();
            }
            else
            {
                polaznik_na_cekanju pnc = new polaznik_na_cekanju();
                pnc.polaznik = p;
                pnc.Id       = p.Id;

                // RAZMISLI O OVOME, KAKO MAPIRATI POLAZNIKE PO KURSEVIMA RAZLICITIH DATUMA
                var kursLista = (from k in ersteModel.kursevi
                                 join j in ersteModel.jezici on k.JezikId equals j.Id
                                 where k.Nivo.Equals(odabraniNivo) && j.Naziv.Equals(odabraniJezik) &&
                                 k.DatumDo.CompareTo(DateTime.Now) > 0
                                 orderby k.DatumDo descending
                                 select k).ToList();

                kurs kurs = kursLista.First();
                IEnumerable <polaznik_na_cekanju> polazniciNaCekanjuZaTrazeniKurs = kursLista.SelectMany(k => k.polaznici_na_cekanju).ToList();
                //List<polaznik_na_cekanju> polazniciNaCekanjuZaTrazeniKurs = new List<polaznik_na_cekanju>();
                //foreach (kurs k in kursLista)
                //{
                //    polazniciNaCekanjuZaTrazeniKurs.AddRange(k.polaznici_na_cekanju);
                //}

                if (polazniciNaCekanjuZaTrazeniKurs.Count() >= 2)
                {
                    //nova grupa
                    grupa g = new grupa
                    {
                        KursId      = kurs.Id,
                        BrojClanova = 0,
                    };

                    ersteModel.SaveChanges();

                    //unos podataka o novoj grupi
                    UpisTerminaGrupe upisTermina = new UpisTerminaGrupe(g, ersteModel);
                    upisTermina.ShowDialog();
                    if (g.Naziv == null)
                    {
                        Task.Run(() => MessageBox.Show("Unesite naziv grupe."));
                        upisTermina = new UpisTerminaGrupe(g, ersteModel);
                        upisTermina.ShowDialog();
                    }

                    g = (from gr in ersteModel.grupe where gr.Id == g.Id select gr).First();

                    //dobijanje ref na polaznike i polaznika na cekanju
                    List <polaznik> polazniciNoveGrupe = new List <polaznik>();
                    polazniciNoveGrupe.Add(p);
                    foreach (polaznik_na_cekanju p_na_c in polazniciNaCekanjuZaTrazeniKurs)
                    {
                        polazniciNoveGrupe.Add(p_na_c.polaznik);
                    }

                    //brisanje korisnika na cekanju i veza s kursevima
                    foreach (polaznik_na_cekanju p_na_c in polazniciNaCekanjuZaTrazeniKurs)
                    {
                        kurs kurs_za_p_na_c = p_na_c.kursevi.First(k => k.Nivo.Equals(odabraniNivo) &&
                                                                   k.jezik.Naziv.Equals(odabraniJezik));
                        kurs_za_p_na_c.polaznici_na_cekanju.Remove(p_na_c);
                        p_na_c.kursevi.Remove(kurs_za_p_na_c);
                        p_na_c.polaznik.polaznik_na_cekanju = null;
                    }

                    //dodavanje polaznika u grupu
                    foreach (polaznik p_u_g in polazniciNoveGrupe)
                    {
                        p_u_g.grupe.Add(g);
                        g.polaznici.Add(p_u_g);
                    }

                    //dodavanje grupe u tabelu
                    //ersteModel.grupe.Add(g);

                    MessageBox.Show("Polaznik uspjesno ubacen u grupu.Polaznici na cekanju za odabrani kurs i nivo su takodje uspjesno ubaceni u grupu.");
                    ersteModel.SaveChanges();
                    ersteModel.Dispose();
                }
                else
                {
                    kurs.polaznici_na_cekanju.Add(pnc);
                    pnc.kursevi.Add(kurs);

                    MessageBox.Show("Polaznik dodat na listu cekanja za odabrani kurs i jezik.");
                    ersteModel.SaveChanges();
                    ersteModel.Dispose();
                }
            }
        }