public virtual void loadFromDump(StringReader reader, IdMap map) { int count = int.Parse(reader.ReadLine()); for (int i = 0; i < count; ++i) { reader.ReadLine(); // id UcesnikTakmicenja3 u = new UcesnikTakmicenja3(); u.loadFromDump(reader, map); Ucesnici.Add(u); } count = int.Parse(reader.ReadLine()); for (int i = 0; i < count; ++i) { reader.ReadLine(); // id PoredakSprava p = new PoredakSprava(); p.loadFromDump(reader, map); Poredak.Add(p); } string id = reader.ReadLine(); PoredakPreskok p2 = null; if (id != NULL) { p2 = new PoredakPreskok(); p2.loadFromDump(reader, map); } PoredakPreskok = p2; }
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)); }
// TODO3: Kod finala kupa bi trebalo kod kloniranja ubaciti gimnasticare iz oba kola. public virtual void create(RezultatskoTakmicenje rezTak, PoredakSprava poredakPrvoKolo, PoredakSprava poredakDrugoKolo, List<RezultatSpravaFinaleKupaUpdate> rezultatiUpdate) { IList<GimnasticarUcesnik> gimnasticari = new List<GimnasticarUcesnik>(rezTak.Takmicenje1.Gimnasticari); IDictionary<GimnasticarUcesnik, RezultatSpravaFinaleKupa> rezultatiMap = new Dictionary<GimnasticarUcesnik, RezultatSpravaFinaleKupa>(); foreach (GimnasticarUcesnik g in gimnasticari) { RezultatSpravaFinaleKupa rezultat = new RezultatSpravaFinaleKupa(); rezultat.Gimnasticar = g; rezultatiMap.Add(g, rezultat); } if (poredakPrvoKolo != null) { foreach (RezultatSprava r in poredakPrvoKolo.Rezultati) { if (rezultatiMap.ContainsKey(r.Gimnasticar)) { RezultatSpravaFinaleKupa r2 = rezultatiMap[r.Gimnasticar]; r2.D_PrvoKolo = r.D; r2.E_PrvoKolo = r.E; r2.TotalPrvoKolo = r.Total; } } } if (poredakDrugoKolo != null) { foreach (RezultatSprava r in poredakDrugoKolo.Rezultati) { if (rezultatiMap.ContainsKey(r.Gimnasticar)) { RezultatSpravaFinaleKupa r2 = rezultatiMap[r.Gimnasticar]; r2.D_DrugoKolo = r.D; r2.E_DrugoKolo = r.E; r2.TotalDrugoKolo = r.Total; } } } List<RezultatSpravaFinaleKupa> rezultati = new List<RezultatSpravaFinaleKupa>(rezultatiMap.Values); Rezultati.Clear(); foreach (RezultatSpravaFinaleKupa r in rezultati) Rezultati.Add(r); // Total moze da bude krajnja finalna ocena ili ulazna finalna ocena. U oba slucaja se Total izracunava // na isti nacin. foreach (RezultatSpravaFinaleKupa rez in Rezultati) { if (rez.TotalPrvoKolo == null && rez.TotalDrugoKolo == null) { rez.setTotal(null); continue; } float total1 = rez.TotalPrvoKolo == null ? 0 : rez.TotalPrvoKolo.Value; float total2 = rez.TotalDrugoKolo == null ? 0 : rez.TotalDrugoKolo.Value; float total; if (rezTak.Propozicije.Tak3FinalnaOcenaJeZbirObaKola) total = total1 + total2; else if (rezTak.Propozicije.Tak3FinalnaOcenaJeMaxObaKola) total = total1 > total2 ? total1 : total2; else { // TODO3: Proveri da li ovde treba podesavati broj decimala. total = (total1 + total2) / 2; if (rezTak.Propozicije.Tak3NeRacunajProsekAkoNemaOceneIzObaKola && (rez.TotalPrvoKolo == null || rez.TotalDrugoKolo == null)) { total = total1 + total2; } } rez.setTotal(total); } rankRezultati(); if (rezTak.Propozicije.OdvojenoTak3) { updateKvalStatus(rezTak.Propozicije.BrojFinalistaTak3, rezTak.Propozicije.NeogranicenBrojTakmicaraIzKlubaTak3, rezTak.Propozicije.MaxBrojTakmicaraIzKlubaTak3, rezTak.Propozicije.MaxBrojTakmicaraTak3VaziZaDrzavu, rezTak.Propozicije.BrojRezerviTak3); applyRezultatiUpdate(rezultatiUpdate); } }
public virtual void loadFromDump(StringReader reader, IdMap map) { int count = int.Parse(reader.ReadLine()); for (int i = 0; i < count; ++i) { Gimnasticari.Add(map.gimnasticariMap[int.Parse(reader.ReadLine())]); } string id; count = int.Parse(reader.ReadLine()); for (int i = 0; i < count; ++i) { id = reader.ReadLine(); Ekipa e = new Ekipa(); map.ekipeMap.Add(int.Parse(id), e); e.loadFromDump(reader, map); Ekipe.Add(e); } id = reader.ReadLine(); PoredakUkupno poredakUkupno = null; if (id != NULL) { poredakUkupno = new PoredakUkupno(); poredakUkupno.loadFromDump(reader, map); } PoredakUkupno = poredakUkupno; count = int.Parse(reader.ReadLine()); for (int i = 0; i < count; ++i) { reader.ReadLine(); // id PoredakSprava poredakSprava = new PoredakSprava(); poredakSprava.loadFromDump(reader, map); PoredakSprava.Add(poredakSprava); } id = reader.ReadLine(); PoredakPreskok poredakPreskok = null; if (id != NULL) { poredakPreskok = new PoredakPreskok(); poredakPreskok.loadFromDump(reader, map); } PoredakPreskok = poredakPreskok; id = reader.ReadLine(); PoredakEkipno poredakEkipno = null; if (id != NULL) { poredakEkipno = new PoredakEkipno(); poredakEkipno.loadFromDump(reader, map); } PoredakEkipno = poredakEkipno; id = reader.ReadLine(); PoredakUkupnoFinaleKupa poredakUkupnoFinaleKupa = null; if (id != NULL) { poredakUkupnoFinaleKupa = new PoredakUkupnoFinaleKupa(); poredakUkupnoFinaleKupa.loadFromDump(reader, map); } PoredakUkupnoFinaleKupa = poredakUkupnoFinaleKupa; count = int.Parse(reader.ReadLine()); for (int i = 0; i < count; ++i) { reader.ReadLine(); // id PoredakSpravaFinaleKupa p = new PoredakSpravaFinaleKupa(); p.loadFromDump(reader, map); PoredakSpravaFinaleKupa.Add(p); } id = reader.ReadLine(); PoredakEkipnoFinaleKupa poredakEkipnoFinaleKupa = null; if (id != NULL) { poredakEkipnoFinaleKupa = new PoredakEkipnoFinaleKupa(); poredakEkipnoFinaleKupa.loadFromDump(reader, map); } PoredakEkipnoFinaleKupa = poredakEkipnoFinaleKupa; id = reader.ReadLine(); PoredakUkupnoZbirViseKola poredakUkupnoZbirViseKola = null; if (id != NULL) { poredakUkupnoZbirViseKola = new PoredakUkupnoZbirViseKola(); poredakUkupnoZbirViseKola.loadFromDump(reader, map); } PoredakUkupnoZbirViseKola = poredakUkupnoZbirViseKola; id = reader.ReadLine(); PoredakEkipnoZbirViseKola poredakEkipnoZbirViseKola = null; if (id != NULL) { poredakEkipnoZbirViseKola = new PoredakEkipnoZbirViseKola(); poredakEkipnoZbirViseKola.loadFromDump(reader, map); } PoredakEkipnoZbirViseKola = poredakEkipnoZbirViseKola; }