public Takmicenje3FinaleKupaPage(Propozicije propozicije, IList<Propozicije> dependentPropozicije) { InitializeComponent(); this.propozicije = propozicije; this.dependentPropozicije = dependentPropozicije; }
private Propozicije createPropozicije() { Propozicije result = new Propozicije(); result.MaxBrojTakmicaraIzKlubaTak1 = 0; // nema ogranicenja result.PostojiTak2 = true; result.OdvojenoTak2 = true; result.NeogranicenBrojTakmicaraIzKlubaTak2 = false; result.MaxBrojTakmicaraIzKlubaTak2 = 2; result.BrojFinalistaTak2 = 24; result.BrojRezerviTak2 = 4; result.PostojiTak3 = true; result.OdvojenoTak3 = true; result.NeogranicenBrojTakmicaraIzKlubaTak3 = false; result.MaxBrojTakmicaraIzKlubaTak3 = 2; result.MaxBrojTakmicaraTak3VaziZaDrzavu = true; result.BrojFinalistaTak3 = 8; result.BrojRezerviTak3 = 3; result.KvalifikantiTak3PreskokNaOsnovuObaPreskoka = true; result.PoredakTak3PreskokNaOsnovuObaPreskoka = true; result.PostojiTak4 = false; result.OdvojenoTak4 = false; result.BrojRezultataKojiSeBodujuZaEkipu = 0; result.BrojEkipaUFinalu = 0; return result; }
public virtual Propozicije clonePropozicije() { Propozicije result = new Propozicije(); result.PostojiTak2 = this.PostojiTak2; result.OdvojenoTak2 = this.OdvojenoTak2; result.ZaPreskokVisebojRacunajBoljuOcenu = this.ZaPreskokVisebojRacunajBoljuOcenu; result.NeogranicenBrojTakmicaraIzKlubaTak2 = this.NeogranicenBrojTakmicaraIzKlubaTak2; result.MaxBrojTakmicaraIzKlubaTak2 = this.MaxBrojTakmicaraIzKlubaTak2; result.MaxBrojTakmicaraTak2VaziZaDrzavu = this.MaxBrojTakmicaraTak2VaziZaDrzavu; result.BrojFinalistaTak2 = this.BrojFinalistaTak2; result.BrojRezerviTak2 = this.BrojRezerviTak2; result.PostojiTak3 = this.PostojiTak3; result.OdvojenoTak3 = this.OdvojenoTak3; result.NeogranicenBrojTakmicaraIzKlubaTak3 = this.NeogranicenBrojTakmicaraIzKlubaTak3; result.MaxBrojTakmicaraIzKlubaTak3 = this.MaxBrojTakmicaraIzKlubaTak3; result.MaxBrojTakmicaraTak3VaziZaDrzavu = this.MaxBrojTakmicaraTak3VaziZaDrzavu; result.BrojFinalistaTak3 = this.BrojFinalistaTak3; result.BrojRezerviTak3 = this.BrojRezerviTak3; result.Tak1PreskokNaOsnovuObaPreskoka = this.Tak1PreskokNaOsnovuObaPreskoka; result.Tak3PreskokNaOsnovuObaPreskoka = this.Tak3PreskokNaOsnovuObaPreskoka; result.VecaEOcenaImaPrednost = this.VecaEOcenaImaPrednost; result.PostojiTak4 = this.PostojiTak4; result.OdvojenoTak4 = this.OdvojenoTak4; result.BrojRezultataKojiSeBodujuZaEkipu = this.BrojRezultataKojiSeBodujuZaEkipu; result.BrojEkipaUFinalu = this.BrojEkipaUFinalu; result.JednoTak4ZaSveKategorije = this.JednoTak4ZaSveKategorije; result.NacinRacunanjaOceneFinaleKupaTak2 = this.NacinRacunanjaOceneFinaleKupaTak2; result.NacinRacunanjaOceneFinaleKupaTak3 = this.NacinRacunanjaOceneFinaleKupaTak3; result.NacinRacunanjaOceneFinaleKupaTak4 = this.NacinRacunanjaOceneFinaleKupaTak4; return(result); }
public virtual void calculateTotal(Propozicije propozicije) { foreach (RezultatEkipnoFinaleKupa r in Rezultati) { r.calculateTotal(propozicije.NacinRacunanjaOceneFinaleKupaTak4); } rankRezultati(propozicije); }
// TODO: I za ostale propozicije (takmicenje 2, takmicenje 3, ...) kreiraj dva metoda - jedan sto kao argument // dobija object i jedan sto dobija listu. public virtual void copyTakmicenje4To(Propozicije p) { p.PostojiTak4 = this.PostojiTak4; p.OdvojenoTak4 = this.OdvojenoTak4; p.JednoTak4ZaSveKategorije = this.JednoTak4ZaSveKategorije; p.BrojRezultataKojiSeBodujuZaEkipu = this.BrojRezultataKojiSeBodujuZaEkipu; p.BrojEkipaUFinalu = this.BrojEkipaUFinalu; }
public virtual void dump(StringBuilder strBuilder) { strBuilder.AppendLine(Id.ToString()); strBuilder.AppendLine(RedBroj.ToString()); strBuilder.AppendLine(Gimnastika.ToString()); strBuilder.AppendLine(ImaEkipnoTakmicenje.ToString()); strBuilder.AppendLine(KombinovanoEkipnoTak.ToString()); strBuilder.AppendLine(Takmicenje != null ? Takmicenje.Id.ToString() : NULL); strBuilder.AppendLine(Kategorija != null ? Kategorija.Id.ToString() : NULL); strBuilder.AppendLine(TakmicenjeDescription != null ? TakmicenjeDescription.Id.ToString() : NULL); if (Propozicije == null) { strBuilder.AppendLine(NULL); } else { Propozicije.dump(strBuilder); } if (Takmicenje1 == null) { strBuilder.AppendLine(NULL); } else { Takmicenje1.dump(strBuilder); } if (Takmicenje2 == null) { strBuilder.AppendLine(NULL); } else { Takmicenje2.dump(strBuilder); } if (Takmicenje3 == null) { strBuilder.AppendLine(NULL); } else { Takmicenje3.dump(strBuilder); } if (Takmicenje4 == null) { strBuilder.AppendLine(NULL); } else { Takmicenje4.dump(strBuilder); } }
public RezultatskoTakmicenje(Takmicenje takmicenje, TakmicarskaKategorija kategorija, RezultatskoTakmicenjeDescription desc, Propozicije propozicije) { this.takmicenje = takmicenje; this.kategorija = kategorija; this.description = desc; this.propozicije = propozicije; this.gimnastika = takmicenje.Gimnastika; Takmicenje1 = new Takmicenje1(takmicenje); Takmicenje2 = new Takmicenje2(); Takmicenje3 = new Takmicenje3(Gimnastika); Takmicenje4 = new Takmicenje4(); }
public RezultatskoTakmicenje(Takmicenje takmicenje, TakmicarskaKategorija kategorija, RezultatskoTakmicenjeDescription desc, Propozicije propozicije) { this.takmicenje = takmicenje; this.kategorija = kategorija; this.description = desc; this.propozicije = propozicije; this.gimnastika = takmicenje.Gimnastika; _takmicenje1 = new Takmicenje1(takmicenje.Gimnastika); if (propozicije.PostojiTak2) _takmicenje2 = new Takmicenje2(); if (propozicije.PostojiTak3) _takmicenje3 = new Takmicenje3(takmicenje.Gimnastika); if (propozicije.PostojiTak4) _takmicenje4 = new Takmicenje4(); }
public virtual void loadFromDump(StringReader reader) { string naziv = reader.ReadLine(); Naziv = naziv != NULL ? naziv : null; RedBroj = byte.Parse(reader.ReadLine()); string id = reader.ReadLine(); Propozicije p = null; if (id != NULL) { p = new Propozicije(); p.loadFromDump(reader); } Propozicije = p; }
private void updateKvalStatus(Propozicije propozicije) { if (!propozicije.odvojenoTak4()) { foreach (RezultatEkipnoFinaleKupa r in Rezultati) { r.KvalStatus = KvalifikacioniStatus.None; } return; } List <RezultatEkipnoFinaleKupa> rezultati = new List <RezultatEkipnoFinaleKupa>(Rezultati); PropertyDescriptor propDesc = TypeDescriptor.GetProperties(typeof(RezultatEkipnoFinaleKupa))["RedBroj"]; rezultati.Sort(new SortComparer <RezultatEkipnoFinaleKupa>(propDesc, ListSortDirection.Ascending)); int finCount = 0; int rezCount = 0; for (int i = 0; i < rezultati.Count; i++) { Rezultat rezultat = rezultati[i]; if (rezultat.Total == null) { rezultat.KvalStatus = KvalifikacioniStatus.None; continue; } if (finCount < propozicije.BrojEkipaUFinalu) { finCount++; rezultat.KvalStatus = KvalifikacioniStatus.Q; } else if (rezCount < 0 /*brojRezervi*/) { rezCount++; rezultat.KvalStatus = KvalifikacioniStatus.R; } else { rezultat.KvalStatus = KvalifikacioniStatus.None; } } }
public virtual void rankRezultati(Propozicije propozicije) { List <RezultatEkipnoFinaleKupa> rezultati = new List <RezultatEkipnoFinaleKupa>(Rezultati); PropertyDescriptor[] propDesc = new PropertyDescriptor[] { TypeDescriptor.GetProperties(typeof(RezultatEkipnoFinaleKupa))["Total"], TypeDescriptor.GetProperties(typeof(RezultatEkipnoFinaleKupa))["NazivEkipe"] }; ListSortDirection[] sortDir = new ListSortDirection[] { ListSortDirection.Descending, ListSortDirection.Ascending }; rezultati.Sort(new SortComparer <RezultatEkipnoFinaleKupa>(propDesc, sortDir)); float prevTotal = -1f; short prevRank = 0; for (int i = 0; i < rezultati.Count; i++) { rezultati[i].KvalStatus = KvalifikacioniStatus.None; rezultati[i].RedBroj = (short)(i + 1); if (rezultati[i].Total == null) { rezultati[i].Rank = null; } else { if (rezultati[i].Total != prevTotal) { rezultati[i].Rank = (short)(i + 1); } else { rezultati[i].Rank = prevRank; } prevTotal = rezultati[i].Total.Value; prevRank = rezultati[i].Rank.Value; } } updateKvalStatus(propozicije); }
public override bool Equals(object other) { if (object.ReferenceEquals(this, other)) { return(true); } if (!(other is Propozicije)) { return(false); } Propozicije that = (Propozicije)other; return(this.PostojiTak2 == that.PostojiTak2 && this.OdvojenoTak2 == that.OdvojenoTak2 && this.ZaPreskokVisebojRacunajBoljuOcenu == that.ZaPreskokVisebojRacunajBoljuOcenu && this.NeogranicenBrojTakmicaraIzKlubaTak2 == that.NeogranicenBrojTakmicaraIzKlubaTak2 && this.MaxBrojTakmicaraIzKlubaTak2 == that.MaxBrojTakmicaraIzKlubaTak2 && this.MaxBrojTakmicaraTak2VaziZaDrzavu == that.MaxBrojTakmicaraTak2VaziZaDrzavu && this.BrojFinalistaTak2 == that.BrojFinalistaTak2 && this.BrojRezerviTak2 == that.BrojRezerviTak2 && this.PostojiTak3 == that.PostojiTak3 && this.OdvojenoTak3 == that.OdvojenoTak3 && this.NeogranicenBrojTakmicaraIzKlubaTak3 == that.NeogranicenBrojTakmicaraIzKlubaTak3 && this.MaxBrojTakmicaraIzKlubaTak3 == that.MaxBrojTakmicaraIzKlubaTak3 && this.MaxBrojTakmicaraTak3VaziZaDrzavu == that.MaxBrojTakmicaraTak3VaziZaDrzavu && this.BrojFinalistaTak3 == that.BrojFinalistaTak3 && this.BrojRezerviTak3 == that.BrojRezerviTak3 && this.Tak1PreskokNaOsnovuObaPreskoka == that.Tak1PreskokNaOsnovuObaPreskoka && this.Tak3PreskokNaOsnovuObaPreskoka == that.Tak3PreskokNaOsnovuObaPreskoka && this.VecaEOcenaImaPrednost == that.VecaEOcenaImaPrednost && this.PostojiTak4 == that.PostojiTak4 && this.OdvojenoTak4 == that.OdvojenoTak4 && this.BrojRezultataKojiSeBodujuZaEkipu == that.BrojRezultataKojiSeBodujuZaEkipu && this.BrojEkipaUFinalu == that.BrojEkipaUFinalu && this.JednoTak4ZaSveKategorije == that.JednoTak4ZaSveKategorije && this.NacinRacunanjaOceneFinaleKupaTak2 == that.NacinRacunanjaOceneFinaleKupaTak2 && this.NacinRacunanjaOceneFinaleKupaTak3 == that.NacinRacunanjaOceneFinaleKupaTak3 && this.NacinRacunanjaOceneFinaleKupaTak4 == that.NacinRacunanjaOceneFinaleKupaTak4); }
public virtual void rankRezultati(Propozicije propozicije) { if (!propozicije.racunajObaPreskoka(DeoTakmicenjaKod)) { List <RezultatPreskok> rezultati = new List <RezultatPreskok>(Rezultati); rankByPrviPreskok(rezultati, propozicije.VecaEOcenaImaPrednost, 0); } else { List <RezultatPreskok> rezultatiObaPreskoka = new List <RezultatPreskok>(); List <RezultatPreskok> rezultatiPrviPreskok = new List <RezultatPreskok>(); foreach (RezultatPreskok r in Rezultati) { if (r.TotalObeOcene != null) { rezultatiObaPreskoka.Add(r); } else { rezultatiPrviPreskok.Add(r); } } // Ovakav nacin rangiranja rezultata (da se prvo rangiraju takmicari sa dva preskoka pa zatim sa jednim) // obezbedjuje da i u situaciji kada je u propozicijama navedeno da se preskok racuna na osnovu obe ocene, // a zatim se kod unosenja ocena unese samo prva ocena za sve takmicare, da ce i tada takmicari biti // ispravno rangirani (rezultatiObaPreskoka ce tada biti prazni) rankByObaPreskoka(rezultatiObaPreskoka, propozicije.VecaEOcenaImaPrednost); rankByPrviPreskok(rezultatiPrviPreskok, propozicije.VecaEOcenaImaPrednost, rezultatiObaPreskoka.Count); } // NOTE: Deo "!obaPreskoka && x.Total == null" obezbedjuje da se kvalifikanti racunaju na osnovu prvog skoka // u situacijama kada je u propozicijama stavljeno da se kvalifikanti racunaju na osnovu oba skoka, a u // takmicenju 1 je unesen samo prvi skok. (Inace nijedan gimnasticar ne bi bio oznacen sa Q). bool obaPreskoka = postojeObaPreskoka(); PoredakSprava.updateKvalStatus <RezultatPreskok>(propozicije, Rezultati, deoTakKod, x => !propozicije.Tak1PreskokNaOsnovuObaPreskoka && x.Total == null || propozicije.Tak1PreskokNaOsnovuObaPreskoka && (obaPreskoka && x.TotalObeOcene == null || !obaPreskoka && x.Total == null)); }
public virtual void dumpRezultati(StreamWriter streamWriter, Propozicije propozicije) { string header = DeoTakmicenjaKod == DeoTakmicenjaKod.Takmicenje1 ? "PRESKOK" : "PRESKOK - FINALE"; streamWriter.WriteLine(header); foreach (RezultatPreskok r in getRezultati()) { float?total; if (!propozicije.racunajObaPreskoka(DeoTakmicenjaKod) || r.TotalObeOcene == null) { total = r.Total; } else { total = r.TotalObeOcene; } string line = r.Rank + ". " + r.Gimnasticar.ImeSrednjeImePrezimeDatumRodjenja + " " + total; streamWriter.WriteLine(line); } }
public virtual void rankRezultati(Propozicije propozicije, bool finaleMemorijala = false, int maxBrojTakmicaraIzKluba = 0, bool maxBrojTakmicaraVaziZaDrzavu = false) { List <RezultatUkupno> rezultati = new List <RezultatUkupno>(Rezultati); PropertyDescriptor[] propDesc = new PropertyDescriptor[] { TypeDescriptor.GetProperties(typeof(RezultatUkupno))["Total"], TypeDescriptor.GetProperties(typeof(RezultatUkupno))["PrezimeIme"] }; ListSortDirection[] sortDir = new ListSortDirection[] { ListSortDirection.Descending, ListSortDirection.Ascending }; rezultati.Sort(new SortComparer <RezultatUkupno>(propDesc, sortDir)); float prevTotal = -1f; short prevRank = 0; for (int i = 0; i < rezultati.Count; i++) { rezultati[i].KvalStatus = KvalifikacioniStatus.None; rezultati[i].RedBroj = (short)(i + 1); if (rezultati[i].Total == null) { rezultati[i].Rank = null; } else { if (rezultati[i].Total != prevTotal) { rezultati[i].Rank = (short)(i + 1); } else { rezultati[i].Rank = prevRank; } prevTotal = rezultati[i].Total.Value; prevRank = rezultati[i].Rank.Value; } } if (!finaleMemorijala) { updateKvalStatus(propozicije.odvojenoTak2(), propozicije.BrojFinalistaTak2, propozicije.BrojRezerviTak2, propozicije.NeogranicenBrojTakmicaraIzKlubaTak2, propozicije.MaxBrojTakmicaraIzKlubaTak2, propozicije.MaxBrojTakmicaraTak2VaziZaDrzavu); } else { updateKvalStatus(true, 1000, 0, false, maxBrojTakmicaraIzKluba, maxBrojTakmicaraVaziZaDrzavu); for (int i = Rezultati.Count - 1; i >= 0; --i) { if (Rezultati[i].KvalStatus != KvalifikacioniStatus.Q) { Rezultati.RemoveAt(i); } } // Ponovi rangiraj gimnasticare, nakon sto smo izbacili suvisne. rankRezultati(propozicije); } }
public static void updateKvalStatus <T>(Propozicije propozicije, IList <T> rezultatiList, DeoTakmicenjaKod deoTakKod, IsTotalNull <T> isTotalNull) where T : RezultatSprava { foreach (T r in rezultatiList) { r.KvalStatus = KvalifikacioniStatus.None; } if (deoTakKod != DeoTakmicenjaKod.Takmicenje1 || !propozicije.odvojenoTak3()) { return; } List <T> rezultati = new List <T>(rezultatiList); PropertyDescriptor propDesc = TypeDescriptor.GetProperties(typeof(T))["RedBroj"]; rezultati.Sort(new SortComparer <T>(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>(); IDictionary <int, int> brojTakmicaraMap = null; int id = -1; int finCount = 0; int rezCount = 0; T prevFinRezultat = null; List <bool> porediDrzavu = new List <bool>(); for (int i = 0; i < rezultati.Count; i++) { T rezultat = rezultati[i]; if (isTotalNull(rezultat)) { rezultat.KvalStatus = KvalifikacioniStatus.None; continue; } if (!propozicije.NeogranicenBrojTakmicaraIzKlubaTak3) { porediDrzavu.Add(false); if (propozicije.MaxBrojTakmicaraTak3VaziZaDrzavu) { if (rezultat.Gimnasticar.DrzavaUcesnik != null) { porediDrzavu[i] = true; 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 { porediDrzavu[i] = true; id = rezultat.Gimnasticar.DrzavaUcesnik.Id; brojTakmicaraMap = brojTakmicaraDrzavaMap; } } if (!brojTakmicaraMap.ContainsKey(id)) { brojTakmicaraMap.Add(id, 0); } } if (finCount < propozicije.BrojFinalistaTak3 || rezultat.Rank == prevFinRezultat.Rank) { if (propozicije.NeogranicenBrojTakmicaraIzKlubaTak3 || brojTakmicaraMap[id] < propozicije.MaxBrojTakmicaraIzKlubaTak3 || postojiIstiKvalRezultatIzKluba <T>(rezultat, rezultati, porediDrzavu)) { // Poslednji uslov u if naredbi znaci da je dostignut limit broja takmicara iz kluba, a medju // finalistima se nalazi i gimnasticar iz istog kluba koji ima istu ocenu. U tom slucaju moramo // da dodamo i ovog finalistu. TODO4: Da li u ovom slucaju treba da povecavamo finCount? (i kod // rezultata viseboja isto). finCount++; rezultat.KvalStatus = KvalifikacioniStatus.Q; prevFinRezultat = rezultat; if (!propozicije.NeogranicenBrojTakmicaraIzKlubaTak3) { brojTakmicaraMap[id]++; } } else if (rezCount < propozicije.BrojRezerviTak3 && Opcije.Instance.UzimajPrvuSlobodnuRezervu) { rezCount++; rezultat.KvalStatus = KvalifikacioniStatus.R; } else { rezultat.KvalStatus = KvalifikacioniStatus.None; } } else if (rezCount < propozicije.BrojRezerviTak3) { if (propozicije.NeogranicenBrojTakmicaraIzKlubaTak3 || brojTakmicaraMap[id] < propozicije.MaxBrojTakmicaraIzKlubaTak3) { rezCount++; rezultat.KvalStatus = KvalifikacioniStatus.R; if (!propozicije.NeogranicenBrojTakmicaraIzKlubaTak3) { brojTakmicaraMap[id]++; } } else if (Opcije.Instance.UzimajPrvuSlobodnuRezervu) { rezCount++; rezultat.KvalStatus = KvalifikacioniStatus.R; } else { rezultat.KvalStatus = KvalifikacioniStatus.None; } } else { // TODO: Uradi i za rezerve razresavanje situacije kada postoji vise rezervi sa identicnim // rezultatom (isto i za rezultate viseboj). rezultat.KvalStatus = KvalifikacioniStatus.None; } } }
public virtual void rankRezultati(Propozicije propozicije) { // TODO3: I u klasi PoredakSpravaFinaleKupa treba razresiti situaciju kada dva gimnasticara imaju iste ocene. // Pretpostavljam da i tamo treba gledati E ocene, tj. ko ima vecu taj je u prednosti. List <RezultatSprava> rezultati = new List <RezultatSprava>(Rezultati); PropertyDescriptor[] propDesc; ListSortDirection[] sortDir; if (propozicije.VecaEOcenaImaPrednost) { propDesc = new PropertyDescriptor[] { TypeDescriptor.GetProperties(typeof(RezultatSprava))["Total"], TypeDescriptor.GetProperties(typeof(RezultatSprava))["E"], TypeDescriptor.GetProperties(typeof(RezultatSprava))["PrezimeIme"] }; sortDir = new ListSortDirection[] { ListSortDirection.Descending, ListSortDirection.Descending, ListSortDirection.Ascending }; } else { propDesc = new PropertyDescriptor[] { TypeDescriptor.GetProperties(typeof(RezultatSprava))["Total"], TypeDescriptor.GetProperties(typeof(RezultatSprava))["PrezimeIme"] }; sortDir = new ListSortDirection[] { ListSortDirection.Descending, ListSortDirection.Ascending }; } rezultati.Sort(new SortComparer <RezultatSprava>(propDesc, sortDir)); RezultatSprava prevRezultat = null; short prevRank = 0; for (int i = 0; i < rezultati.Count; i++) { rezultati[i].RedBroj = (short)(i + 1); if (rezultati[i].Total == null) { rezultati[i].Rank = null; } else { if (!ranksAreEqual(rezultati[i], prevRezultat, propozicije.VecaEOcenaImaPrednost)) { rezultati[i].Rank = rezultati[i].RedBroj; } else { rezultati[i].Rank = prevRank; } prevRezultat = rezultati[i]; prevRank = rezultati[i].Rank.Value; } } updateKvalStatus <RezultatSprava>(propozicije, Rezultati, deoTakKod, x => x.Total == null); }
public virtual void updateRezultatiOnChangedPropozicije(IDictionary <int, Domain.Propozicije> origPropozicijeMap, Takmicenje takmicenje, IList <RezultatskoTakmicenje> rezTakmicenja, IList <Ocena> oceneTak1) { Propozicije origPropozicije = origPropozicijeMap[Id]; bool rankPoredakUkupnoTak1 = false; bool createPoredakUkupnoTak1 = false; bool rankPoredakSpravaTak1 = false; bool rankPoredakPreskokTak1 = false; bool rankPoredakSpravaTak3 = false; bool rankPoredakPreskokTak3 = false; bool rankPoredakEkipeTak1 = false; bool createPoredakEkipeTak1 = false; bool calculatePoredakUkupnoFinaleKupa = false; bool calculatePoredakUkupnoZbirViseKola = false; bool rankPoredakSpravaFinaleKupa = false; bool calculatePoredakSpravaFinaleKupa = false; bool calculatePoredakEkipnoFinaleKupa = false; bool calculatePoredakEkipnoZbirViseKola = false; bool updateRezTak = false; // TODO: Fali kod za odvojeno takmicenje 2 finale kupa if (Propozicije.PostojiTak2 != origPropozicije.PostojiTak2) { // ignorisi, posto Takmicenje 2 uvek postoji, da bi se videli rezultati } if (Propozicije.OdvojenoTak2 != origPropozicije.OdvojenoTak2) { // Rangiraj ponovo rezultate jer se kval. status promenio. rankPoredakUkupnoTak1 = true; } if (Propozicije.ZaPreskokVisebojRacunajBoljuOcenu != origPropozicije.ZaPreskokVisebojRacunajBoljuOcenu) { createPoredakUkupnoTak1 = true; } if (Propozicije.NeogranicenBrojTakmicaraIzKlubaTak2 != origPropozicije.NeogranicenBrojTakmicaraIzKlubaTak2 || Propozicije.MaxBrojTakmicaraIzKlubaTak2 != origPropozicije.MaxBrojTakmicaraIzKlubaTak2 || Propozicije.MaxBrojTakmicaraTak2VaziZaDrzavu != origPropozicije.MaxBrojTakmicaraTak2VaziZaDrzavu || Propozicije.BrojFinalistaTak2 != origPropozicije.BrojFinalistaTak2 || Propozicije.BrojRezerviTak2 != origPropozicije.BrojRezerviTak2) { rankPoredakUkupnoTak1 = true; } if (Propozicije.PostojiTak3 != origPropozicije.PostojiTak3) { // ignorisi, posto Takmicenje 3 uvek postoji, da bi se videli rezultati } if (Propozicije.OdvojenoTak3 != origPropozicije.OdvojenoTak3) { // Rangiraj ponovo rezultate jer se kval. status promenio. if (takmicenje.StandardnoTakmicenje) { rankPoredakSpravaTak1 = true; rankPoredakPreskokTak1 = true; } else if (takmicenje.FinaleKupa) { rankPoredakSpravaFinaleKupa = true; } } if (Propozicije.NeogranicenBrojTakmicaraIzKlubaTak3 != origPropozicije.NeogranicenBrojTakmicaraIzKlubaTak3 || Propozicije.MaxBrojTakmicaraIzKlubaTak3 != origPropozicije.MaxBrojTakmicaraIzKlubaTak3 || Propozicije.MaxBrojTakmicaraTak3VaziZaDrzavu != origPropozicije.MaxBrojTakmicaraTak3VaziZaDrzavu || Propozicije.BrojFinalistaTak3 != origPropozicije.BrojFinalistaTak3 || Propozicije.BrojRezerviTak3 != origPropozicije.BrojRezerviTak3) { if (takmicenje.StandardnoTakmicenje) { rankPoredakSpravaTak1 = true; rankPoredakPreskokTak1 = true; } else if (takmicenje.FinaleKupa) { rankPoredakSpravaFinaleKupa = true; } } if (Propozicije.VecaEOcenaImaPrednost != origPropozicije.VecaEOcenaImaPrednost) { if (takmicenje.StandardnoTakmicenje) { rankPoredakSpravaTak1 = true; rankPoredakPreskokTak1 = true; rankPoredakSpravaTak3 = true; rankPoredakPreskokTak3 = true; } else if (takmicenje.FinaleKupa) { rankPoredakSpravaTak1 = true; rankPoredakPreskokTak1 = true; } } if (Propozicije.Tak1PreskokNaOsnovuObaPreskoka != origPropozicije.Tak1PreskokNaOsnovuObaPreskoka) { if (takmicenje.StandardnoTakmicenje || takmicenje.FinaleKupa) { rankPoredakPreskokTak1 = true; } } if (Propozicije.Tak3PreskokNaOsnovuObaPreskoka != origPropozicije.Tak3PreskokNaOsnovuObaPreskoka) { if (takmicenje.StandardnoTakmicenje) { rankPoredakPreskokTak3 = true; } } // TODO: Fali kod za odvojeno ekipno finale kupa if (Propozicije.PostojiTak4 != origPropozicije.PostojiTak4) { // TODO4: Ovaj deo (konkretno grana else if (Propozicije.PostojiTak4)) je pravio probleme kada se // kreira takmicenje gde postoji jedno ekipno takmicenje za sve kategorije (prava vrednost za // ImaEkipnoTakmicenje se podesi u updateImaEkipnoTakmicenje, a onda se ovde pogresno postavi na true // za sva rez.takmicenja). Proveri da li moze (i kada) da pravi probleme to sto sam ceo ovaj deo // zakomentarisao /*if (takmicenje.ZavrsenoTak1) * { * // ignorisi * // TODO: Da li treba vracati originalnu vrednost za PostojiTak4 (isto i za PostojiTak2 i PostojiTak3) * } * else if (Propozicije.PostojiTak4) * { * // ignorisi, posto se PoredakEkipno za takmicenje 1 uvek kreira * ImaEkipnoTakmicenje = true; * } * else * { * // TODO: Razmisli da li treba pitati korisnika za potvrdu, pa zatim izbrisati ekipe i poredak ekipno. * ImaEkipnoTakmicenje = false; * }*/ // KombinovanoEkipnoTak se podesava u updateImaEkipnoTakmicenje. } if (Propozicije.OdvojenoTak4 != origPropozicije.OdvojenoTak4) { // Rangiraj ponovo rezultate jer se kval. status promenio. rankPoredakEkipeTak1 = true; } if (Propozicije.JednoTak4ZaSveKategorije != origPropozicije.JednoTak4ZaSveKategorije) { // rt.ImaEkipnoTakmicenje i rt.KombinovanoEkipnoTak su promenjeni u updateImaEkipnoTakmicenje. updateRezTak = true; // PoredakEkipno i Ekipe ignorisem, ostavljam korisniku da to ispodesava. } if (Propozicije.BrojRezultataKojiSeBodujuZaEkipu != origPropozicije.BrojRezultataKojiSeBodujuZaEkipu) { if (ImaEkipnoTakmicenje) { createPoredakEkipeTak1 = true; } } if (!createPoredakEkipeTak1 && ImaEkipnoTakmicenje) { // Proveri da li treba ponovo racunati poredak zbog promenjenog nacina racunanja viseboja. bool create = false; if (!KombinovanoEkipnoTak && Propozicije.ZaPreskokVisebojRacunajBoljuOcenu != origPropozicije.ZaPreskokVisebojRacunajBoljuOcenu) { create = true; } if (!create && KombinovanoEkipnoTak) { // Proveri da li je nekom rez. takmicenju unutar istog descriptiona promenjen nacin racunanja // viseboja. foreach (RezultatskoTakmicenje rt2 in rezTakmicenja) { if (!rt2.TakmicenjeDescription.Equals(TakmicenjeDescription)) { continue; } if (rt2.Propozicije.ZaPreskokVisebojRacunajBoljuOcenu != origPropozicijeMap[rt2.Id].ZaPreskokVisebojRacunajBoljuOcenu) { create = true; break; } } } if (create) { createPoredakEkipeTak1 = true; } } if (Propozicije.BrojEkipaUFinalu != origPropozicije.BrojEkipaUFinalu) { if (ImaEkipnoTakmicenje) { rankPoredakEkipeTak1 = true; } } if (Propozicije.NacinRacunanjaOceneFinaleKupaTak2 != origPropozicije.NacinRacunanjaOceneFinaleKupaTak2) { if (takmicenje.FinaleKupa) { calculatePoredakUkupnoFinaleKupa = true; } else if (takmicenje.ZbirViseKola) { calculatePoredakUkupnoZbirViseKola = true; } } if (Propozicije.NacinRacunanjaOceneFinaleKupaTak3 != origPropozicije.NacinRacunanjaOceneFinaleKupaTak3) { if (takmicenje.FinaleKupa) { calculatePoredakSpravaFinaleKupa = true; } } if (Propozicije.NacinRacunanjaOceneFinaleKupaTak4 != origPropozicije.NacinRacunanjaOceneFinaleKupaTak4) { if (takmicenje.FinaleKupa) { calculatePoredakEkipnoFinaleKupa = true; } else if (takmicenje.ZbirViseKola) { calculatePoredakEkipnoZbirViseKola = true; } } if (updateRezTak) { } if (createPoredakUkupnoTak1) { Takmicenje1.PoredakUkupno.create(this, oceneTak1); } else if (rankPoredakUkupnoTak1) { Takmicenje1.PoredakUkupno.rankRezultati(Propozicije); } if (rankPoredakSpravaTak1) { foreach (PoredakSprava ps in Takmicenje1.PoredakSprava) { ps.rankRezultati(Propozicije); } } if (rankPoredakPreskokTak1) { Takmicenje1.PoredakPreskok.rankRezultati(Propozicije); } if (rankPoredakSpravaTak3) { foreach (PoredakSprava ps in Takmicenje3.Poredak) { ps.rankRezultati(Propozicije); } } if (rankPoredakPreskokTak3) { Takmicenje3.PoredakPreskok.rankRezultati(Propozicije); } if (createPoredakEkipeTak1) { Takmicenje1.PoredakEkipno.create(this, Takmicenje.getEkipaRezultatiUkupnoMap(this, rezTakmicenja, DeoTakmicenjaKod.Takmicenje1)); } else if (rankPoredakEkipeTak1) { Takmicenje1.PoredakEkipno.rankRezultati(Propozicije); } if (calculatePoredakUkupnoFinaleKupa) { Takmicenje1.PoredakUkupnoFinaleKupa.calculateTotal(Propozicije); } if (calculatePoredakUkupnoZbirViseKola) { Takmicenje1.PoredakUkupnoZbirViseKola.calculateTotal(); } if (calculatePoredakSpravaFinaleKupa) { foreach (PoredakSpravaFinaleKupa p in Takmicenje1.PoredakSpravaFinaleKupa) { p.calculateTotal(Propozicije); } } else if (rankPoredakSpravaFinaleKupa) { foreach (PoredakSpravaFinaleKupa p in Takmicenje1.PoredakSpravaFinaleKupa) { p.rankRezultati(Propozicije); } } if (calculatePoredakEkipnoFinaleKupa) { Takmicenje1.PoredakEkipnoFinaleKupa.calculateTotal(Propozicije); } if (calculatePoredakEkipnoZbirViseKola) { Takmicenje1.PoredakEkipnoZbirViseKola.calculateTotal(); } }
public virtual void loadFromDump(StringReader reader, IdMap map) { RedBroj = byte.Parse(reader.ReadLine()); Gimnastika = (Gimnastika)Enum.Parse(typeof(Gimnastika), reader.ReadLine()); ImaEkipnoTakmicenje = bool.Parse(reader.ReadLine()); KombinovanoEkipnoTak = bool.Parse(reader.ReadLine()); Takmicenje = map.takmicenjeMap[int.Parse(reader.ReadLine())]; Kategorija = map.kategorijeMap[int.Parse(reader.ReadLine())]; TakmicenjeDescription = map.descriptionsMap[int.Parse(reader.ReadLine())]; string id = reader.ReadLine(); Propozicije p = null; if (id != NULL) { p = new Propozicije(); p.loadFromDump(reader); } Propozicije = p; id = reader.ReadLine(); Takmicenje1 t1 = null; if (id != NULL) { t1 = new Takmicenje1(); t1.loadFromDump(reader, map); } Takmicenje1 = t1; id = reader.ReadLine(); Takmicenje2 t2 = null; if (id != NULL) { t2 = new Takmicenje2(); t2.loadFromDump(reader, map); } Takmicenje2 = t2; id = reader.ReadLine(); Takmicenje3 t3 = null; if (id != NULL) { t3 = new Takmicenje3(); t3.loadFromDump(reader, map); } Takmicenje3 = t3; id = reader.ReadLine(); Takmicenje4 t4 = null; if (id != NULL) { t4 = new Takmicenje4(); t4.loadFromDump(reader, map); } Takmicenje4 = t4; }
private void updateKvalStatus(Propozicije propozicije) { if (deoTakKod != DeoTakmicenjaKod.Takmicenje1) return; if (!propozicije.PostojiTak4) return; doUpdateKvalStatus(propozicije.OdvojenoTak4, propozicije.BrojEkipaUFinalu, 0); }
public virtual bool odvojenoTak2() { return(Propozicije.odvojenoTak2()); }
private void clonePropozicije(Propozicije propozicije, Propozicije from) { // TODO3: Dodaj ono sto fali // TODO3: Probaj da koristis refleksiju za ovo (ili da ona izvrsi kopiranje, ili samo da te obavesti da li je // u medjuvremenu u klasi Propozicije dodato neko novo svojstvo, i ako jeste da generise izuzetak. Mogao bi i // da generisem jednostavan test suite koji bi proveravao ovo) // TODO3: Uvedi komentar TODO9 za ono sto mora uvek da se proverava kada se menja program (kao naprimer ovde sto // mora da se proverava da li sam u medjuvremenu dodao novo svojstvo u klasu Propozicije.) propozicije.MaxBrojTakmicaraIzKlubaTak1 = from.MaxBrojTakmicaraIzKlubaTak1; propozicije.PostojiTak2 = from.PostojiTak2; propozicije.OdvojenoTak2 = from.OdvojenoTak2; propozicije.NeogranicenBrojTakmicaraIzKlubaTak2 = from.NeogranicenBrojTakmicaraIzKlubaTak2; propozicije.MaxBrojTakmicaraIzKlubaTak2 = from.MaxBrojTakmicaraIzKlubaTak2; propozicije.BrojFinalistaTak2 = from.BrojFinalistaTak2; propozicije.BrojRezerviTak2 = from.BrojRezerviTak2; propozicije.PostojiTak3 = from.PostojiTak3; propozicije.OdvojenoTak3 = from.OdvojenoTak3; propozicije.NeogranicenBrojTakmicaraIzKlubaTak3 = from.NeogranicenBrojTakmicaraIzKlubaTak3; propozicije.MaxBrojTakmicaraIzKlubaTak3 = from.MaxBrojTakmicaraIzKlubaTak3; propozicije.MaxBrojTakmicaraTak3VaziZaDrzavu = from.MaxBrojTakmicaraTak3VaziZaDrzavu; propozicije.BrojFinalistaTak3 = from.BrojFinalistaTak3; propozicije.BrojRezerviTak3 = from.BrojRezerviTak3; propozicije.KvalifikantiTak3PreskokNaOsnovuObaPreskoka = from.KvalifikantiTak3PreskokNaOsnovuObaPreskoka; propozicije.PoredakTak3PreskokNaOsnovuObaPreskoka = from.PoredakTak3PreskokNaOsnovuObaPreskoka; propozicije.PostojiTak4 = from.PostojiTak4; propozicije.OdvojenoTak4 = from.OdvojenoTak4; propozicije.BrojRezultataKojiSeBodujuZaEkipu = from.BrojRezultataKojiSeBodujuZaEkipu; propozicije.BrojEkipaUFinalu = from.BrojEkipaUFinalu; propozicije.JednoTak4ZaSveKategorije = from.JednoTak4ZaSveKategorije; propozicije.Tak2FinalnaOcenaJeZbirObaKola = from.Tak2FinalnaOcenaJeZbirObaKola; propozicije.Tak2FinalnaOcenaJeMaxObaKola = from.Tak2FinalnaOcenaJeMaxObaKola; propozicije.Tak2FinalnaOcenaJeProsekObaKola = from.Tak2FinalnaOcenaJeProsekObaKola; propozicije.Tak2NeRacunajProsekAkoNemaOceneIzObaKola = from.Tak2NeRacunajProsekAkoNemaOceneIzObaKola; propozicije.Tak4FinalnaOcenaJeZbirObaKola = from.Tak4FinalnaOcenaJeZbirObaKola; propozicije.Tak4FinalnaOcenaJeMaxObaKola = from.Tak4FinalnaOcenaJeMaxObaKola; propozicije.Tak4FinalnaOcenaJeProsekObaKola = from.Tak4FinalnaOcenaJeProsekObaKola; propozicije.Tak4NeRacunajProsekAkoNemaOceneIzObaKola = from.Tak4NeRacunajProsekAkoNemaOceneIzObaKola; }
private void updateKvalStatus(Propozicije propozicije) { if (!propozicije.odvojenoTak2()) { foreach (RezultatUkupnoFinaleKupa r in Rezultati) { r.KvalStatus = KvalifikacioniStatus.None; } return; } List <RezultatUkupnoFinaleKupa> rezultati = new List <RezultatUkupnoFinaleKupa>(Rezultati); PropertyDescriptor propDesc = TypeDescriptor.GetProperties(typeof(RezultatUkupnoFinaleKupa))["RedBroj"]; rezultati.Sort(new SortComparer <RezultatUkupnoFinaleKupa>(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++) { RezultatUkupnoFinaleKupa rezultat = rezultati[i]; if (rezultat.Total == null) { rezultat.KvalStatus = KvalifikacioniStatus.None; continue; } int id; IDictionary <int, int> brojTakmicaraMap; 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.BrojFinalistaTak2) { if (propozicije.NeogranicenBrojTakmicaraIzKlubaTak2) { finCount++; rezultat.KvalStatus = KvalifikacioniStatus.Q; } else { if (brojTakmicaraMap[id] < propozicije.MaxBrojTakmicaraIzKlubaTak2) { finCount++; brojTakmicaraMap[id]++; rezultat.KvalStatus = KvalifikacioniStatus.Q; } else { if (Opcije.Instance.UzimajPrvuSlobodnuRezervu && rezCount < propozicije.BrojRezerviTak2) { rezCount++; rezultat.KvalStatus = KvalifikacioniStatus.R; } else { rezultat.KvalStatus = KvalifikacioniStatus.None; } } } } else if (rezCount < propozicije.BrojRezerviTak2) { if (propozicije.NeogranicenBrojTakmicaraIzKlubaTak2) { rezCount++; rezultat.KvalStatus = KvalifikacioniStatus.R; } else { if (brojTakmicaraMap[id] < propozicije.MaxBrojTakmicaraIzKlubaTak2) { rezCount++; brojTakmicaraMap[id]++; rezultat.KvalStatus = KvalifikacioniStatus.R; } else { if (Opcije.Instance.UzimajPrvuSlobodnuRezervu && rezCount < propozicije.BrojRezerviTak2) { rezCount++; rezultat.KvalStatus = KvalifikacioniStatus.R; } else { rezultat.KvalStatus = KvalifikacioniStatus.None; } } } } else { rezultat.KvalStatus = KvalifikacioniStatus.None; } } }
private void updateKvalStatus(Propozicije propozicije) { if (deoTakKod != DeoTakmicenjaKod.Takmicenje1) return; if (!propozicije.PostojiTak2) return; doUpdateKvalStatus(propozicije.OdvojenoTak2, propozicije.BrojFinalistaTak2, propozicije.NeogranicenBrojTakmicaraIzKlubaTak2, propozicije.MaxBrojTakmicaraIzKlubaTak2, propozicije.BrojRezerviTak2); }
private void updateKvalStatus(Propozicije propozicije) { if (deoTakKod != DeoTakmicenjaKod.Takmicenje1) return; if (!propozicije.PostojiTak3) return; doUpdateKvalStatus(propozicije.OdvojenoTak3, propozicije.BrojFinalistaTak3, propozicije.NeogranicenBrojTakmicaraIzKlubaTak3, propozicije.MaxBrojTakmicaraIzKlubaTak3, propozicije.MaxBrojTakmicaraTak3VaziZaDrzavu, propozicije.BrojRezerviTak3, propozicije.KvalifikantiTak3PreskokNaOsnovuObaPreskoka); }