public override bool Equals(object other) { if (object.ReferenceEquals(this, other)) { return(true); } if (!(other is KlubUcesnik)) { return(false); } KlubUcesnik that = (KlubUcesnik)other; bool result = this.Naziv.ToUpper() == that.Naziv.ToUpper() && this.Kod.ToUpper() == that.Kod.ToUpper(); return(result); }
private IList<GimnasticarUcesnik> findGimnasticariUcesnici(string ime, string prezime, Nullable<int> godRodj, Nullable<Gimnastika> gimnastika, DrzavaUcesnik drzava, TakmicarskaKategorija kategorija, KlubUcesnik klub, int takmicenjeId) { Query q = new Query(); if (!String.IsNullOrEmpty(ime)) q.Criteria.Add(new Criterion("Ime", CriteriaOperator.Like, ime, StringMatchMode.Start, true)); if (!String.IsNullOrEmpty(prezime)) q.Criteria.Add(new Criterion("Prezime", CriteriaOperator.Like, prezime, StringMatchMode.Start, true)); if (godRodj != null) { q.Criteria.Add(new Criterion("DatumRodjenja.Godina", CriteriaOperator.Equal, (short)godRodj.Value)); } if (gimnastika != null) q.Criteria.Add(new Criterion("Gimnastika", CriteriaOperator.Equal, (byte)gimnastika.Value)); if (drzava != null) q.Criteria.Add(new Criterion("DrzavaUcesnik", CriteriaOperator.Equal, drzava)); if (kategorija != null) q.Criteria.Add(new Criterion("TakmicarskaKategorija", CriteriaOperator.Equal, kategorija)); if (klub != null) q.Criteria.Add(new Criterion("KlubUcesnik", CriteriaOperator.Equal, klub)); q.Criteria.Add(new Criterion("Takmicenje.Id", CriteriaOperator.Equal, takmicenjeId)); q.Operator = QueryOperator.And; q.OrderClauses.Add(new OrderClause("Prezime", OrderClause.OrderClauseCriteria.Ascending)); q.OrderClauses.Add(new OrderClause("Ime", OrderClause.OrderClauseCriteria.Ascending)); foreach (AssociationFetch f in this.FetchModes) { q.FetchModes.Add(f); } return dataContext.GetByCriteria<GimnasticarUcesnik>(q); }
private bool kreirajZbirViseKola(Takmicenje takmicenje) { dataContext.Attach(takmicenje, false); List<List<TakmicarskaKategorija>> listaKategorija = new List<List<TakmicarskaKategorija>>(); if (takmicenje.PrvoKolo != null) { dataContext.Attach(takmicenje.PrvoKolo, false); listaKategorija.Add(new List<TakmicarskaKategorija>(takmicenje.PrvoKolo.Kategorije)); } if (takmicenje.DrugoKolo != null) { dataContext.Attach(takmicenje.DrugoKolo, false); listaKategorija.Add(new List<TakmicarskaKategorija>(takmicenje.DrugoKolo.Kategorije)); } if (takmicenje.TreceKolo != null) { dataContext.Attach(takmicenje.TreceKolo, false); listaKategorija.Add(new List<TakmicarskaKategorija>(takmicenje.TreceKolo.Kategorije)); } if (takmicenje.CetvrtoKolo != null) { dataContext.Attach(takmicenje.CetvrtoKolo, false); listaKategorija.Add(new List<TakmicarskaKategorija>(takmicenje.CetvrtoKolo.Kategorije)); } PropertyDescriptor propDesc = TypeDescriptor.GetProperties(typeof(TakmicarskaKategorija))["RedBroj"]; for (int i = 0; i < listaKategorija.Count; ++i) { listaKategorija[i].Sort(new SortComparer<TakmicarskaKategorija>( propDesc, ListSortDirection.Ascending)); } for (int i = 0; i < listaKategorija[0].Count; ++i) { TakmicarskaKategorija kat1 = listaKategorija[0][i]; for (int j = 0; j < listaKategorija.Count; ++j) { TakmicarskaKategorija kat2 = listaKategorija[j][i]; if (!kat1.Equals(kat2)) { // TODO3: Ovde bi ustvari trebalo proveravati da li se rezultatska takmicenja iz // prethodna cetiri kola poklapaju, i ako se ne poklapaju da se otvori prozor // gde ce korisnik moci da upari odgovarajuca rezultatska takmicenja (i da izabere // koja rez. takmicenja zeli da ukljuci u novo takmicenje). Slicno i za finale kupa. MessageBox.Show("Kategorije iz prethodnih kola se ne poklapaju", "Bilten"); return false; } } } foreach (TakmicarskaKategorija k in listaKategorija[0]) { takmicenje.addKategorija(new TakmicarskaKategorija(k.Naziv, takmicenje.Gimnastika)); } // prvi description je uvek kao naziv takmicenja. RezultatskoTakmicenjeDescription desc = new RezultatskoTakmicenjeDescription(); desc.Naziv = takmicenje.Naziv; desc.Propozicije = new Propozicije(); takmicenje.addTakmicenjeDescription(desc); IList<RezultatskoTakmicenje> rezTakmicenja = new List<RezultatskoTakmicenje>(); foreach (RezultatskoTakmicenjeDescription d in takmicenje.TakmicenjeDescriptions) { foreach (TakmicarskaKategorija k in takmicenje.Kategorije) { RezultatskoTakmicenje rt = new RezultatskoTakmicenje(takmicenje, k, d, new Propozicije()); rt.Propozicije.PostojiTak2 = true; // hack rt.Propozicije.PostojiTak4 = true; // hack rt.ImaEkipnoTakmicenje = true; // hack rt.KombinovanoEkipnoTak = false; // hack rezTakmicenja.Add(rt); } } IDictionary<GimnasticarUcesnik, GimnasticarUcesnik> gimnasticariMap = new Dictionary<GimnasticarUcesnik, GimnasticarUcesnik>(); List<Takmicenje> prethodnaKola = new List<Takmicenje>(); if (takmicenje.PrvoKolo != null) prethodnaKola.Add(takmicenje.PrvoKolo); if (takmicenje.DrugoKolo != null) prethodnaKola.Add(takmicenje.DrugoKolo); if (takmicenje.TreceKolo != null) prethodnaKola.Add(takmicenje.TreceKolo); if (takmicenje.CetvrtoKolo != null) prethodnaKola.Add(takmicenje.CetvrtoKolo); foreach (TakmicarskaKategorija kat in takmicenje.Kategorije) { foreach (Takmicenje prethKolo in prethodnaKola) { foreach (GimnasticarUcesnik g in loadGimnasticari(prethKolo, kat.Naziv)) { if (!gimnasticariMap.ContainsKey(g)) { GimnasticarUcesnik g2 = createGimnasticarUcesnik(g, kat); gimnasticariMap.Add(g2, g2); } } } } List<List<RezultatskoTakmicenje>> rezTakmicenjaPrethodnaKola = new List<List<RezultatskoTakmicenje>>(); foreach (Takmicenje prethKolo in prethodnaKola) { rezTakmicenjaPrethodnaKola.Add(new List<RezultatskoTakmicenje>(loadRezTakmicenja(prethKolo.Id))); } foreach (RezultatskoTakmicenje rt in rezTakmicenja) { foreach (List<RezultatskoTakmicenje> rezTakmicenjaPrethKolo in rezTakmicenjaPrethodnaKola) { RezultatskoTakmicenje rtFrom = findRezTakmicenje(rezTakmicenjaPrethKolo, rt.TakmicenjeDescription.Naziv, rt.Kategorija); foreach (GimnasticarUcesnik g in rtFrom.Takmicenje1.Gimnasticari) { GimnasticarUcesnik g2 = gimnasticariMap[g]; rt.Takmicenje1.addGimnasticar(g2); } } } foreach (RezultatskoTakmicenje rt in rezTakmicenja) { foreach (List<RezultatskoTakmicenje> rezTakmicenjaPrethKolo in rezTakmicenjaPrethodnaKola) { RezultatskoTakmicenje rtFrom = findRezTakmicenje(rezTakmicenjaPrethKolo, rt.TakmicenjeDescription.Naziv, 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; if (e.DrzavaUcesnik == null) ekipa.DrzavaUcesnik = null; else { DrzavaUcesnik drzavaUcesnik = findDrzavaUcesnik(takmicenje, e.DrzavaUcesnik.Naziv); if (drzavaUcesnik == null) { drzavaUcesnik = new DrzavaUcesnik(); drzavaUcesnik.Naziv = e.DrzavaUcesnik.Naziv; drzavaUcesnik.Kod = e.DrzavaUcesnik.Kod; drzavaUcesnik.Takmicenje = takmicenje; dataContext.Add(drzavaUcesnik); } ekipa.DrzavaUcesnik = drzavaUcesnik; } if (e.KlubUcesnik == null) ekipa.KlubUcesnik = null; else { KlubUcesnik klubUcesnik = findKlubUcesnik(takmicenje, e.KlubUcesnik.Naziv); if (klubUcesnik == null) { klubUcesnik = new KlubUcesnik(); klubUcesnik.Naziv = e.KlubUcesnik.Naziv; klubUcesnik.Kod = e.KlubUcesnik.Kod; klubUcesnik.Takmicenje = takmicenje; dataContext.Add(klubUcesnik); } ekipa.KlubUcesnik = klubUcesnik; } rt.Takmicenje1.addEkipa(ekipa); } } } dataContext.Add(takmicenje); foreach (RezultatskoTakmicenje rt in rezTakmicenja) { dataContext.Add(rt); foreach (Ekipa e in rt.Takmicenje1.Ekipe) dataContext.Add(e); } foreach (GimnasticarUcesnik g in gimnasticariMap.Values) { dataContext.Add(g); } return true; }
private GimnasticarUcesnik createGimnasticarUcesnik(GimnasticarUcesnik g, TakmicarskaKategorija kategorija) { GimnasticarUcesnik result = new GimnasticarUcesnik(); result.Ime = g.Ime; result.SrednjeIme = g.SrednjeIme; result.Prezime = g.Prezime; result.Gimnastika = g.Gimnastika; result.DatumRodjenja = g.DatumRodjenja; result.RegistarskiBroj = g.RegistarskiBroj; result.TakmicarskaKategorija = kategorija; result.Takmicenje = kategorija.Takmicenje; if (g.DrzavaUcesnik == null) result.DrzavaUcesnik = null; else { DrzavaUcesnik drzavaUcesnik = findDrzavaUcesnik(kategorija.Takmicenje.Id, g.DrzavaUcesnik.Naziv); if (drzavaUcesnik == null) { drzavaUcesnik = new DrzavaUcesnik(); drzavaUcesnik.Naziv = g.DrzavaUcesnik.Naziv; drzavaUcesnik.Kod = g.DrzavaUcesnik.Kod; drzavaUcesnik.Takmicenje = kategorija.Takmicenje; dataContext.Add(drzavaUcesnik); } result.DrzavaUcesnik = drzavaUcesnik; } if (g.KlubUcesnik == null) result.KlubUcesnik = null; else { KlubUcesnik klubUcesnik = findKlubUcesnik(kategorija.Takmicenje.Id, g.KlubUcesnik.Naziv); if (klubUcesnik == null) { klubUcesnik = new KlubUcesnik(); klubUcesnik.Naziv = g.KlubUcesnik.Naziv; klubUcesnik.Kod = g.KlubUcesnik.Kod; klubUcesnik.Takmicenje = kategorija.Takmicenje; dataContext.Add(klubUcesnik); } result.KlubUcesnik = klubUcesnik; } return result; }
void cloneTakmicenje(Takmicenje takmicenje, Takmicenje from, List<RezultatskoTakmicenjeDescription> descriptionsFrom, List<TakmicarskaKategorija> kategorijeFrom) { dataContext.Attach(takmicenje, false); dataContext.Attach(from, false); foreach (RezultatskoTakmicenjeDescription d in descriptionsFrom) { dataContext.Attach(d, false); } // TODO3: Ovaj metod bi trebalo updateovati svaki put kada se promene neka svojstva koja se kloniraju. takmicenje.BrojEOcena = from.BrojEOcena; takmicenje.BrojDecimalaD = from.BrojDecimalaD; takmicenje.BrojDecimalaE1 = from.BrojDecimalaE1; takmicenje.BrojDecimalaE = from.BrojDecimalaE; takmicenje.BrojDecimalaPen = from.BrojDecimalaPen; takmicenje.BrojDecimalaTotal = from.BrojDecimalaTotal; takmicenje.ZavrsenoTak1 = false; // TODO: Kreiraj metod u klasi TakmicarskaKategorija koji vraca kategorije sortirane po rednom broju. // Pronadji sva mesta na kojima sortiram kategorije po rednom broju, i zameni ih pozivom novog metoda. // Uradi isto i za klasu RezultatskoTakmicenjeDescription, a i za druge ako postoje. PropertyDescriptor propDesc = TypeDescriptor.GetProperties(typeof(TakmicarskaKategorija))["RedBroj"]; kategorijeFrom.Sort(new SortComparer<TakmicarskaKategorija>( propDesc, ListSortDirection.Ascending)); foreach (TakmicarskaKategorija k in kategorijeFrom) { takmicenje.addKategorija(new TakmicarskaKategorija(k.Naziv, takmicenje.Gimnastika)); } PropertyDescriptor propDesc2 = TypeDescriptor.GetProperties(typeof(RezultatskoTakmicenjeDescription))["RedBroj"]; descriptionsFrom.Sort(new SortComparer<RezultatskoTakmicenjeDescription>( propDesc2, ListSortDirection.Ascending)); // prvi description je uvek kao naziv takmicenja. RezultatskoTakmicenjeDescription desc = new RezultatskoTakmicenjeDescription(); desc.Naziv = takmicenje.Naziv; desc.Propozicije = new Propozicije(); takmicenje.addTakmicenjeDescription(desc); for (int i = 1; i < descriptionsFrom.Count; i++) { desc = new RezultatskoTakmicenjeDescription(); desc.Naziv = descriptionsFrom[i].Naziv; desc.Propozicije = new Propozicije(); takmicenje.addTakmicenjeDescription(desc); } IList<RezultatskoTakmicenje> rezTakmicenja = new List<RezultatskoTakmicenje>(); foreach (RezultatskoTakmicenjeDescription d in takmicenje.TakmicenjeDescriptions) { foreach (TakmicarskaKategorija k in takmicenje.Kategorije) { RezultatskoTakmicenje rt = new RezultatskoTakmicenje(takmicenje, k, d, new Propozicije()); rezTakmicenja.Add(rt); } } List<RezultatskoTakmicenjeDescription> descriptions = new List<RezultatskoTakmicenjeDescription>(takmicenje.TakmicenjeDescriptions); propDesc = TypeDescriptor.GetProperties(typeof(RezultatskoTakmicenjeDescription))["RedBroj"]; descriptions.Sort(new SortComparer<RezultatskoTakmicenjeDescription>( propDesc, ListSortDirection.Ascending)); for (int i = 0; i < descriptions.Count; i++) { clonePropozicije(descriptions[i].Propozicije, descriptionsFrom[i].Propozicije); } IList<RezultatskoTakmicenje> rezTakmicenjaFrom = new List<RezultatskoTakmicenje>(); foreach (RezultatskoTakmicenje rt in loadRezTakmicenja(from.Id)) { // filtriraj rez. takmicenja. ISet<TakmicarskaKategorija> katFromSet = new HashSet<TakmicarskaKategorija>(kategorijeFrom); ISet<RezultatskoTakmicenjeDescription> descFromSet = new HashSet<RezultatskoTakmicenjeDescription>(descriptionsFrom); if (katFromSet.Contains(rt.Kategorija) && descFromSet.Contains(rt.TakmicenjeDescription)) { rezTakmicenjaFrom.Add(rt); } } foreach (RezultatskoTakmicenje rezTak in rezTakmicenja) { RezultatskoTakmicenje rezTak2 = findRezTakmicenje(rezTakmicenjaFrom, rezTak.TakmicenjeDescription.Naziv, rezTak.Kategorija); clonePropozicije(rezTak.Propozicije, rezTak2.Propozicije); } bool kombAdded = false; foreach (RezultatskoTakmicenje rt in rezTakmicenja) { if (!rt.TakmicenjeDescription.Propozicije.JednoTak4ZaSveKategorije) { rt.ImaEkipnoTakmicenje = true; rt.KombinovanoEkipnoTak = false; } else { if (!kombAdded) { rt.ImaEkipnoTakmicenje = true; rt.KombinovanoEkipnoTak = true; kombAdded = true; } else { rt.ImaEkipnoTakmicenje = false; rt.KombinovanoEkipnoTak = false; } } } foreach (RezultatskoTakmicenje rt in rezTakmicenja) { bool deletedTak2, deletedTak3, deletedTak4; rt.updateTakmicenjaFromChangedPropozicije( out deletedTak2, out deletedTak3, out deletedTak4); /*if (deletedTak2) dataContext.Delete(rt.Takmicenje2); if (deletedTak3) dataContext.Delete(rt.Takmicenje3); if (deletedTak4) dataContext.Delete(rt.Takmicenje4);*/ } IDictionary<GimnasticarUcesnik, GimnasticarUcesnik> gimnasticariMap = new Dictionary<GimnasticarUcesnik, GimnasticarUcesnik>(); List<GimnasticarUcesnik> dupliGimnasticari = new List<GimnasticarUcesnik>(); foreach (TakmicarskaKategorija kat in takmicenje.Kategorije) { foreach (GimnasticarUcesnik g in loadGimnasticari(from, kat.Naziv)) { if (!gimnasticariMap.ContainsKey(g)) { // Ovo proveravam zato sto se vec desilo da isti gimnasticar bude prijavljen u dve razlicite // kategorije (program to ne proverava). Npr. na takmicenju I KOLO PGL SRBIJE MSG od 21.05.2011. // Sinisa Jurkovic je bio prijavljen u dve kategorije. U novoj verziji programa nije moguce da // isti gimnsticar bude prijavljen u dve razlicite kategorije. GimnasticarUcesnik g2 = createGimnasticarUcesnik(g, kat); gimnasticariMap.Add(g2, g2); } else dupliGimnasticari.Add(g); } } // Proveravanje gimnasticara koji su prijavljeni u vise kategorija je samo za legacy baze. Program je vec // promenjen da ne dozvoljava da isti gimnasticar bude prijavljen u vise kategorija. foreach (GimnasticarUcesnik g in dupliGimnasticari) { if (gimnasticariMap.ContainsKey(g)) gimnasticariMap.Remove(g); } // TODO2: Izgleda da prikazuje rezultate za sprave u takmicenju I cak i kada se u propozicijama selektuje da // ne postoji takmicenje III. U stvari tako i treba zato sto ipak treba da postoji pregled nastupa po spravama // cak i kada se selektuje da ne postoji takmicenje III. Tako da ovo treba da ostane. foreach (RezultatskoTakmicenje rt in rezTakmicenja) { RezultatskoTakmicenje rtFrom = findRezTakmicenje(rezTakmicenjaFrom, rt.TakmicenjeDescription.Naziv, rt.Kategorija); foreach (GimnasticarUcesnik g in rtFrom.Takmicenje1.Gimnasticari) { if (gimnasticariMap.ContainsKey(g)) { GimnasticarUcesnik g2 = gimnasticariMap[g]; rt.Takmicenje1.addGimnasticar(g2); rt.Takmicenje1.gimnasticarAdded(g2, new List<Ocena>(), rt); } } } foreach (RezultatskoTakmicenje rt in rezTakmicenja) { RezultatskoTakmicenje rtFrom = findRezTakmicenje(rezTakmicenjaFrom, rt.TakmicenjeDescription.Naziv, rt.Kategorija); foreach (Ekipa e in rtFrom.Takmicenje1.Ekipe) { Ekipa ekipa = new Ekipa(); ekipa.Naziv = e.Naziv; ekipa.Kod = e.Kod; if (e.DrzavaUcesnik == null) ekipa.DrzavaUcesnik = null; else { DrzavaUcesnik drzavaUcesnik = findDrzavaUcesnik(takmicenje, e.DrzavaUcesnik.Naziv); if (drzavaUcesnik == null) { drzavaUcesnik = new DrzavaUcesnik(); drzavaUcesnik.Naziv = e.DrzavaUcesnik.Naziv; drzavaUcesnik.Kod = e.DrzavaUcesnik.Kod; drzavaUcesnik.Takmicenje = takmicenje; dataContext.Add(drzavaUcesnik); } ekipa.DrzavaUcesnik = drzavaUcesnik; } if (e.KlubUcesnik == null) ekipa.KlubUcesnik = null; else { KlubUcesnik klubUcesnik = findKlubUcesnik(takmicenje, e.KlubUcesnik.Naziv); if (klubUcesnik == null) { klubUcesnik = new KlubUcesnik(); klubUcesnik.Naziv = e.KlubUcesnik.Naziv; klubUcesnik.Kod = e.KlubUcesnik.Kod; klubUcesnik.Takmicenje = takmicenje; dataContext.Add(klubUcesnik); } ekipa.KlubUcesnik = klubUcesnik; } foreach (GimnasticarUcesnik g in e.Gimnasticari) { if (gimnasticariMap.ContainsKey(g)) { GimnasticarUcesnik g2 = gimnasticariMap[g]; ekipa.addGimnasticar(g2); } } rt.Takmicenje1.addEkipa(ekipa); } } dataContext.Add(takmicenje); foreach (RezultatskoTakmicenje rt in rezTakmicenja) { dataContext.Add(rt); foreach (Ekipa e in rt.Takmicenje1.Ekipe) dataContext.Add(e); } foreach (GimnasticarUcesnik g in gimnasticariMap.Values) { dataContext.Add(g); } if (dupliGimnasticari.Count > 0) { string msg = "Sledeci gimnasticari nisu dodati zato sto su prijavljeni u vise " + "kategorija. Ove gimnasticare morate da unesete rucno: \n\n"; msg += StringUtil.getListString(dupliGimnasticari.ToArray()); MessageDialogs.showMessage(msg, this.Text); } }