public virtual void deleteGimnasticar(GimnasticarUcesnik g, RezultatskoTakmicenje rezTak) { RezultatSpravaFinaleKupa r = getRezultat(g); if (r != null) { Rezultati.Remove(r); rankRezultati(rezTak.Propozicije); } }
public virtual void addGimnasticar(GimnasticarUcesnik g, RezultatskoTakmicenje rezTak, RezultatskoTakmicenje rezTak1, RezultatskoTakmicenje rezTak2) { RezultatSpravaFinaleKupa rezultat = new RezultatSpravaFinaleKupa(); rezultat.Gimnasticar = g; if (Sprava != Sprava.Preskok) { foreach (RezultatSprava r in rezTak1.Takmicenje1.getPoredakSprava(Sprava).Rezultati) { if (r.Gimnasticar.Equals(g)) { rezultat.initPrvoKolo(r); break; } } foreach (RezultatSprava r in rezTak2.Takmicenje1.getPoredakSprava(Sprava).Rezultati) { if (r.Gimnasticar.Equals(g)) { rezultat.initDrugoKolo(r); break; } } } else { bool postojeObaPreskoka = rezTak1.Takmicenje1.PoredakPreskok.postojeObaPreskoka(); foreach (RezultatPreskok r in rezTak1.Takmicenje1.PoredakPreskok.Rezultati) { if (r.Gimnasticar.Equals(g)) { rezultat.initPrvoKolo(r, rezTak1.Propozicije.Tak1PreskokNaOsnovuObaPreskoka, postojeObaPreskoka); break; } } postojeObaPreskoka = rezTak2.Takmicenje1.PoredakPreskok.postojeObaPreskoka(); foreach (RezultatPreskok r in rezTak2.Takmicenje1.PoredakPreskok.Rezultati) { if (r.Gimnasticar.Equals(g)) { rezultat.initDrugoKolo(r, rezTak2.Propozicije.Tak1PreskokNaOsnovuObaPreskoka, postojeObaPreskoka); break; } } } rezultat.calculateTotal(rezTak.Propozicije.NacinRacunanjaOceneFinaleKupaTak3); Rezultati.Add(rezultat); rankRezultati(rezTak.Propozicije); }
public virtual void loadFromDump(StringReader reader, IdMap map) { Sprava = (Sprava)Enum.Parse(typeof(Sprava), reader.ReadLine()); int brojRezultata = int.Parse(reader.ReadLine()); for (int i = 0; i < brojRezultata; ++i) { reader.ReadLine(); // id RezultatSpravaFinaleKupa r = new RezultatSpravaFinaleKupa(); r.loadFromDump(reader, map); Rezultati.Add(r); } }
// TODO3: Za sve poretke (ukupno, sprava, ekipno, kako za finale kupa, tako i za obicna takmicenja) specifikuj // pravila razresavanja istih ocena. private void createPreskok(RezultatskoTakmicenje rezTak, RezultatskoTakmicenje rezTak1, RezultatskoTakmicenje rezTak2) { IDictionary <GimnasticarUcesnik, RezultatSpravaFinaleKupa> rezultatiMap = new Dictionary <GimnasticarUcesnik, RezultatSpravaFinaleKupa>(); foreach (GimnasticarUcesnik g in rezTak.Takmicenje1.Gimnasticari) { RezultatSpravaFinaleKupa rezultat = new RezultatSpravaFinaleKupa(); rezultat.Gimnasticar = g; rezultatiMap.Add(g, rezultat); } // TODO4: Razmisli da li treba uvoditi opciju u propozicijama sta da se radi kada u nekom od prethodnih kola // deo takmicara ima obe ocene za preskok a deo ima samo jednu (ili se kao i do sada oslanjati na to kako je // to specifikovano u propozicijama za 1. i 2. kolo, sto mislim da je bolja varijanta) bool postojeObaPreskoka = rezTak1.Takmicenje1.PoredakPreskok.postojeObaPreskoka(); foreach (RezultatPreskok r in rezTak1.Takmicenje1.PoredakPreskok.Rezultati) { if (rezultatiMap.ContainsKey(r.Gimnasticar)) { rezultatiMap[r.Gimnasticar].initPrvoKolo(r, rezTak1.Propozicije.Tak1PreskokNaOsnovuObaPreskoka, postojeObaPreskoka); } } postojeObaPreskoka = rezTak2.Takmicenje1.PoredakPreskok.postojeObaPreskoka(); foreach (RezultatPreskok r in rezTak2.Takmicenje1.PoredakPreskok.Rezultati) { if (rezultatiMap.ContainsKey(r.Gimnasticar)) { rezultatiMap[r.Gimnasticar].initDrugoKolo(r, rezTak2.Propozicije.Tak1PreskokNaOsnovuObaPreskoka, postojeObaPreskoka); } } Rezultati.Clear(); foreach (RezultatSpravaFinaleKupa r in rezultatiMap.Values) { r.calculateTotal(rezTak.Propozicije.NacinRacunanjaOceneFinaleKupaTak3); Rezultati.Add(r); } rankRezultati(rezTak.Propozicije); }
public virtual void create(RezultatskoTakmicenje rezTak, RezultatskoTakmicenje rezTak1, RezultatskoTakmicenje rezTak2) { if (Sprava == Sprava.Preskok) { createPreskok(rezTak, rezTak1, rezTak2); return; } IDictionary <GimnasticarUcesnik, RezultatSpravaFinaleKupa> rezultatiMap = new Dictionary <GimnasticarUcesnik, RezultatSpravaFinaleKupa>(); foreach (GimnasticarUcesnik g in rezTak.Takmicenje1.Gimnasticari) { RezultatSpravaFinaleKupa rezultat = new RezultatSpravaFinaleKupa(); rezultat.Gimnasticar = g; rezultatiMap.Add(g, rezultat); } foreach (RezultatSprava r in rezTak1.Takmicenje1.getPoredakSprava(Sprava).Rezultati) { if (rezultatiMap.ContainsKey(r.Gimnasticar)) { rezultatiMap[r.Gimnasticar].initPrvoKolo(r); } } foreach (RezultatSprava r in rezTak2.Takmicenje1.getPoredakSprava(Sprava).Rezultati) { if (rezultatiMap.ContainsKey(r.Gimnasticar)) { rezultatiMap[r.Gimnasticar].initDrugoKolo(r); } } Rezultati.Clear(); foreach (RezultatSpravaFinaleKupa r in rezultatiMap.Values) { // Total moze da bude krajnja finalna ocena ili ulazna finalna ocena. U oba slucaja se Total izracunava // na isti nacin. r.calculateTotal(rezTak.Propozicije.NacinRacunanjaOceneFinaleKupaTak3); Rezultati.Add(r); } rankRezultati(rezTak.Propozicije); }
private void updateKvalStatus(Propozicije propozicije) { if (!propozicije.odvojenoTak3()) { foreach (RezultatSpravaFinaleKupa r in Rezultati) { r.KvalStatus = KvalifikacioniStatus.None; } return; } List <RezultatSpravaFinaleKupa> rezultati = new List <RezultatSpravaFinaleKupa>(Rezultati); PropertyDescriptor propDesc = TypeDescriptor.GetProperties(typeof(RezultatSpravaFinaleKupa))["RedBroj"]; rezultati.Sort(new SortComparer <RezultatSpravaFinaleKupa>(propDesc, ListSortDirection.Ascending)); // moram da koristim dve mape zato sto je moguca situacija da klub i // drzava imaju isti id IDictionary <int, int> brojTakmicaraKlubMap = new Dictionary <int, int>(); IDictionary <int, int> brojTakmicaraDrzavaMap = new Dictionary <int, int>(); int finCount = 0; int rezCount = 0; for (int i = 0; i < rezultati.Count; i++) { RezultatSpravaFinaleKupa rezultat = rezultati[i]; if (rezultat.Total == null) { rezultat.KvalStatus = KvalifikacioniStatus.None; continue; } int id; IDictionary <int, int> brojTakmicaraMap; if (propozicije.MaxBrojTakmicaraTak3VaziZaDrzavu) { if (rezultat.Gimnasticar.DrzavaUcesnik != null) { id = rezultat.Gimnasticar.DrzavaUcesnik.Id; brojTakmicaraMap = brojTakmicaraDrzavaMap; } else { id = rezultat.Gimnasticar.KlubUcesnik.Id; brojTakmicaraMap = brojTakmicaraKlubMap; } } else { if (rezultat.Gimnasticar.KlubUcesnik != null) { id = rezultat.Gimnasticar.KlubUcesnik.Id; brojTakmicaraMap = brojTakmicaraKlubMap; } else { id = rezultat.Gimnasticar.DrzavaUcesnik.Id; brojTakmicaraMap = brojTakmicaraDrzavaMap; } } if (!brojTakmicaraMap.ContainsKey(id)) { brojTakmicaraMap.Add(id, 0); } if (finCount < propozicije.BrojFinalistaTak3) { if (propozicije.NeogranicenBrojTakmicaraIzKlubaTak3) { finCount++; rezultat.KvalStatus = KvalifikacioniStatus.Q; } else { if (brojTakmicaraMap[id] < propozicije.MaxBrojTakmicaraIzKlubaTak3) { finCount++; brojTakmicaraMap[id]++; rezultat.KvalStatus = KvalifikacioniStatus.Q; } else { if (Opcije.Instance.UzimajPrvuSlobodnuRezervu && rezCount < propozicije.BrojRezerviTak3) { rezCount++; rezultat.KvalStatus = KvalifikacioniStatus.R; } else { rezultat.KvalStatus = KvalifikacioniStatus.None; } } } } else if (rezCount < propozicije.BrojRezerviTak3) { if (propozicije.NeogranicenBrojTakmicaraIzKlubaTak3) { rezCount++; rezultat.KvalStatus = KvalifikacioniStatus.R; } else { if (brojTakmicaraMap[id] < propozicije.MaxBrojTakmicaraIzKlubaTak3) { rezCount++; brojTakmicaraMap[id]++; rezultat.KvalStatus = KvalifikacioniStatus.R; } else { if (Opcije.Instance.UzimajPrvuSlobodnuRezervu && rezCount < propozicije.BrojRezerviTak3) { rezCount++; rezultat.KvalStatus = KvalifikacioniStatus.R; } else { rezultat.KvalStatus = KvalifikacioniStatus.None; } } } } else { rezultat.KvalStatus = KvalifikacioniStatus.None; } } }