コード例 #1
0
ファイル: PoredakUkupno.cs プロジェクト: stankela/bilten
        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);
        }
コード例 #2
0
        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);
        }
コード例 #3
0
        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);
        }
コード例 #4
0
        public virtual void deleteGimnasticar(GimnasticarUcesnik g, RezultatskoTakmicenje rezTak)
        {
            RezultatUkupno r = getRezultat(g);

            if (r != null)
            {
                Rezultati.Remove(r);
                rankRezultati(rezTak.Propozicije);
            }
        }
コード例 #5
0
        public virtual void deleteOcena(Ocena o, RezultatskoTakmicenje rezTak)
        {
            RezultatUkupno r = getRezultat(o.Gimnasticar);

            if (r != null)
            {
                r.clearSprava(o.Sprava);
                rankRezultati(rezTak.Propozicije);
            }
        }
コード例 #6
0
        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);
            }
        }
コード例 #7
0
 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;
 }
コード例 #8
0
 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;
 }
コード例 #9
0
 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;
 }
コード例 #10
0
 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;
 }
コード例 #11
0
        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);
            }
        }
コード例 #12
0
ファイル: PoredakUkupno.cs プロジェクト: stankela/bilten
        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);
        }
コード例 #13
0
        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;
        }
コード例 #14
0
        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;
        }
コード例 #15
0
        // 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);
        }
コード例 #16
0
        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);
        }
コード例 #17
0
        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;
                }
            }
        }
コード例 #18
0
 public virtual void promeniPenalizaciju(RezultatUkupno r, float?penalty, RezultatskoTakmicenje rezTak)
 {
     r.promeniPenalizacijuZaViseboj(penalty);
     rankRezultati(rezTak.Propozicije);
 }
コード例 #19
0
ファイル: PoredakEkipno.cs プロジェクト: stankela/bilten
        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;
        }
コード例 #20
0
ファイル: PoredakUkupno.cs プロジェクト: stankela/bilten
        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();
        }