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