Example #1
0
        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;
        }
Example #2
0
        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);
            }
        }
Example #4
0
        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;
        }