Esempio n. 1
0
        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;
                }
            }
        }
Esempio n. 2
0
 public virtual bool odvojenoTak2()
 {
     return(Propozicije.odvojenoTak2());
 }
Esempio n. 3
0
        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);
            }
        }