Example #1
0
        private void insertRezultatiSprava(DeoTakmicenjaKod deoTakKod, Takmicenje takmicenje)
        {
            TakmicarskaKategorija seniori = DAOFactoryFactory.DAOFactory.GetTakmicarskaKategorijaDAO()
                                            .FindByTakmicenje(takmicenje.Id)[0];
            RezultatskoTakmicenje rezTak = DAOFactoryFactory.DAOFactory.GetRezultatskoTakmicenjeDAO()
                                           .FindByKategorija(seniori)[0];
            IList <Ocena> ocene = DAOFactoryFactory.DAOFactory.GetOcenaDAO()
                                  .FindByDeoTakmicenja(takmicenje.Id, deoTakKod);

            if (deoTakKod == DeoTakmicenjaKod.Takmicenje1)
            {
                foreach (PoredakSprava p in rezTak.Takmicenje1.PoredakSprava)
                {
                    p.create(rezTak, ocene);
                }
                rezTak.Takmicenje1.PoredakPreskok.create(rezTak, ocene);
                rezTak.Takmicenje3.createUcesnici(rezTak.Takmicenje1,
                                                  rezTak.Propozicije.Tak1PreskokNaOsnovuObaPreskoka);

                GimnasticarUcesnikDAO gimUcesnikDAO = DAOFactoryFactory.DAOFactory.GetGimnasticarUcesnikDAO();
                if (gimnastika == Gimnastika.MSG)
                {
                    /*GimnasticarUcesnik KHOROKHORDINSergei = gimUcesnikDAO.FindByTakmicenjeTakBroj(takmicenje, 628);
                     * GimnasticarUcesnik WAMMESJeffrey = gimUcesnikDAO.FindByTakmicenjeTakBroj(takmicenje, 600);
                     *
                     * UcesnikTakmicenja3 ucesnikKHOROKHORDINSergei =
                     *  rezTak.Takmicenje3.getUcesnikKvalifikant(KHOROKHORDINSergei, Sprava.Vratilo);
                     *
                     * rezTak.Takmicenje3.removeUcesnik(ucesnikKHOROKHORDINSergei);
                     * rezTak.Takmicenje3.addUcesnik(
                     *  new UcesnikTakmicenja3(WAMMESJeffrey, Sprava.Vratilo, 8, 14.600f, 8,
                     *      KvalifikacioniStatus.Q));
                     *
                     * DAOFactoryFactory.DAOFactory.GetUcesnikTakmicenja3DAO().Delete(ucesnikKHOROKHORDINSergei);*/
                }
            }
            else
            {
                foreach (PoredakSprava p in rezTak.Takmicenje3.Poredak)
                {
                    p.create(rezTak, ocene);
                }
                rezTak.Takmicenje3.PoredakPreskok.create(rezTak, ocene);
            }

            if (deoTakKod == DeoTakmicenjaKod.Takmicenje1)
            {
                DAOFactoryFactory.DAOFactory.GetTakmicenje1DAO().Update(rezTak.Takmicenje1);
                DAOFactoryFactory.DAOFactory.GetTakmicenje3DAO().Update(rezTak.Takmicenje3);
            }
            else
            {
                DAOFactoryFactory.DAOFactory.GetTakmicenje3DAO().Update(rezTak.Takmicenje3);
            }
        }
Example #2
0
        private void insertRezultatiUkupno(DeoTakmicenjaKod deoTakKod, Takmicenje takmicenje)
        {
            TakmicarskaKategorija seniori = DAOFactoryFactory.DAOFactory.GetTakmicarskaKategorijaDAO()
                                            .FindByTakmicenje(takmicenje.Id)[0];
            RezultatskoTakmicenje rezTak = DAOFactoryFactory.DAOFactory.GetRezultatskoTakmicenjeDAO()
                                           .FindByKategorija(seniori)[0];
            IList <Ocena> ocene = DAOFactoryFactory.DAOFactory.GetOcenaDAO().FindByDeoTakmicenja(takmicenje.Id, deoTakKod);

            GimnasticarUcesnikDAO gimUcesnikDAO = DAOFactoryFactory.DAOFactory.GetGimnasticarUcesnikDAO();

            if (deoTakKod == DeoTakmicenjaKod.Takmicenje1)
            {
                rezTak.Takmicenje1.PoredakUkupno.create(rezTak, ocene);
                rezTak.Takmicenje2.createUcesnici(rezTak.Takmicenje1);
                if (gimnastika == Gimnastika.ZSG)
                {
                    /*GimnasticarUcesnik GORYUNOVAKristina = gimUcesnikDAO.FindByTakmicenjeTakBroj(takmicenje, 172);
                     * GimnasticarUcesnik AFANASEVAKsenia = gimUcesnikDAO.FindByTakmicenjeTakBroj(takmicenje, 170);
                     *
                     * UcesnikTakmicenja2 ucesnikGORYUNOVAKristina =
                     *  rezTak.Takmicenje2.getUcesnikKvalifikant(GORYUNOVAKristina);
                     *
                     * rezTak.Takmicenje2.removeUcesnik(ucesnikGORYUNOVAKristina);
                     * rezTak.Takmicenje2.addUcesnik(
                     *  new UcesnikTakmicenja2(AFANASEVAKsenia, 19, 54.575f, 20,
                     *      KvalifikacioniStatus.Q));
                     *
                     * // NOTE: Primetiti da moram eksplicitno da obrisem izbacenog
                     * // ucesnika, bez obzira sto je cascade="all-delete-orphan"
                     * // za asocijaciju UcesnikTakmicenja2. Za razliku od ovoga, u
                     * // klasi MainForm u metodu zavisiTakmicenje1 (koji pri kreiranju
                     * // novih ucesnika najpre obrise stare ucesnike) nije neophodno da
                     * // se brisu stari ucesnici, tj. bice automatski izbrisani.
                     * // Ispitati zasto se desava razlicito ponasanje
                     *
                     * DAOFactoryFactory.DAOFactory.GetUcesnikTakmicenja2DAO().Delete(ucesnikGORYUNOVAKristina);*/
                }
            }
            else
            {
                rezTak.Takmicenje2.Poredak.create(rezTak, ocene);
            }

            if (deoTakKod == DeoTakmicenjaKod.Takmicenje1)
            {
                DAOFactoryFactory.DAOFactory.GetTakmicenje1DAO().Update(rezTak.Takmicenje1);
                DAOFactoryFactory.DAOFactory.GetTakmicenje2DAO().Update(rezTak.Takmicenje2);
            }
            else
            {
                DAOFactoryFactory.DAOFactory.GetTakmicenje2DAO().Update(rezTak.Takmicenje2);
            }
        }
Example #3
0
        private void promeniKlubDrzava(bool prikaziKlub)
        {
            List <GimnasticarUcesnik> gimnasticari = new List <GimnasticarUcesnik>();

            foreach (RezultatUkupno r in dataGridViewUserControl2.getSelectedItems <RezultatUkupno>())
            {
                gimnasticari.Add(r.Gimnasticar);
            }
            if (gimnasticari.Count == 0)
            {
                return;
            }

            ISession session = null;

            try
            {
                using (session = NHibernateHelper.Instance.OpenSession())
                    using (session.BeginTransaction())
                    {
                        CurrentSessionContext.Bind(session);
                        GimnasticarUcesnikDAO gimnasticarUcesnikDAO = DAOFactoryFactory.DAOFactory.GetGimnasticarUcesnikDAO();
                        foreach (GimnasticarUcesnik g in gimnasticari)
                        {
                            g.NastupaZaDrzavu = !prikaziKlub;
                            gimnasticarUcesnikDAO.Update(g);
                        }

                        takmicenje = DAOFactoryFactory.DAOFactory.GetTakmicenjeDAO().FindById(takmicenje.Id);
                        takmicenje.LastModified = DateTime.Now;
                        session.Transaction.Commit();
                    }
            }
            catch (Exception ex)
            {
                if (session != null && session.Transaction != null && session.Transaction.IsActive)
                {
                    session.Transaction.Rollback();
                }
                MessageDialogs.showMessage(ex.Message, this.Text);
                Close();
                return;
            }
            finally
            {
                CurrentSessionContext.Unbind(NHibernateHelper.Instance.SessionFactory);
            }

            RezultatUkupno rez = dataGridViewUserControl2.getSelectedItem <RezultatUkupno>();

            dataGridViewUserControl2.refreshItems();
            dataGridViewUserControl2.setSelectedItem <RezultatUkupno>(rez);
        }
Example #4
0
        public static void updateViseKola(Takmicenje takmicenje)
        {
            // Ne apdejtujem kategorije i takmicenja. Dodajem nove gimnasticare i ekipe, i onda ponovo izracunavam
            // sve rezultate. Takodje, ne vodim racuna o tome da li je novi gimnsticar ucestvovao u razlicitim
            // kategorijama u prethodnim kolima (ako je i dodat neki nov gimnasticar, najverovatnije je dodat samo jedan,
            // i onda ce korisnik najverovatnije sam proveriti da li su kategorije u kojima je gimnasticar ucestvovao iste.)

            TakmicenjeDAO takmicenjeDAO = DAOFactoryFactory.DAOFactory.GetTakmicenjeDAO();

            takmicenjeDAO.Attach(takmicenje, false);

            List <Takmicenje> prethodnaKola = new List <Takmicenje>();

            prethodnaKola.Add(takmicenje.PrvoKolo);
            prethodnaKola.Add(takmicenje.DrugoKolo);
            if (takmicenje.TreceKolo != null)
            {
                prethodnaKola.Add(takmicenje.TreceKolo);
            }
            if (takmicenje.CetvrtoKolo != null)
            {
                prethodnaKola.Add(takmicenje.CetvrtoKolo);
            }

            RezultatskoTakmicenjeDAO rezTakDAO     = DAOFactoryFactory.DAOFactory.GetRezultatskoTakmicenjeDAO();
            GimnasticarUcesnikDAO    gimUcesnikDAO = DAOFactoryFactory.DAOFactory.GetGimnasticarUcesnikDAO();
            EkipaDAO ekipaDAO = DAOFactoryFactory.DAOFactory.GetEkipaDAO();

            IList <RezultatskoTakmicenje> rezTakmicenja = rezTakDAO.FindByTakmicenje(takmicenje.Id);

            List <IList <RezultatskoTakmicenje> > rezTakmicenjaPrethodnaKola = new List <IList <RezultatskoTakmicenje> >();

            foreach (Takmicenje prethKolo in prethodnaKola)
            {
                rezTakmicenjaPrethodnaKola.Add(rezTakDAO.FindByTakmicenje(prethKolo.Id));
            }

            IDictionary <GimnasticarUcesnik, GimnasticarUcesnik> gimUcesniciMap
                = new Dictionary <GimnasticarUcesnik, GimnasticarUcesnik>();

            foreach (GimnasticarUcesnik g in gimUcesnikDAO.FindByTakmicenje(takmicenje.Id))
            {
                gimUcesniciMap.Add(g, g);
            }

            foreach (RezultatskoTakmicenje rt in rezTakmicenja)
            {
                foreach (List <RezultatskoTakmicenje> rezTakmicenjaPrethKolo in rezTakmicenjaPrethodnaKola)
                {
                    RezultatskoTakmicenje rtFrom = Takmicenje.getRezTakmicenje(rezTakmicenjaPrethKolo, 0, rt.Kategorija);
                    foreach (GimnasticarUcesnik g in rtFrom.Takmicenje1.Gimnasticari)
                    {
                        if (rt.Takmicenje1.Gimnasticari.Contains(g))
                        {
                            continue;
                        }

                        GimnasticarUcesnik g2;
                        if (!gimUcesniciMap.ContainsKey(g))
                        {
                            g2 = GimnasticarUcesnikService.createGimnasticarUcesnik(g, rt.Kategorija);
                            gimUcesniciMap.Add(g, g2);
                            gimUcesnikDAO.Add(g2);
                        }
                        else
                        {
                            g2 = gimUcesniciMap[g];
                        }
                        rt.Takmicenje1.addGimnasticar(g2);
                    }
                }
            }

            foreach (RezultatskoTakmicenje rt in rezTakmicenja)
            {
                foreach (List <RezultatskoTakmicenje> rezTakmicenjaPrethKolo in rezTakmicenjaPrethodnaKola)
                {
                    RezultatskoTakmicenje rtFrom = Takmicenje.getRezTakmicenje(rezTakmicenjaPrethKolo, 0, rt.Kategorija);
                    foreach (Ekipa e in rtFrom.Takmicenje1.Ekipe)
                    {
                        if (rt.Takmicenje1.Ekipe.Contains(e))
                        {
                            continue;
                        }

                        Ekipa ekipa = new Ekipa();
                        ekipa.Naziv = e.Naziv;
                        ekipa.Kod   = e.Kod;
                        rt.Takmicenje1.addEkipa(ekipa, false);
                        ekipaDAO.Add(ekipa);
                    }
                }
            }

            takmicenje.kreirajRezultateViseKola(rezTakmicenja, rezTakmicenjaPrethodnaKola);

            foreach (List <RezultatskoTakmicenje> rezTakmicenjaPrethKolo in rezTakmicenjaPrethodnaKola)
            {
                foreach (RezultatskoTakmicenje rt in rezTakmicenjaPrethKolo)
                {
                    rezTakDAO.Evict(rt);
                }
            }

            foreach (RezultatskoTakmicenje rt in rezTakmicenja)
            {
                rezTakDAO.Update(rt);
            }
        }
Example #5
0
        public static void kreirajNaOsnovuViseKola(Takmicenje takmicenje,
                                                   IList <KeyValuePair <GimnasticarUcesnik, IList <Pair <int, TakmicarskaKategorija> > > > razlicitaKola)
        {
            TakmicenjeDAO takmicenjeDAO = DAOFactoryFactory.DAOFactory.GetTakmicenjeDAO();

            takmicenjeDAO.Attach(takmicenje, false);

            List <Takmicenje> prethodnaKola = new List <Takmicenje>();

            prethodnaKola.Add(takmicenje.PrvoKolo);
            prethodnaKola.Add(takmicenje.DrugoKolo);
            if (takmicenje.TreceKolo != null)
            {
                prethodnaKola.Add(takmicenje.TreceKolo);
            }
            if (takmicenje.CetvrtoKolo != null)
            {
                prethodnaKola.Add(takmicenje.CetvrtoKolo);
            }

            RezultatskoTakmicenjeDAO rezTakDAO = DAOFactoryFactory.DAOFactory.GetRezultatskoTakmicenjeDAO();

            List <IList <RezultatskoTakmicenje> > rezTakmicenjaPrethodnaKola = new List <IList <RezultatskoTakmicenje> >();

            foreach (Takmicenje prethKolo in prethodnaKola)
            {
                rezTakmicenjaPrethodnaKola.Add(rezTakDAO.FindByTakmicenje(prethKolo.Id));
            }

            takmicenje.Kategorije.Clear();
            foreach (RezultatskoTakmicenje rt in rezTakmicenjaPrethodnaKola[0])
            {
                // Implementiran je najjednostavniji slucaj, gde se u svakom od prethodnih kola gleda samo prvo
                // takmicenje, i uzimaju se samo one kategorije gde postoji poklapanje. U principu, mogla bi se
                // implementirati i slozenija varijanta gde bi se, u slucaju da ne postoji poklapanje medju kategorijama,
                // otvorio prozor gde bi mogle da se uparuju kategorije, ali onda bi morao da nekako pamtim
                // koja su uparivanja izabrana (da bi ih primenio kod apdejtovanja kada se npr. ocena iz nekog od
                // prethodnih kola promeni).
                if (rt.TakmicenjeDescription.RedBroj != 0)
                {
                    continue;
                }

                bool ok = true;
                foreach (List <RezultatskoTakmicenje> rezTakList in rezTakmicenjaPrethodnaKola)
                {
                    if (Takmicenje.getRezTakmicenje(rezTakList, 0, rt.Kategorija) == null)
                    {
                        ok = false;
                        break;
                    }
                }
                if (ok)
                {
                    takmicenje.addKategorija(new TakmicarskaKategorija(rt.Kategorija.Naziv));
                }
            }
            if (takmicenje.Kategorije.Count == 0)
            {
                throw new BusinessException("Kategorije iz prethodnih kola se ne poklapaju");
            }

            // prvi description je uvek kao naziv takmicenja.
            takmicenje.TakmicenjeDescriptions.Clear();
            RezultatskoTakmicenjeDescription desc = new RezultatskoTakmicenjeDescription();

            desc.Naziv       = takmicenje.Naziv;
            desc.Propozicije = new Propozicije(true, takmicenje.FinaleKupa, true);
            takmicenje.addTakmicenjeDescription(desc);

            // Takmicenje dodajem ovako rano zato sto se takmicenje.Id koristi dole u createGimnasticarUcesnik
            takmicenjeDAO.Add(takmicenje);

            IList <RezultatskoTakmicenje> rezTakmicenja = new List <RezultatskoTakmicenje>();

            foreach (TakmicarskaKategorija k in takmicenje.Kategorije)
            {
                Propozicije           p  = new Propozicije(true, takmicenje.FinaleKupa, true);
                RezultatskoTakmicenje rt = new RezultatskoTakmicenje(takmicenje, k, desc, p);
                rt.ImaEkipnoTakmicenje  = true;
                rt.KombinovanoEkipnoTak = false;
                rezTakmicenja.Add(rt);
            }

            GimnasticarUcesnikDAO gimUcesnikDAO = DAOFactoryFactory.DAOFactory.GetGimnasticarUcesnikDAO();
            EkipaDAO ekipaDAO = DAOFactoryFactory.DAOFactory.GetEkipaDAO();

            // Za svakog gimnasticara, zapamti u kojim kategorijama je ucestvovao u prethodnim kolima
            IDictionary <GimnasticarUcesnik, IList <Pair <int, TakmicarskaKategorija> > > mapaUcestvovanja
                = new Dictionary <GimnasticarUcesnik, IList <Pair <int, TakmicarskaKategorija> > >();

            IDictionary <TakmicarskaKategorija, RezultatskoTakmicenje> katToRezTakMap
                = new Dictionary <TakmicarskaKategorija, RezultatskoTakmicenje>();

            foreach (RezultatskoTakmicenje rt in rezTakmicenja)
            {
                katToRezTakMap.Add(rt.Kategorija, rt);
                for (int i = 0; i < rezTakmicenjaPrethodnaKola.Count; ++i)
                {
                    IList <RezultatskoTakmicenje> rezTakmicenjaPrethKolo = rezTakmicenjaPrethodnaKola[i];
                    RezultatskoTakmicenje         rtFrom = Takmicenje.getRezTakmicenje(rezTakmicenjaPrethKolo, 0, rt.Kategorija);

                    Pair <int, TakmicarskaKategorija> koloKatPair = new Pair <int, TakmicarskaKategorija>(i, rt.Kategorija);

                    foreach (GimnasticarUcesnik g in rtFrom.Takmicenje1.Gimnasticari)
                    {
                        if (!mapaUcestvovanja.ContainsKey(g))
                        {
                            // Koriscenje IDictionary obezbedjuje da je svaki gimnasticar dodat u samo jednu kategoriju.
                            GimnasticarUcesnik g2 = GimnasticarUcesnikService.createGimnasticarUcesnik(g, rt.Kategorija);
                            IList <Pair <int, TakmicarskaKategorija> > pairList = new List <Pair <int, TakmicarskaKategorija> >();
                            pairList.Add(koloKatPair);
                            mapaUcestvovanja.Add(g2, pairList);
                            gimUcesnikDAO.Add(g2);
                        }
                        else
                        {
                            mapaUcestvovanja[g].Add(koloKatPair);
                        }
                    }
                }
            }

            foreach (KeyValuePair <GimnasticarUcesnik, IList <Pair <int, TakmicarskaKategorija> > > entry in mapaUcestvovanja)
            {
                GimnasticarUcesnik    g       = entry.Key;
                TakmicarskaKategorija prevKat = null;
                bool ok = true;
                foreach (Pair <int, TakmicarskaKategorija> koloKatPair in entry.Value)
                {
                    TakmicarskaKategorija kat = koloKatPair.Second;
                    if (prevKat == null)
                    {
                        prevKat = kat;
                    }
                    else if (!kat.Equals(prevKat))
                    {
                        ok = false;
                    }

                    RezultatskoTakmicenje rt = katToRezTakMap[kat];
                    rt.Takmicenje1.addGimnasticar(g);
                }
                if (!ok)
                {
                    razlicitaKola.Add(entry);
                }
            }

            foreach (RezultatskoTakmicenje rt in rezTakmicenja)
            {
                foreach (List <RezultatskoTakmicenje> rezTakmicenjaPrethKolo in rezTakmicenjaPrethodnaKola)
                {
                    RezultatskoTakmicenje rtFrom = Takmicenje.getRezTakmicenje(rezTakmicenjaPrethKolo, 0, rt.Kategorija);
                    foreach (Ekipa e in rtFrom.Takmicenje1.Ekipe)
                    {
                        if (rt.Takmicenje1.Ekipe.Contains(e))
                        {
                            continue;
                        }

                        Ekipa ekipa = new Ekipa();
                        ekipa.Naziv = e.Naziv;
                        ekipa.Kod   = e.Kod;
                        rt.Takmicenje1.addEkipa(ekipa, false);
                        ekipaDAO.Add(ekipa);
                    }
                }
            }

            // TODO: Prebaci u domenske klase sto vise koda iz ove funkcije (isto i u funkciji updateViseKola).

            takmicenje.kreirajRezultateViseKola(rezTakmicenja, rezTakmicenjaPrethodnaKola);

            foreach (List <RezultatskoTakmicenje> rezTakmicenjaPrethKolo in rezTakmicenjaPrethodnaKola)
            {
                foreach (RezultatskoTakmicenje rt in rezTakmicenjaPrethKolo)
                {
                    rezTakDAO.Evict(rt);
                }
            }

            foreach (RezultatskoTakmicenje rt in rezTakmicenja)
            {
                rezTakDAO.Add(rt);
            }
        }
Example #6
0
        public static void createFromPrevTakmicenje(Takmicenje takmicenje, Takmicenje from,
                                                    IList <RezultatskoTakmicenje> rezTakmicenjaFrom,
                                                    IDictionary <int, List <GimnasticarUcesnik> > rezTakToGimnasticarUcesnikMap)
        {
            const int MAX = 1024;

            TakmicarskaKategorija[] kategorije = new TakmicarskaKategorija[MAX];
            for (int i = 0; i < MAX; ++i)
            {
                kategorije[i] = null;
            }
            foreach (RezultatskoTakmicenje rtFrom in rezTakmicenjaFrom)
            {
                if (kategorije[rtFrom.Kategorija.RedBroj] == null)
                {
                    kategorije[rtFrom.Kategorija.RedBroj] = new TakmicarskaKategorija(rtFrom.Kategorija.Naziv);
                }
            }

            PropozicijeDAO propozicijeDAO = DAOFactoryFactory.DAOFactory.GetPropozicijeDAO();

            foreach (RezultatskoTakmicenje rtFrom in rezTakmicenjaFrom)
            {
                propozicijeDAO.Attach(rtFrom.TakmicenjeDescription.Propozicije, false);
                propozicijeDAO.Attach(rtFrom.Propozicije, false);
            }

            RezultatskoTakmicenjeDescription[] descriptions = new RezultatskoTakmicenjeDescription[MAX];
            for (int i = 0; i < MAX; ++i)
            {
                descriptions[i] = null;
            }
            foreach (RezultatskoTakmicenje rtFrom in rezTakmicenjaFrom)
            {
                if (descriptions[rtFrom.TakmicenjeDescription.RedBroj] == null)
                {
                    RezultatskoTakmicenjeDescription desc = new RezultatskoTakmicenjeDescription();
                    desc.Naziv       = rtFrom.TakmicenjeDescription.Naziv;
                    desc.Propozicije = new Propozicije();

                    // Apdejtujem jedino propozicije za takmicenje 4 zbog kombinovanog ekipnog takmicenja.
                    // Ostale propozicije su na inicijalnim vrednostima.
                    rtFrom.TakmicenjeDescription.Propozicije.copyTakmicenje4To(desc.Propozicije);

                    descriptions[rtFrom.TakmicenjeDescription.RedBroj] = desc;
                }
            }

            takmicenje.Kategorije.Clear();
            for (int i = 0; i < MAX; ++i)
            {
                if (kategorije[i] != null)
                {
                    takmicenje.addKategorija(kategorije[i]);
                }
            }

            takmicenje.TakmicenjeDescriptions.Clear();
            bool first = true;

            for (int i = 0; i < MAX; ++i)
            {
                if (descriptions[i] != null)
                {
                    if (first)
                    {
                        // prvi description je uvek kao naziv takmicenja.
                        RezultatskoTakmicenjeDescription desc = new RezultatskoTakmicenjeDescription();
                        desc.Naziv       = takmicenje.Naziv;
                        desc.Propozicije = descriptions[i].Propozicije;  // klonirane propozicije
                        descriptions[i]  = desc;
                        first            = false;
                    }
                    takmicenje.addTakmicenjeDescription(descriptions[i]);
                }
            }

            IList <RezultatskoTakmicenje> rezTakmicenja = new List <RezultatskoTakmicenje>();

            foreach (RezultatskoTakmicenje rtFrom in rezTakmicenjaFrom)
            {
                RezultatskoTakmicenje rt = new RezultatskoTakmicenje(takmicenje,
                                                                     kategorije[rtFrom.Kategorija.RedBroj],
                                                                     descriptions[rtFrom.TakmicenjeDescription.RedBroj],
                                                                     new Propozicije());
                rtFrom.Propozicije.copyTakmicenje4To(rt.Propozicije);
                rezTakmicenja.Add(rt);
            }

            foreach (RezultatskoTakmicenjeDescription d in takmicenje.TakmicenjeDescriptions)
            {
                RezultatskoTakmicenje.updateImaEkipnoTakmicenje(rezTakmicenja, d);
            }

            TakmicenjeDAO takmicenjeDAO = DAOFactoryFactory.DAOFactory.GetTakmicenjeDAO();

            takmicenjeDAO.Add(takmicenje);

            IDictionary <int, GimnasticarUcesnik> gimnasticariMap = new Dictionary <int, GimnasticarUcesnik>();

            for (int i = 0; i < rezTakmicenja.Count; ++i)
            {
                RezultatskoTakmicenje rt     = rezTakmicenja[i];
                RezultatskoTakmicenje rtFrom = rezTakmicenjaFrom[i];
                foreach (GimnasticarUcesnik g in rezTakToGimnasticarUcesnikMap[rtFrom.Id])
                {
                    GimnasticarUcesnik g2;
                    if (!gimnasticariMap.ContainsKey(g.Id))
                    {
                        g2 = GimnasticarUcesnikService.createGimnasticarUcesnik(g,
                                                                                kategorije[g.TakmicarskaKategorija.RedBroj]);
                        gimnasticariMap[g.Id] = g2;
                    }
                    else
                    {
                        g2 = gimnasticariMap[g.Id];
                    }
                    rt.Takmicenje1.addGimnasticar(g2);
                    rt.Takmicenje1.updateRezultatiOnGimnasticarAdded(g2, new List <Ocena>(), rt);
                }
            }

            Takmicenje1DAO takmicenje1DAO = DAOFactoryFactory.DAOFactory.GetTakmicenje1DAO();

            for (int i = 0; i < rezTakmicenja.Count; ++i)
            {
                RezultatskoTakmicenje rt     = rezTakmicenja[i];
                RezultatskoTakmicenje rtFrom = rezTakmicenjaFrom[i];
                takmicenje1DAO.Attach(rtFrom.Takmicenje1, false);
                foreach (Ekipa e in rtFrom.Takmicenje1.Ekipe)
                {
                    Ekipa ekipa = new Ekipa();
                    ekipa.Naziv = e.Naziv;
                    ekipa.Kod   = e.Kod;

                    // Ne kopiram clanove ekipe zato sto dodavati clanove ekipe ima smisla jedino ako se znaju
                    // rezultati, a ovaj metod samo pravi pripremu takmicenja i nema nikakvih rezultata.

                    rt.Takmicenje1.addEkipa(ekipa, true);
                }
            }

            RezultatskoTakmicenjeDAO rezultatskoTakmicenjeDAO = DAOFactoryFactory.DAOFactory.GetRezultatskoTakmicenjeDAO();
            EkipaDAO ekipaDAO = DAOFactoryFactory.DAOFactory.GetEkipaDAO();

            foreach (RezultatskoTakmicenje rt in rezTakmicenja)
            {
                rezultatskoTakmicenjeDAO.Add(rt);
                foreach (Ekipa e in rt.Takmicenje1.Ekipe)
                {
                    ekipaDAO.Add(e);
                }
            }

            GimnasticarUcesnikDAO gimnasticarUcesnikDAO = DAOFactoryFactory.DAOFactory.GetGimnasticarUcesnikDAO();

            foreach (GimnasticarUcesnik g in gimnasticariMap.Values)
            {
                gimnasticarUcesnikDAO.Add(g);
            }
        }
Example #7
0
        public static void addTakmicenje(Takmicenje t, IList <KlubUcesnik> klubovi, IList <DrzavaUcesnik> drzave,
                                         IList <GimnasticarUcesnik> gimnasticari, IList <RezultatskoTakmicenje> rezTakmicenja,
                                         IList <SudijaUcesnik> sudije, IList <RasporedSudija> rasporediSudija, IList <RasporedNastupa> rasporediNastupa,
                                         IList <Ocena> ocene)
        {
            // dodaj takmicenje
            TakmicenjeDAO takmicenjeDAO = DAOFactoryFactory.DAOFactory.GetTakmicenjeDAO();

            takmicenjeDAO.Add(t);

            // kategorije i descriptions se dodaju pomocu transitive persistance

            // dodaj klubove ucesnike
            KlubUcesnikDAO klubUcesnikDAO = DAOFactoryFactory.DAOFactory.GetKlubUcesnikDAO();

            foreach (KlubUcesnik k in klubovi)
            {
                klubUcesnikDAO.Add(k);
            }

            // dodaj drzave ucesnike
            DrzavaUcesnikDAO drzavaUcesnikDAO = DAOFactoryFactory.DAOFactory.GetDrzavaUcesnikDAO();

            foreach (DrzavaUcesnik d in drzave)
            {
                drzavaUcesnikDAO.Add(d);
            }

            // dodaj gimnasticare ucesnike
            GimnasticarUcesnikDAO gimnasticarUcesnikDAO = DAOFactoryFactory.DAOFactory.GetGimnasticarUcesnikDAO();

            foreach (GimnasticarUcesnik g in gimnasticari)
            {
                gimnasticarUcesnikDAO.Add(g);
            }

            // dodaj rezultatska takmicenja i ekipe
            RezultatskoTakmicenjeDAO rezultatskoTakmicenjeDAO = DAOFactoryFactory.DAOFactory.GetRezultatskoTakmicenjeDAO();
            EkipaDAO ekipaDAO = DAOFactoryFactory.DAOFactory.GetEkipaDAO();

            foreach (RezultatskoTakmicenje r in rezTakmicenja)
            {
                foreach (Ekipa e in r.Takmicenje1.Ekipe)
                {
                    ekipaDAO.Add(e);
                }
                rezultatskoTakmicenjeDAO.Add(r);
            }

            // dodaj sudije ucesnike
            if (sudije != null)
            {
                SudijaUcesnikDAO sudijaUcesnikDAO = DAOFactoryFactory.DAOFactory.GetSudijaUcesnikDAO();
                foreach (SudijaUcesnik s in sudije)
                {
                    sudijaUcesnikDAO.Add(s);
                }
            }

            // dodaj rasporede sudija
            if (rasporediSudija != null)
            {
                RasporedSudijaDAO rasporedSudijaDAO = DAOFactoryFactory.DAOFactory.GetRasporedSudijaDAO();
                foreach (RasporedSudija r in rasporediSudija)
                {
                    rasporedSudijaDAO.Add(r);
                }
            }

            // dodaj rasporede nastupa
            if (rasporediNastupa != null)
            {
                RasporedNastupaDAO rasporedNastupaDAO = DAOFactoryFactory.DAOFactory.GetRasporedNastupaDAO();
                foreach (RasporedNastupa r in rasporediNastupa)
                {
                    rasporedNastupaDAO.Add(r);
                }
            }

            // dodaj ocene
            OcenaDAO ocenaDAO = DAOFactoryFactory.DAOFactory.GetOcenaDAO();

            foreach (Ocena o in ocene)
            {
                ocenaDAO.Add(o);
            }
        }
Example #8
0
        public static void deleteTakmicenje(Takmicenje t, bool proveriFinala)
        {
            TakmicenjeDAO takmicenjeDAO = DAOFactoryFactory.DAOFactory.GetTakmicenjeDAO();

            if (proveriFinala)
            {
                // Proveri da li se neko takmicenje (finale kupa ili zbir vise kola) referise na ovo takmicenje.
                IList <Takmicenje> finala = takmicenjeDAO.FindFinala(t);
                if (finala.Count > 0)
                {
                    string msg = "Takmicenje \"" + t.ToString() + "\" je nemoguce izbrisati jer je ono jedno od kola za " +
                                 "sledeca finala:\n\n";
                    foreach (Takmicenje f in finala)
                    {
                        msg += f.ToString() + "\n";
                    }
                    throw new BusinessException(msg);
                }
            }

            // brisi ocene
            OcenaDAO ocenaDAO = DAOFactoryFactory.DAOFactory.GetOcenaDAO();

            foreach (Ocena o in ocenaDAO.FindByTakmicenje(t.Id))
            {
                ocenaDAO.Delete(o);
            }

            // brisi rasporede nastupa
            RasporedNastupaDAO rasporedNastupaDAO = DAOFactoryFactory.DAOFactory.GetRasporedNastupaDAO();

            foreach (RasporedNastupa r in rasporedNastupaDAO.FindByTakmicenje(t.Id))
            {
                rasporedNastupaDAO.Delete(r);
            }

            // brisi rasporede sudija
            RasporedSudijaDAO rasporedSudijaDAO = DAOFactoryFactory.DAOFactory.GetRasporedSudijaDAO();

            foreach (RasporedSudija r in rasporedSudijaDAO.FindByTakmicenje(t.Id))
            {
                rasporedSudijaDAO.Delete(r);
            }

            // brisi sudije ucesnike
            SudijaUcesnikDAO sudijaUcesnikDAO = DAOFactoryFactory.DAOFactory.GetSudijaUcesnikDAO();

            foreach (SudijaUcesnik s in sudijaUcesnikDAO.FindByTakmicenje(t.Id))
            {
                sudijaUcesnikDAO.Delete(s);
            }

            // brisi rezultatska takmicenja i ekipe
            RezultatskoTakmicenjeDAO rezultatskoTakmicenjeDAO = DAOFactoryFactory.DAOFactory.GetRezultatskoTakmicenjeDAO();
            EkipaDAO ekipaDAO = DAOFactoryFactory.DAOFactory.GetEkipaDAO();

            foreach (RezultatskoTakmicenje r in rezultatskoTakmicenjeDAO.FindByTakmicenje(t.Id))
            {
                foreach (Ekipa e in r.Takmicenje1.Ekipe)
                {
                    ekipaDAO.Delete(e);
                }
                rezultatskoTakmicenjeDAO.Delete(r);
            }

            // brisi gimnasticare ucesnike
            GimnasticarUcesnikDAO gimnasticarUcesnikDAO = DAOFactoryFactory.DAOFactory.GetGimnasticarUcesnikDAO();

            foreach (GimnasticarUcesnik g in gimnasticarUcesnikDAO.FindByTakmicenje(t.Id))
            {
                gimnasticarUcesnikDAO.Delete(g);
            }

            // brisi klubove ucesnike
            KlubUcesnikDAO klubUcesnikDAO = DAOFactoryFactory.DAOFactory.GetKlubUcesnikDAO();

            foreach (KlubUcesnik k in klubUcesnikDAO.FindByTakmicenje(t.Id))
            {
                klubUcesnikDAO.Delete(k);
            }

            // brisi drzave ucesnike
            DrzavaUcesnikDAO drzavaUcesnikDAO = DAOFactoryFactory.DAOFactory.GetDrzavaUcesnikDAO();

            foreach (DrzavaUcesnik d in drzavaUcesnikDAO.FindByTakmicenje(t.Id))
            {
                drzavaUcesnikDAO.Delete(d);
            }

            // brisi kategorije
            TakmicarskaKategorijaDAO takmicarskaKategorijaDAO = DAOFactoryFactory.DAOFactory.GetTakmicarskaKategorijaDAO();

            foreach (TakmicarskaKategorija k in takmicarskaKategorijaDAO.FindByTakmicenje(t.Id))
            {
                takmicarskaKategorijaDAO.Delete(k);
            }

            // brisi descriptions
            RezultatskoTakmicenjeDescriptionDAO rezTakDescDAO = DAOFactoryFactory.DAOFactory.GetRezultatskoTakmicenjeDescriptionDAO();

            foreach (RezultatskoTakmicenjeDescription d in rezTakDescDAO.FindByTakmicenje(t.Id))
            {
                rezTakDescDAO.Delete(d);
            }

            // brisi takmicenje
            takmicenjeDAO.Delete(t);
        }
Example #9
0
        private void btnDelete_Click(object sender, EventArgs e)
        {
            IList <Ocena> selItems = getDataGridViewUserControl()
                                     .getSelectedItems <Ocena>();

            if (selItems.Count != 1)
            {
                return;
            }

            Ocena  ocena = selItems[0];
            string msg   = String.Format(
                "Da li zelite da izbrisete ocenu za gimnasticara '{0}', za spravu '{1}'?",
                ocena.Gimnasticar.ImeSrednjeImePrezime, Sprave.toString(ActiveSprava));

            if (!MessageDialogs.queryConfirmation(msg, this.Text))
            {
                return;
            }

            Cursor.Current = Cursors.WaitCursor;
            Cursor.Show();
            ISession session = null;

            try
            {
                using (session = NHibernateHelper.Instance.OpenSession())
                    using (session.BeginTransaction())
                    {
                        CurrentSessionContext.Bind(session);

                        DAOFactoryFactory.DAOFactory.GetOcenaDAO().Delete(ocena);

                        RezultatskoTakmicenjeDAO rezTakDAO = DAOFactoryFactory.DAOFactory.GetRezultatskoTakmicenjeDAO();
                        Takmicenje1DAO           tak1DAO   = DAOFactoryFactory.DAOFactory.GetTakmicenje1DAO();
                        Takmicenje2DAO           tak2DAO   = DAOFactoryFactory.DAOFactory.GetTakmicenje2DAO();
                        Takmicenje3DAO           tak3DAO   = DAOFactoryFactory.DAOFactory.GetTakmicenje3DAO();
                        Takmicenje4DAO           tak4DAO   = DAOFactoryFactory.DAOFactory.GetTakmicenje4DAO();

                        IList <RezultatskoTakmicenje> rezTakmicenja = rezTakDAO.FindByGimnasticar(ocena.Gimnasticar);
                        foreach (RezultatskoTakmicenje rt in rezTakmicenja)
                        {
                            if (deoTakKod == DeoTakmicenjaKod.Takmicenje1)
                            {
                                rt.Takmicenje1.updateRezultatiOnOcenaDeleted(ocena, rt);
                                tak1DAO.Update(rt.Takmicenje1);
                            }
                            else if (deoTakKod == DeoTakmicenjaKod.Takmicenje2 && rt.odvojenoTak2())
                            {
                                rt.Takmicenje2.ocenaDeleted(ocena, rt);
                                tak2DAO.Update(rt.Takmicenje2);
                            }
                            else if (deoTakKod == DeoTakmicenjaKod.Takmicenje3 && rt.odvojenoTak3())
                            {
                                rt.Takmicenje3.ocenaDeleted(ocena, rt);
                                tak3DAO.Update(rt.Takmicenje3);
                            }
                        }

                        IList <RezultatskoTakmicenje> ekipnaRezTakmicenja = rezTakDAO.FindEkipnaTakmicenja(takmicenje.Id);
                        foreach (RezultatskoTakmicenje rt in ekipnaRezTakmicenja)
                        {
                            Ekipa ekipa = rt.findEkipa(ocena.Gimnasticar, deoTakKod);
                            if (ekipa == null)
                            {
                                continue;
                            }
                            List <RezultatUkupno> rezultati = RezultatskoTakmicenjeService
                                                              .findRezultatiUkupnoForEkipa(takmicenje.Id, ekipa);
                            if (deoTakKod == DeoTakmicenjaKod.Takmicenje1)
                            {
                                rt.Takmicenje1.updateRezultatEkipe(ekipa, rt, rezultati);
                                tak1DAO.Update(rt.Takmicenje1);
                            }
                            else if (deoTakKod == DeoTakmicenjaKod.Takmicenje4 && rt.odvojenoTak4())
                            {
                                rt.Takmicenje4.updateRezultatEkipe(ekipa, rt, rezultati);
                                tak4DAO.Update(rt.Takmicenje4);
                            }
                        }

                        GimnasticarUcesnikDAO gimUcesnikDAO = DAOFactoryFactory.DAOFactory.GetGimnasticarUcesnikDAO();
                        UcesnikTakmicenja2DAO ucTak2DAO     = DAOFactoryFactory.DAOFactory.GetUcesnikTakmicenja2DAO();
                        UcesnikTakmicenja3DAO ucTak3DAO     = DAOFactoryFactory.DAOFactory.GetUcesnikTakmicenja3DAO();

                        ISet <RezultatskoTakmicenje> rezTakSet = new HashSet <RezultatskoTakmicenje>();
                        foreach (RezultatskoTakmicenje rt in rezTakmicenja)
                        {
                            rezTakSet.Add(rt);
                        }
                        foreach (RezultatskoTakmicenje rt in ekipnaRezTakmicenja)
                        {
                            rezTakSet.Add(rt);
                        }

                        foreach (RezultatskoTakmicenje rezTak in rezTakSet)
                        {
                            if (deoTakKod == DeoTakmicenjaKod.Takmicenje1)
                            {
                                foreach (GimnasticarUcesnik g in rezTak.Takmicenje1.Gimnasticari)
                                {
                                    if (gimUcesnikDAO.Contains(g))
                                    {
                                        gimUcesnikDAO.Evict(g);
                                    }
                                }
                            }
                            else if (deoTakKod == DeoTakmicenjaKod.Takmicenje2)
                            {
                                foreach (UcesnikTakmicenja2 u in rezTak.Takmicenje2.Ucesnici)
                                {
                                    if (gimUcesnikDAO.Contains(u.Gimnasticar))
                                    {
                                        gimUcesnikDAO.Evict(u.Gimnasticar);
                                    }
                                    ucTak2DAO.Evict(u);
                                }
                            }
                            else if (deoTakKod == DeoTakmicenjaKod.Takmicenje3)
                            {
                                foreach (UcesnikTakmicenja3 u in rezTak.Takmicenje3.Ucesnici)
                                {
                                    if (gimUcesnikDAO.Contains(u.Gimnasticar))
                                    {
                                        gimUcesnikDAO.Evict(u.Gimnasticar);
                                    }
                                    ucTak3DAO.Evict(u);
                                }
                            }
                        }

                        // NOTE: Ovde nisam mogao da koristim takmicenjeDAO.Update(takmicenje) jer mi prijavljuje gresku
                        // da u sesiji vec postoji drugi objekat sa istim Id-om (verovatno je dobavljen u nekom od metoda
                        // gore). Zato uvek koristim takmicenjeDAO.FindById(takmicenje.Id) kada apdejtujem LastModified da
                        // bih bio siguran da mi se ovakve greske nece pojavljivati.
                        takmicenje = DAOFactoryFactory.DAOFactory.GetTakmicenjeDAO().FindById(takmicenje.Id);
                        takmicenje.LastModified = DateTime.Now;
                        session.Transaction.Commit();
                    }
            }
            catch (Exception ex)
            {
                if (session != null && session.Transaction != null && session.Transaction.IsActive)
                {
                    session.Transaction.Rollback();
                }
                MessageDialogs.showError(ex.Message, this.Text);
                Close();
                return;
            }
            finally
            {
                Cursor.Hide();
                Cursor.Current = Cursors.Arrow;
                CurrentSessionContext.Unbind(NHibernateHelper.Instance.SessionFactory);
            }

            List <Ocena> activeOcene = ocene[calculateOceneKey(ActiveKategorija, ActiveSprava)];

            activeOcene.Remove(ocena);

            setOcene(activeOcene);
        }
        private void deleteGimnasticar(GimnasticarUcesnik g)
        {
            Cursor.Current = Cursors.WaitCursor;
            Cursor.Show();
            ISession session = null;

            try
            {
                using (session = NHibernateHelper.Instance.OpenSession())
                    using (session.BeginTransaction())
                    {
                        CurrentSessionContext.Bind(session);

                        GimnasticarUcesnikDAO gimUcesnikDAO = DAOFactoryFactory.DAOFactory.GetGimnasticarUcesnikDAO();
                        gimUcesnikDAO.Attach(g, false);

                        StartListaNaSpraviDAO startListaDAO = DAOFactoryFactory.DAOFactory.GetStartListaNaSpraviDAO();
                        EkipaDAO ekipaDAO = DAOFactoryFactory.DAOFactory.GetEkipaDAO();
                        RezultatskoTakmicenjeDAO rezTakDAO = DAOFactoryFactory.DAOFactory.GetRezultatskoTakmicenjeDAO();
                        Takmicenje1DAO           tak1DAO   = DAOFactoryFactory.DAOFactory.GetTakmicenje1DAO();
                        Takmicenje3DAO           tak3DAO   = DAOFactoryFactory.DAOFactory.GetTakmicenje3DAO();
                        OcenaDAO ocenaDAO = DAOFactoryFactory.DAOFactory.GetOcenaDAO();

                        // Izbaci gimnasticara iz start lista
                        foreach (StartListaNaSpravi s in startListaDAO.FindByGimnasticar(g))
                        {
                            s.removeNastup(g);
                            startListaDAO.Update(s);
                        }

                        // Izbaci gimnasticara iz ekipa
                        foreach (Ekipa e in ekipaDAO.FindByGimnasticar(g))
                        {
                            e.removeGimnasticar(g);
                            ekipaDAO.Update(e);

                            RezultatskoTakmicenje rt = rezTakDAO.FindByEkipa(e);
                            rt.Takmicenje1.updateRezultatiOnEkipaUpdated(e, rt,
                                                                         RezultatskoTakmicenjeService.findRezultatiUkupnoForEkipa(rt.Takmicenje.Id, e));
                            tak1DAO.Update(rt.Takmicenje1);
                        }

                        IList <Ocena> ocene1 = ocenaDAO.FindByGimnasticar(g, DeoTakmicenjaKod.Takmicenje1);
                        IList <Ocena> ocene3 = ocenaDAO.FindByGimnasticar(g, DeoTakmicenjaKod.Takmicenje3);

                        // Izbaci gimnasticara iz takmicenja 1
                        foreach (RezultatskoTakmicenje rt in rezTakDAO.FindByGimnasticar(g))
                        {
                            rt.Takmicenje1.removeGimnasticar(g);

                            // Izbaci gimnasticara iz svih poredaka na kojima je vezbao.
                            rt.Takmicenje1.updateRezultatiOnGimnasticarDeleted(g, ocene1, rt);

                            tak1DAO.Update(rt.Takmicenje1);
                            foreach (GimnasticarUcesnik g2 in rt.Takmicenje1.Gimnasticari)
                            {
                                gimUcesnikDAO.Evict(g2);
                            }
                        }

                        // Izbaci gimnasticara iz takmicenja 3
                        foreach (RezultatskoTakmicenje rt in rezTakDAO.FindByUcesnikTak3(g))
                        {
                            rt.Takmicenje3.clearUcesnik(g);
                            foreach (PoredakSprava p in rt.Takmicenje3.Poredak)
                            {
                                p.deleteGimnasticar(g, rt);
                            }
                            rt.Takmicenje3.PoredakPreskok.deleteGimnasticar(g, rt);

                            tak3DAO.Update(rt.Takmicenje3);
                        }

                        foreach (Ocena o in ocene1)
                        {
                            ocenaDAO.Delete(o);
                        }
                        foreach (Ocena o in ocene3)
                        {
                            ocenaDAO.Delete(o);
                        }

                        // TODO: Brisi takmicara iz takmicenja II i IV.

                        gimUcesnikDAO.Delete(g);

                        takmicenje = DAOFactoryFactory.DAOFactory.GetTakmicenjeDAO().FindById(takmicenje.Id);
                        takmicenje.LastModified = DateTime.Now;
                        session.Transaction.Commit();
                    }
            }
            catch (Exception)
            {
                if (session != null && session.Transaction != null && session.Transaction.IsActive)
                {
                    session.Transaction.Rollback();
                }
                throw;
            }
            finally
            {
                Cursor.Hide();
                Cursor.Current = Cursors.Arrow;
                CurrentSessionContext.Unbind(NHibernateHelper.Instance.SessionFactory);
            }
        }
        private void addCmd()
        {
            NacinIzboraGimnasticaraForm form2 = new NacinIzboraGimnasticaraForm();

            if (form2.ShowDialog() != DialogResult.OK)
            {
                return;
            }

            List <GimnasticarUcesnik> selGimnasticari = new List <GimnasticarUcesnik>();

            DialogResult dlgResult = DialogResult.None;
            SelectGimnasticariPrethTakmForm form3 = null;
            SelectGimnasticarForm           form  = null;

            if (form2.IzPrethodnogTakmicenja)
            {
                try
                {
                    form3     = new SelectGimnasticariPrethTakmForm(takmicenje.Gimnastika, false);
                    dlgResult = form3.ShowDialog();
                }
                catch (InfrastructureException ex)
                {
                    MessageDialogs.showError(ex.Message, this.Text);
                }
                if (dlgResult != DialogResult.OK || form3.SelectedGimnasticari.Count == 0)
                {
                    return;
                }
            }
            else
            {
                try
                {
                    form      = new SelectGimnasticarForm(takmicenje.Gimnastika);
                    dlgResult = form.ShowDialog();
                }
                catch (InfrastructureException ex)
                {
                    MessageDialogs.showError(ex.Message, this.Text);
                }

                if (dlgResult != DialogResult.OK || form.SelectedEntities.Count == 0)
                {
                    return;
                }
            }

            bool added = false;
            List <GimnasticarUcesnik> okGimnasticari      = new List <GimnasticarUcesnik>();
            List <GimnasticarUcesnik> illegalGimnasticari = new List <GimnasticarUcesnik>();

            ISession session = null;

            try
            {
                using (session = NHibernateHelper.Instance.OpenSession())
                    using (session.BeginTransaction())
                    {
                        CurrentSessionContext.Bind(session);
                        if (form2.IzPrethodnogTakmicenja)
                        {
                            foreach (GimnasticarUcesnik g in form3.SelectedGimnasticari)
                            {
                                selGimnasticari.Add(GimnasticarUcesnikService.createGimnasticarUcesnik(g, ActiveKategorija));
                            }
                        }
                        else
                        {
                            foreach (Gimnasticar g in form.SelectedEntities)
                            {
                                selGimnasticari.Add(GimnasticarUcesnikService.createGimnasticarUcesnik(g, ActiveKategorija));
                            }
                        }

                        foreach (GimnasticarUcesnik g in selGimnasticari)
                        {
                            if (canAddGimnasticar(g, ActiveKategorija))
                            {
                                okGimnasticari.Add(g);
                            }
                            else
                            {
                                illegalGimnasticari.Add(g);
                            }
                        }

                        GimnasticarUcesnikDAO gimUcesnikDAO = DAOFactoryFactory.DAOFactory.GetGimnasticarUcesnikDAO();
                        foreach (GimnasticarUcesnik g in okGimnasticari)
                        {
                            gimUcesnikDAO.Add(g);
                        }

                        takmicenje = DAOFactoryFactory.DAOFactory.GetTakmicenjeDAO().FindById(takmicenje.Id);
                        takmicenje.LastModified = DateTime.Now;
                        session.Transaction.Commit();
                        added = true;
                    }
            }
            catch (Exception ex)
            {
                if (session != null && session.Transaction != null && session.Transaction.IsActive)
                {
                    session.Transaction.Rollback();
                }
                MessageDialogs.showMessage(ex.Message, this.Text);
            }
            finally
            {
                CurrentSessionContext.Unbind(NHibernateHelper.Instance.SessionFactory);
            }

            if (!added)
            {
                Close();
                return;
            }

            if (okGimnasticari.Count > 0)
            {
                List <GimnasticarUcesnik> activeGimnasticari = gimnasticari[tabControl1.SelectedIndex];
                foreach (GimnasticarUcesnik g in okGimnasticari)
                {
                    activeGimnasticari.Add(g);
                }

                setGimnasticari(activeGimnasticari);

                // NOTE: Ako je DataGridViewUserControl sortiran, tada metod setItems
                // (koga poziva metod setGimnasticari) osvezava prikaz (poziva
                // refreshItems). Ako nije sortiran, potrebno je eksplicitno osveziti
                // prikaz
                // Dodatni razlog zasto je potrebno osveziti prikaz je cinjenica da
                // se metod setItems poziva sa parametrom tipa List, a u tom slucaju
                // DataGridViewUserControl ne kreira novu listu za DataSource i nece
                // automatski osveziti prikaz.

                if (!getActiveDataGridViewUserControl().isSorted())
                {
                    getActiveDataGridViewUserControl().refreshItems();
                }

                getActiveDataGridViewUserControl().setSelectedItem <GimnasticarUcesnik>
                    (okGimnasticari[okGimnasticari.Count - 1]);
                updateGimnasticariCount();
            }

            if (illegalGimnasticari.Count > 0)
            {
                string msg = "Sledeci gimnasticari vec postoje medju " +
                             "prijavljenim gimansticarima: \n\n";
                msg += StringUtil.getListString(illegalGimnasticari.ToArray());
                MessageDialogs.showMessage(msg, this.Text);
            }
        }