예제 #1
0
        private void CaricaGironiCreati(int idTorneo, int idDisciplina)
        {
            _dicFighter = new Dictionary <string, int>();

            numeroGironi = SqlDal_Pools.GetNumeroGironiByTorneoDisciplina(idTorneo, idDisciplina);

            if (numeroGironi > 0)
            {
                gironi = new List <List <AtletaEntity> >();
                gironi = SqlDal_Pools.GetGironiSalvati(idTorneo, idDisciplina);

                numeroAtletiTorneoDisciplina = gironi.SelectMany(list => list).Distinct().Count();

                gironiIncontri = new List <List <MatchEntity> >();

                tabControlPool.Items.Clear();

                Int32 idGirone = 1;

                foreach (List <AtletaEntity> poolList in gironi)
                {
                    List <MatchEntity> matchList = null;

                    //TODO eliminabile visto che sono già sul DB
                    if (poolList.Count == 4)
                    {
                        matchList = Helper.ElaborateT4(poolList);
                    }
                    else if (poolList.Count == 5)
                    {
                        matchList = Helper.ElaborateT5(poolList);
                    }
                    else if (poolList.Count == 6)
                    {
                        matchList = Helper.ElaborateT6(poolList);
                    }

                    if (matchList != null)
                    {
                        foreach (MatchEntity i in matchList)
                        {
                            SqlDal_Pools.CaricaPunteggiEsistentiGironiIncontri(idTorneo, idDisciplina, i, idGirone);
                        }

                        gironiIncontri.Add(matchList);
                        string title = "Girone " + (tabControlPool.Items.Count + 1).ToString();
                        tabControlPool.Items.Add(ElaboraTab(idTorneo, idDisciplina, title, poolList, matchList, tabControlPool.Items.Count + 1));
                    }
                    idGirone++;
                }

                EnablePageControls();
            }
            else
            {
                MessageBox.Show("Si è verificato un errore durante il recupero delle informazioni sul numero dei gironi \r\nContattare un amministratore",
                                "ERRORE Applicazione", MessageBoxButton.OK, MessageBoxImage.Error);
            }
        }
예제 #2
0
        private void creaGironiAndLoad(int idTorneo, int idDisciplina)
        {
            _dicFighter = new Dictionary <string, int>();

            //loadToolStripMenuItem.Enabled = false;      //Non permetto più di caricare i dati (in teoria va fatto meglio)

            //partecipantiTorneo = CaricaAtleti();

            // i dati in lettura vanno fatti caricando la disciplina dal DB (divisione per disciplina)
            //se sono in presenza degli assoluti, per ora, carico i dati ordinati solo per ranking e senza random dei nomi all'interno delle ASD
            //partecipantiTorneo = assoluti == false ?
            //                                    Helper.GetAtletiTorneoVsDisciplina(idTorneo, idDisciplina, categoria) :
            //                                    Helper.GetAtletiTorneoVsDisciplinaAssoluti(idTorneo, idDisciplina, categoria);

            SqlDal_Pools.DeletePoolsAndMatches(idTorneo, idDisciplina);

            var partecipantiTorneo = SqlDal_Tournaments.GetAtletiTorneoVsDisciplinaAssoluti(idTorneo, idDisciplina);

            //TODO: da parametrizzare

            bool rankingEnabled = partecipantiTorneo.Sum(x => x.Ranking) != 0;

            numeroGironi = SqlDal_Pools.GetNumeroGironiByTorneoDisciplina(idTorneo, idDisciplina);


            if (numeroGironi > 0)
            {
                gironi = new List <List <AtletaEntity> >();

                //Setting delle strutture dati
                for (int i = 0; i < numeroGironi; i++)
                {
                    //Per ogni girone creo la lista, vuota al momento, dei partecipanti al girone stesso
                    gironi.Add(new List <AtletaEntity>());
                }

                //Inserisco ogni partecipante del torneo dentro la struttura dati dei gironi
                //e dell'albero nella posizione corrispondente
                //(l'abero deve essere visualizzato via WEB : quando ci clicchi ti deve far vedere la lista e lo stato degli incontri al suo interno
                int count = 0;

                if (!rankingEnabled)
                {
                    foreach (AtletaEntity a in partecipantiTorneo)    //ciclo sui gironi, e sulla lista atleti partecipanti al torneo, inserendo ogni atleta in un girone diverso, e poi rifacendo il giro
                    {
                        gironi[count].Add(a);

                        if (count == numeroGironi - 1)
                        {
                            count = 0;
                        }
                        else
                        {
                            count++;
                        }
                    }
                }
                else
                {
                    //qui ci va il codice per il calcolo dei gironi con gli assoluti
                    int fasceAssoluti   = 4;
                    int atletiPerfascia = partecipantiTorneo.Count / fasceAssoluti;

                    #region inizializziani 4 fasce
                    List <AtletaEntity> primaFascia   = new List <AtletaEntity>();
                    List <AtletaEntity> secondaFascia = new List <AtletaEntity>();
                    List <AtletaEntity> terzaFascia   = new List <AtletaEntity>();
                    List <AtletaEntity> quartaFascia  = new List <AtletaEntity>();
                    #endregion

                    //primo quarto
                    primaFascia.AddRange(partecipantiTorneo.GetRange(0, atletiPerfascia));
                    //secondo quarto
                    secondaFascia.AddRange(partecipantiTorneo.GetRange(atletiPerfascia, atletiPerfascia));
                    //terzo quarto
                    terzaFascia.AddRange(partecipantiTorneo.GetRange(2 * atletiPerfascia, atletiPerfascia));
                    //tutti i restanti
                    quartaFascia.AddRange(partecipantiTorneo.GetRange(3 * atletiPerfascia, atletiPerfascia + (partecipantiTorneo.Count - (4 * atletiPerfascia))));

                    foreach (List <AtletaEntity> g in gironi)
                    {
                        //inserisco il primo atleta di ogni fascia nel girone i-esimo
                        if (primaFascia.Count > 0)
                        {
                            g.Add(primaFascia.ElementAt(0));
                        }
                        if (secondaFascia.Count > 0)
                        {
                            g.Add(secondaFascia.ElementAt(0));
                        }
                        if (terzaFascia.Count > 0)
                        {
                            g.Add(terzaFascia.ElementAt(0));
                        }
                        if (quartaFascia.Count > 0)
                        {
                            g.Add(quartaFascia.ElementAt(0));
                        }

                        //elimino quell'atleta dalla lista dei papabili
                        if (primaFascia.Count > 0)
                        {
                            primaFascia.RemoveAt(0);
                        }
                        if (secondaFascia.Count > 0)
                        {
                            secondaFascia.RemoveAt(0);
                        }
                        if (terzaFascia.Count > 0)
                        {
                            terzaFascia.RemoveAt(0);
                        }
                        if (quartaFascia.Count > 0)
                        {
                            quartaFascia.RemoveAt(0);
                        }
                    }

                    //gestisco eventuali orfani : GIRONI da 5
                    //per sicurezza controllo tutte le fasce ma sarà solo la quarta ad avere degli orfani
                    //che andaranno inseriti nei gironi già popolati a partire dal primo
                    if (primaFascia.Count > 0 || secondaFascia.Count > 0 || terzaFascia.Count > 0 || quartaFascia.Count > 0)
                    {
                        foreach (List <AtletaEntity> g in gironi)
                        {
                            if (primaFascia.Count > 0)
                            {
                                g.Add(primaFascia.ElementAt(0));
                                primaFascia.RemoveAt(0);
                            }
                            else if (secondaFascia.Count > 0)
                            {
                                g.Add(secondaFascia.ElementAt(0));
                                secondaFascia.RemoveAt(0);
                            }
                            else if (terzaFascia.Count > 0)
                            {
                                g.Add(terzaFascia.ElementAt(0));
                                terzaFascia.RemoveAt(0);
                            }
                            else if (quartaFascia.Count > 0)
                            {
                                g.Add(quartaFascia.ElementAt(0));
                                quartaFascia.RemoveAt(0);
                            }
                            else
                            {
                                break;
                            }
                        }
                    }
                }

                ///TODO
                ///per ogni girone devo creare la lsita corrispondente degli scontri
                ///- nuova struttura dati dei gironi/scontri che ogni posizione contiene una lista di incontri
                ///- tali incontri vanno salvati sul DB
                ///- tali incontri dovranno, in futuro, essere anche visualizzati via WEB
                ///
                gironiIncontri = new List <List <MatchEntity> >();

                tabControlPool.Items.Clear();

                Int32 idGirone = 1;

                foreach (List <AtletaEntity> g in gironi)
                {
                    List <MatchEntity> matchList = null;

                    if (g.Count == 4)
                    {
                        matchList = Helper.ElaborateT4(g);
                    }
                    else if (g.Count == 5)
                    {
                        matchList = Helper.ElaborateT5(g);
                    }
                    else if (g.Count == 6)
                    {
                        matchList = Helper.ElaborateT6(g);
                    }

                    gironiIncontri.Add(matchList);
                    string title = "Girone " + (tabControlPool.Items.Count + 1).ToString();
                    tabControlPool.Items.Add(ElaboraTab(idTorneo, idDisciplina, title, g, matchList, tabControlPool.Items.Count + 1));

                    //TODO l'inserimento va fatto solo se già non è stato fatto, altrimenti vanno eliminati TUTTI i dati
                    SqlDal_Pools.InserisciGironiIncontri(idTorneo, idDisciplina, matchList, idGirone);

                    foreach (AtletaEntity a in g)
                    {
                        SqlDal_Pools.InsertAtletaInGirone(creaGironi.IdTorneo, creaGironi.IdDisciplina, idGirone, a.IdAtleta);
                    }

                    idGirone++;
                }

                EnablePageControls();
            }
            else
            {
                MessageBox.Show("Si è verificato un errore durante il recupero delle informazioni sul numero dei gironi \r\nContattare un amministratore",
                                "ERRORE Applicazione", MessageBoxButton.OK, MessageBoxImage.Error);
            }
        }