public virtual void create(RezultatskoTakmicenje rezTak, IList<Ocena> ocene) { IList<GimnasticarUcesnik> gimnasticari; if (deoTakKod == DeoTakmicenjaKod.Takmicenje1) gimnasticari = new List<GimnasticarUcesnik>(rezTak.Takmicenje1.Gimnasticari); else gimnasticari = new List<GimnasticarUcesnik>(rezTak.Takmicenje2.getUcesniciGimKvalifikanti()); IDictionary<int, RezultatUkupno> rezultatiMap = new Dictionary<int, RezultatUkupno>(); foreach (GimnasticarUcesnik g in gimnasticari) { RezultatUkupno rezultat = new RezultatUkupno(); rezultat.Gimnasticar = g; rezultatiMap.Add(g.Id, rezultat); } foreach (Ocena o in ocene) { if (rezultatiMap.ContainsKey(o.Gimnasticar.Id)) rezultatiMap[o.Gimnasticar.Id].addOcena(o); } List<RezultatUkupno> rezultati = new List<RezultatUkupno>(rezultatiMap.Values); Rezultati.Clear(); foreach (RezultatUkupno rez in rezultati) Rezultati.Add(rez); rankRezultati(); updateKvalStatus(rezTak.Propozicije); }
public static RezultatUkupno getRezultatUkupnoForEkipniRezultat(GimnasticarUcesnik g, IList <Pair <RezultatskoTakmicenje, RezultatUkupno> > rezultati) { RezultatUkupno result; if (rezultati.Count == 0) { result = new RezultatUkupno(); result.Gimnasticar = g; } else if (rezultati.Count == 1) { result = rezultati[0].Second; } else { // TODO4: Gimnasticar je ucestvovao na vise rez. takmicenja. Ovde bi najpre trebalo // proveriti da li su propozicije za sva ta rez. takmicenja ista, sto se tice viseboja // (npr. treba proveriti da li se preskok racuna na osnovu prvog ili boljeg skoka). // Ako su propozicije iste, moze se uzeti bilo koji RezultatUkupno. Ako propozicije nisu // iste, treba uzeti rezultate (ako postoje) iz rez. takmicenja rt (ciju ekipu trenutno // gledamo), ili iz rez. takmicenja ciji description je isti kao i za rt. Ako ni to nije // moguce, treba uzeti bilo koje rezultate (ako postoje), uz eventualno obavestenje // korsniku da je gimnasticar clan ekipe a nije ucestvovao u tom takmicenje descriptionu. result = rezultati[0].Second; } return(result); }
private bool postojiIstiKvalRezultatIzKluba(RezultatUkupno rezultat, List <RezultatUkupno> rezultati, List <bool> porediDrzavu) { for (int i = 0; i < rezultati.Count; ++i) { RezultatUkupno r = rezultati[i]; if (r.KvalStatus != KvalifikacioniStatus.Q || r.Rank != rezultat.Rank) { continue; } if (porediDrzavu[i]) { if (r.Gimnasticar.DrzavaUcesnik.Id == rezultat.Gimnasticar.DrzavaUcesnik.Id) { return(true); } } else if (r.Gimnasticar.KlubUcesnik.Id == rezultat.Gimnasticar.KlubUcesnik.Id) { return(true); } } return(false); }
public virtual void deleteGimnasticar(GimnasticarUcesnik g, RezultatskoTakmicenje rezTak) { RezultatUkupno r = getRezultat(g); if (r != null) { Rezultati.Remove(r); rankRezultati(rezTak.Propozicije); } }
public virtual void deleteOcena(Ocena o, RezultatskoTakmicenje rezTak) { RezultatUkupno r = getRezultat(o.Gimnasticar); if (r != null) { r.clearSprava(o.Sprava); rankRezultati(rezTak.Propozicije); } }
public virtual void addOcena(Ocena o, RezultatskoTakmicenje rezTak) { RezultatUkupno r = getRezultat(o.Gimnasticar); if (r != null) { r.addSprava(o, rezTak.Propozicije.ZaPreskokVisebojRacunajBoljuOcenu); rankRezultati(rezTak.Propozicije); } }
public virtual void initPrvoKolo(RezultatUkupno r) { ParterPrvoKolo = r.Parter; KonjPrvoKolo = r.Konj; KarikePrvoKolo = r.Karike; PreskokPrvoKolo = r.Preskok; RazbojPrvoKolo = r.Razboj; VratiloPrvoKolo = r.Vratilo; DvovisinskiRazbojPrvoKolo = r.DvovisinskiRazboj; GredaPrvoKolo = r.Greda; TotalPrvoKolo = r.Total; }
public virtual void initDrugoKolo(RezultatUkupno r) { ParterDrugoKolo = r.Parter; KonjDrugoKolo = r.Konj; KarikeDrugoKolo = r.Karike; PreskokDrugoKolo = r.Preskok; RazbojDrugoKolo = r.Razboj; VratiloDrugoKolo = r.Vratilo; DvovisinskiRazbojDrugoKolo = r.DvovisinskiRazboj; GredaDrugoKolo = r.Greda; TotalDrugoKolo = r.Total; }
public virtual void initTreceKolo(RezultatUkupno r) { ParterTreceKolo = r.Parter; KonjTreceKolo = r.Konj; KarikeTreceKolo = r.Karike; PreskokTreceKolo = r.Preskok; RazbojTreceKolo = r.Razboj; VratiloTreceKolo = r.Vratilo; DvovisinskiRazbojTreceKolo = r.DvovisinskiRazboj; GredaTreceKolo = r.Greda; TotalTreceKolo = r.Total; }
public virtual void initCetvrtoKolo(RezultatUkupno r) { ParterCetvrtoKolo = r.Parter; KonjCetvrtoKolo = r.Konj; KarikeCetvrtoKolo = r.Karike; PreskokCetvrtoKolo = r.Preskok; RazbojCetvrtoKolo = r.Razboj; VratiloCetvrtoKolo = r.Vratilo; DvovisinskiRazbojCetvrtoKolo = r.DvovisinskiRazboj; GredaCetvrtoKolo = r.Greda; TotalCetvrtoKolo = r.Total; }
public virtual void loadFromDump(StringReader reader, IdMap map) { DeoTakmicenjaKod = (DeoTakmicenjaKod)Enum.Parse(typeof(DeoTakmicenjaKod), reader.ReadLine()); int brojRezultata = int.Parse(reader.ReadLine()); for (int i = 0; i < brojRezultata; ++i) { reader.ReadLine(); // id RezultatUkupno r = new RezultatUkupno(); r.loadFromDump(reader, map); Rezultati.Add(r); } }
public virtual void addGimnasticar(GimnasticarUcesnik g, IList<Ocena> ocene, RezultatskoTakmicenje rezTak) { RezultatUkupno r = new RezultatUkupno(); r.Gimnasticar = g; if (ocene.Count > 0) { foreach (Ocena o in ocene) r.addOcena(o); } Rezultati.Add(r); rankRezultati(); updateKvalStatus(rezTak.Propozicije); }
public RezultatUkupnoExtended(RezultatUkupno rez) { RedBroj = rez.RedBroj; Rank = rez.Rank; KvalStatus = rez.KvalStatus; Total = rez.Total; Parter = rez.Parter; Konj = rez.Konj; Karike = rez.Karike; Preskok = rez.Preskok; Razboj = rez.Razboj; Vratilo = rez.Vratilo; Greda = rez.Greda; DvovisinskiRazboj = rez.DvovisinskiRazboj; Gimnasticar = rez.Gimnasticar; }
public RezultatUkupnoExtended(RezultatUkupno r) { RedBroj = r.RedBroj; Rank = r.Rank; KvalStatus = r.KvalStatus; Total = r.Total; Parter = r.Parter; Konj = r.Konj; Karike = r.Karike; Preskok = r.Preskok; Razboj = r.Razboj; Vratilo = r.Vratilo; Greda = r.Greda; DvovisinskiRazboj = r.DvovisinskiRazboj; Gimnasticar = r.Gimnasticar; }
// Ako je finaleMemorijala == true, to znaci da postoji samo takmicenje 1 ali da se poredak izracunava tako // sto postoje ogranicenja za broj gimnasticara iz kluba/drzave. public virtual void create(RezultatskoTakmicenje rezTak, IList <Ocena> ocene, bool finaleMemorijala = false, int maxBrojTakmicaraIzKluba = 0, bool maxBrojTakmicaraVaziZaDrzavu = false) { IList <GimnasticarUcesnik> gimnasticari; if (deoTakKod == DeoTakmicenjaKod.Takmicenje1) { gimnasticari = new List <GimnasticarUcesnik>(rezTak.Takmicenje1.Gimnasticari); } else { gimnasticari = new List <GimnasticarUcesnik>(rezTak.Takmicenje2.getUcesniciGimKvalifikanti()); } IDictionary <int, RezultatUkupno> rezultatiMap = new Dictionary <int, RezultatUkupno>(); foreach (GimnasticarUcesnik g in gimnasticari) { RezultatUkupno r = new RezultatUkupno(); r.Gimnasticar = g; rezultatiMap.Add(g.Id, r); } foreach (Ocena o in ocene) { if (rezultatiMap.ContainsKey(o.Gimnasticar.Id)) { rezultatiMap[o.Gimnasticar.Id].addSprava(o, rezTak.Propozicije.ZaPreskokVisebojRacunajBoljuOcenu); } } Rezultati.Clear(); foreach (RezultatUkupno r in rezultatiMap.Values) { if (r.Gimnasticar.PenaltyViseboj != null) { r.addPenalty(r.Gimnasticar.PenaltyViseboj.Value); } Rezultati.Add(r); } rankRezultati(rezTak.Propozicije, finaleMemorijala, maxBrojTakmicaraIzKluba, maxBrojTakmicaraVaziZaDrzavu); }
public virtual void addGimnasticar(GimnasticarUcesnik g, IList <Ocena> ocene, RezultatskoTakmicenje rezTak) { RezultatUkupno r = new RezultatUkupno(); r.Gimnasticar = g; if (ocene.Count > 0) { foreach (Ocena o in ocene) { if (o.Gimnasticar.Id == g.Id) { r.addSprava(o, rezTak.Propozicije.ZaPreskokVisebojRacunajBoljuOcenu); } } } if (g.PenaltyViseboj != null) { r.addPenalty(g.PenaltyViseboj.Value); } Rezultati.Add(r); rankRezultati(rezTak.Propozicije); }
private void updateKvalStatus(bool odvojenoTak2, int brojFinalistaTak2, int brojRezerviTak2, bool neogranicenBrojTakmicaraIzKlubaTak2, int maxBrojTakmicaraIzKlubaTak2, bool maxBrojTakmicaraTak2VaziZaDrzavu) { foreach (RezultatUkupno r in Rezultati) { r.KvalStatus = KvalifikacioniStatus.None; } if (deoTakKod != DeoTakmicenjaKod.Takmicenje1 || !odvojenoTak2) { return; } List <RezultatUkupno> rezultati = new List <RezultatUkupno>(Rezultati); PropertyDescriptor propDesc = TypeDescriptor.GetProperties(typeof(RezultatUkupno))["RedBroj"]; rezultati.Sort(new SortComparer <RezultatUkupno>(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; RezultatUkupno prevFinRezultat = null; List <bool> porediDrzavu = new List <bool>(); for (int i = 0; i < rezultati.Count; i++) { RezultatUkupno rezultat = rezultati[i]; if (rezultat.Total == null) { rezultat.KvalStatus = KvalifikacioniStatus.None; continue; } if (!neogranicenBrojTakmicaraIzKlubaTak2) { porediDrzavu.Add(false); if (maxBrojTakmicaraTak2VaziZaDrzavu) { 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 < brojFinalistaTak2 || rezultat.Rank == prevFinRezultat.Rank) { if (neogranicenBrojTakmicaraIzKlubaTak2 || brojTakmicaraMap[id] < maxBrojTakmicaraIzKlubaTak2 || postojiIstiKvalRezultatIzKluba(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 sprava isto). finCount++; rezultat.KvalStatus = KvalifikacioniStatus.Q; prevFinRezultat = rezultat; if (!neogranicenBrojTakmicaraIzKlubaTak2) { brojTakmicaraMap[id]++; } } else if (rezCount < brojRezerviTak2 && Opcije.Instance.UzimajPrvuSlobodnuRezervu) { rezCount++; rezultat.KvalStatus = KvalifikacioniStatus.R; } else { rezultat.KvalStatus = KvalifikacioniStatus.None; } } else if (rezCount < brojRezerviTak2) { if (neogranicenBrojTakmicaraIzKlubaTak2 || brojTakmicaraMap[id] < maxBrojTakmicaraIzKlubaTak2) { rezCount++; rezultat.KvalStatus = KvalifikacioniStatus.R; if (!neogranicenBrojTakmicaraIzKlubaTak2) { 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 sprave). rezultat.KvalStatus = KvalifikacioniStatus.None; } } }
public virtual void promeniPenalizaciju(RezultatUkupno r, float?penalty, RezultatskoTakmicenje rezTak) { r.promeniPenalizacijuZaViseboj(penalty); rankRezultati(rezTak.Propozicije); }
private IDictionary<int, List<RezultatUkupno>> createEkipaRezultatiUkupnoMap( IList<Ekipa> ekipe, IList<Ocena> ocene) { IDictionary<int, RezultatUkupno> gimRezUkupnoMap = new Dictionary<int, RezultatUkupno>(); foreach (Ekipa e in ekipe) { foreach (GimnasticarUcesnik g in e.Gimnasticari) { if (!gimRezUkupnoMap.ContainsKey(g.Id)) { RezultatUkupno rez = new RezultatUkupno(); rez.Gimnasticar = g; gimRezUkupnoMap.Add(g.Id, rez); } } } foreach (Ocena o in ocene) { if (gimRezUkupnoMap.ContainsKey(o.Gimnasticar.Id)) gimRezUkupnoMap[o.Gimnasticar.Id].addOcena(o); } IDictionary<int, List<RezultatUkupno>> ekipaRezultatiMap = new Dictionary<int, List<RezultatUkupno>>(); foreach (Ekipa e in ekipe) { List<RezultatUkupno> rezultati = new List<RezultatUkupno>(); ekipaRezultatiMap.Add(e.Id, rezultati); foreach (GimnasticarUcesnik g in e.Gimnasticari) { rezultati.Add(gimRezUkupnoMap[g.Id]); } } return ekipaRezultatiMap; }
public virtual void initRezultati(IList<GimnasticarUcesnik> gimnasticari) { Rezultati.Clear(); foreach (GimnasticarUcesnik g in gimnasticari) { RezultatUkupno r = new RezultatUkupno(); r.Gimnasticar = g; Rezultati.Add(r); } // posto nepostoje ocene, sledeci poziv samo sortira po prezimenu i na // osnovu toga dodeljuje RedBroj rankRezultati(); }