Exemple #1
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);
        }
Exemple #2
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);
            }
        }
        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);
            }
        }