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; } } }
public virtual bool odvojenoTak2() { return(Propozicije.odvojenoTak2()); }
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); } }