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); }
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); } }