예제 #1
0
        private void BtnClosePools_Click(object sender, RoutedEventArgs e)
        {
            //TODO PL chiamata alla "validaEliminatorie" in cui deve essere gestito il motore tramite DB
            bool?result = new MessageBoxCustom("Delete all final phases?",
                                               MessageType.Warning, MessageButtons.OkCancel).ShowDialog();

            if (result.Value)
            {
                //save all pools for safety
                if (SaveAllPools())
                {
                    SqlDal_Pools.DeleteAllPahases(_tournamentId, _disciplineId);

                    SetPhasesIndex();

                    Window validaAtleti = new CheckResult(caricaGironi.IdTorneo, caricaGironi.IdDisciplina, atletiAmmessiEliminatorie);
                    validaAtleti.Closing += new CancelEventHandler(creaEliminatorie_FormClosed);
                    validaAtleti.Show();
                }
                else
                {
                    MessageBox.Show("Si è verificato un errore durante il salvataggio dei gironi \r\nContattare un amministratore",
                                    "ERRORE Applicazione", MessageBoxButton.OK, MessageBoxImage.Error);
                }
            }
        }
        private void DeleteNextPhases()
        {
            switch (_currentTransition)
            {
            case (int)PhasesType.Finals_32:
                SqlDal_Pools.DeleteAllPahases(_idTorneo, _idDisciplina);
                break;

            case (int)PhasesType.Finals_16:
                SqlDal_Pools.DeleteAfterSedicesimi(_idTorneo, _idDisciplina);
                break;

            case (int)PhasesType.Finals_8:
                SqlDal_Pools.DeleteAfterOttavi(_idTorneo, _idDisciplina);
                break;

            case (int)PhasesType.Finals_4:
                SqlDal_Pools.DeleteAfterQuarti(_idTorneo, _idDisciplina);
                break;

            case (int)PhasesType.SemiFinals:
                SqlDal_Pools.DeleteAfterSeimifinali(_idTorneo, _idDisciplina);
                break;

            default:
                break;
            }
        }
예제 #3
0
        public static void SaveFinal4Pool(int idTorneo, int idDisciplina, int pool, int semifinalPool, DataGrid dataGridPool)
        {
            int posizione = 1;

            List <AtletaEliminatorie> listAtleti = new List <AtletaEliminatorie>();

            foreach (MatchEntity match in dataGridPool.Items)
            {
                AtletaEliminatorie a = new AtletaEliminatorie();

                a.IdAtleta = (match.PuntiRosso > match.PuntiBlu) ? match.IdRosso : match.IdBlu;

                SqlDal_Pools.UpdateQualificati8(idTorneo, idDisciplina, pool, posizione, match.IdRosso, match.PuntiRosso, match.PuntiBlu);
                SqlDal_Pools.UpdateQualificati8(idTorneo, idDisciplina, pool, posizione, match.IdBlu, match.PuntiBlu, match.PuntiRosso);

                a.IdTorneo     = idTorneo;
                a.idDisciplina = idDisciplina;
                a.Posizione    = posizione;
                a.Campo        = semifinalPool;
                a.PuntiFatti   = 0;
                a.PuntiSubiti  = 0;

                listAtleti.Add(a);

                posizione++;
            }

            SqlDal_Pools.InsertSemifinali(listAtleti);
        }
예제 #4
0
        public static void SaveSemiFinalPool(int idTorneo, int idDisciplina, int pool, DataGrid dataGridPool)
        {
            int posizione = 1;

            List <AtletaEliminatorie> listAtleti = new List <AtletaEliminatorie>();

            foreach (MatchEntity match in dataGridPool.Items)
            {
                AtletaEliminatorie winner = new AtletaEliminatorie();
                AtletaEliminatorie looser = new AtletaEliminatorie();

                winner.IdAtleta = (match.PuntiRosso > match.PuntiBlu) ? match.IdRosso : match.IdBlu;
                looser.IdAtleta = (match.PuntiRosso > match.PuntiBlu) ? match.IdBlu : match.IdRosso;

                //DeleteOldValues(pool, idTorneo, idDisciplina, match.IdRosso);
                //DeleteOldValues(pool, idTorneo, idDisciplina, match.IdBlu);

                SqlDal_Pools.UpdateSemifinali(idTorneo, idDisciplina, pool, posizione, match.IdRosso, match.PuntiRosso, match.PuntiBlu);
                SqlDal_Pools.UpdateSemifinali(idTorneo, idDisciplina, pool, posizione, match.IdBlu, match.PuntiBlu, match.PuntiRosso);

                CreateFinalsRecords(idTorneo, idDisciplina, posizione, listAtleti, winner, looser);
            }

            SqlDal_Pools.InsertFinali(listAtleti);
        }
예제 #5
0
        public void LoadFields(int idTorneo, int idDisciplina)
        {
            var allAtleti = SqlDal_Pools.GetQuarti(idTorneo, idDisciplina);

            if (allAtleti.Where(x => x.Campo > 0).ToList().Count() == 0)
            {
                if (allAtleti.Count == 0)
                {
                    return;
                }

                LoadAsFirstValidPhase(allAtleti);
            }
            else
            {
                poolOne   = SqlDal_Pools.GetQuarti(idTorneo, idDisciplina, 1);
                poolTwo   = SqlDal_Pools.GetQuarti(idTorneo, idDisciplina, 2);
                poolThree = SqlDal_Pools.GetQuarti(idTorneo, idDisciplina, 3);
                poolFour  = SqlDal_Pools.GetQuarti(idTorneo, idDisciplina, 4);

                LoadPool(poolOne, dataGridPoolOne);
                LoadPool(poolTwo, dataGridPoolTwo);
                LoadPool(poolThree, dataGridPoolThree);
                LoadPool(poolFour, dataGridPoolFour);
            }

            _loaded = true;
        }
예제 #6
0
 private static void DeleteOldValues(int idTorneo, int idDisciplina)
 {
     SqlDal_Pools.EliminaOttaviByCampo(1, idTorneo, idDisciplina);
     SqlDal_Pools.EliminaOttaviByCampo(2, idTorneo, idDisciplina);
     SqlDal_Pools.EliminaOttaviByCampo(3, idTorneo, idDisciplina);
     SqlDal_Pools.EliminaOttaviByCampo(4, idTorneo, idDisciplina);
 }
예제 #7
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);
            }
        }
        private void buttonConferma_Click(object sender, EventArgs e)
        {
            if (CountSelectedRowInDataGrid() != atletiAmmessiEliminatorie)
            {
                MessageBox.Show("Il numero di atleti selezionati non è " + atletiAmmessiEliminatorie + ": controllare la lista", "ERRORE", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
            else
            {
                List <AtletaEliminatorie> listaQualificati = new List <AtletaEliminatorie>();
                int posizione = 1;
                foreach (DataGridViewRow r in dataGridView1.Rows)
                {
                    if (((bool)r.Cells[0].Value == true) && posizione <= atletiAmmessiEliminatorie)
                    {
                        listaQualificati.Add(new AtletaEliminatorie()
                        {
                            IdAtleta     = (int)r.Cells[4].Value,
                            IdTorneo     = (int)r.Cells[1].Value,
                            idDisciplina = (int)r.Cells[2].Value,
                            Posizione    = posizione
                        }
                                             );
                        posizione++;
                    }
                }

                SqlDal_Pools.DeleteAllPahases(idTorneo, idDisciplina);

                if (atletiAmmessiEliminatorie == 32)
                {
                    SqlDal_Pools.InsertSedicesimi(listaQualificati);
                }
                else if (atletiAmmessiEliminatorie == 16)
                {
                    SqlDal_Pools.InsertOttavi(listaQualificati);
                }
                else if (atletiAmmessiEliminatorie == 8)
                {
                    SqlDal_Pools.InsertQuarti(listaQualificati);
                }
                else if (atletiAmmessiEliminatorie == 4)
                {
                    SqlDal_Pools.InsertSemifinali(SetCampoForSemifinali(listaQualificati));
                }

                SqlDal_Pools.ConcludiGironi(idTorneo, idDisciplina);

                //va fatta la lista di output per la generazione degli incontri
                //in realtà qui salvo semplicemente i dati sui Qualificati 'atletiAmmessiEliminatorie'
                //poi la form1 li carica e genera gli incontri diretti

                this.Close();
            }
        }
예제 #9
0
        private void CaricaAtletiPostGironi()
        {
            List <GironiConclusi> gironiConclusi = SqlDal_Pools.GetClassificaGironi(idTorneo, idDisciplina);

            for (int i = 0; i < atletiAmmessiEliminatorie; i++)
            {
                gironiConclusi[i].Qualificato = true;
            }

            dataGridResult.ItemsSource = gironiConclusi;
        }
예제 #10
0
        private void ManagePhasesButtons()
        {
            btnLoadPhases.IsEnabled = true;

            btnOpen32th.IsEnabled      = false; //for nnow is always disabled
            btnOpen16th.IsEnabled      = SqlDal_Pools.CountPhasesMatchs(_tournamentId, _disciplineId, PhasesManager.Decode(PhasesType.Finals_16)) == 0 ? false : true;
            btnOpen8th.IsEnabled       = SqlDal_Pools.CountPhasesMatchs(_tournamentId, _disciplineId, PhasesManager.Decode(PhasesType.Finals_8)) == 0 ? false : true;
            btnOpen4th.IsEnabled       = SqlDal_Pools.CountPhasesMatchs(_tournamentId, _disciplineId, PhasesManager.Decode(PhasesType.Finals_4)) == 0 ? false : true;
            btnOpenSemifinal.IsEnabled = SqlDal_Pools.CountPhasesMatchs(_tournamentId, _disciplineId, PhasesManager.Decode(PhasesType.SemiFinals)) == 0 ? false : true;
            btnOpenFinal.IsEnabled     = SqlDal_Pools.CountPhasesMatchs(_tournamentId, _disciplineId, PhasesManager.Decode(PhasesType.Finals)) == 0 ? false : true;
        }
        private void FullFillDatagrid()
        {
            List <OutputRisultatiTorneo> risultatiGironi = SqlDal_Report.GetExportGironiTorneo(_idTorneo, _idDisciplina);

            if (risultatiGironi != null)
            {
                dataGridViewGironi.DataSource = risultatiGironi.ToArray();
                //lblTotal.Text = "Totale Incontri Gironi : " + risultatiGironi.Count;
            }

            List <GironiConclusi> gironiConclusi = SqlDal_Pools.GetClassificaGironi(_idTorneo, _idDisciplina);

            if (gironiConclusi != null)
            {
                dataGridViewPostGironi.DataSource           = gironiConclusi.ToArray();
                dataGridViewPostGironi.DataBindingComplete += new DataGridViewBindingCompleteEventHandler(dataGridViewPostGironi_DataBindingComplete);
            }

            List <OutputRisultatiEliminatorieTorneo> risultatiSedicesimi = SqlDal_Report.GetExportSedicesimiTorneo(_idTorneo, _idDisciplina);

            if (risultatiSedicesimi != null)
            {
                dataGridViewSedicesimi.DataSource = risultatiSedicesimi.ToArray();
            }

            List <OutputRisultatiEliminatorieTorneo> risultatiOttavi = SqlDal_Report.GetExportOttaviTorneo(_idTorneo, _idDisciplina);

            if (risultatiOttavi != null)
            {
                dataGridViewOttavi.DataSource = risultatiOttavi.ToArray();
            }

            List <OutputRisultatiEliminatorieTorneo> risultatiQuarti = SqlDal_Report.GetExportQuartiTorneo(_idTorneo, _idDisciplina);

            if (risultatiQuarti != null)
            {
                dataGridViewQuarti.DataSource = risultatiQuarti.ToArray();
            }

            List <OutputRisultatiEliminatorieTorneo> risultatiSemifinali = SqlDal_Report.GetExportSemifinaliTorneo(_idTorneo, _idDisciplina);

            if (risultatiSemifinali != null)
            {
                dataGridViewSemifinali.DataSource = risultatiSemifinali.ToArray();
            }

            List <OutputRisultatiEliminatorieTorneo> risultatiFinali = SqlDal_Report.GetExportFinaliTorneo(_idTorneo, _idDisciplina);

            if (risultatiFinali != null)
            {
                dataGridViewFinali.DataSource = risultatiFinali.ToArray();
            }
        }
예제 #12
0
        public static Tuple <string, string> SaveFinalPool(int idTorneo, int idDisciplina, int pool, DataGrid dataGridPool)
        {
            List <AtletaEliminatorie> listAtleti = new List <AtletaEliminatorie>();

            int round = 1;

            int    vittorieRosso = 0;
            int    vittorieBlu   = 0;
            string winner        = "";
            string looser        = "";

            foreach (MatchEntity match in dataGridPool.Items)
            {
                if (match.PuntiRosso > match.PuntiBlu)
                {
                    vittorieRosso++;
                }
                else if (match.PuntiRosso < match.PuntiBlu)
                {
                    vittorieBlu++;
                }

                SqlDal_Pools.UpdateFinali(idTorneo, idDisciplina, pool, round, match.IdRosso, match.PuntiRosso, match.PuntiBlu);
                SqlDal_Pools.UpdateFinali(idTorneo, idDisciplina, pool, round, match.IdBlu, match.PuntiBlu, match.PuntiRosso);

                round++;
            }

            var m = ((MatchEntity)dataGridPool.Items[0]);

            if (vittorieRosso > vittorieBlu)
            {
                winner = SqlDal_Fighters.GetAtletaById(m.IdRosso).Asd + " - " + m.CognomeRosso + " " + m.NomeRosso;
                looser = SqlDal_Fighters.GetAtletaById(m.IdBlu).Asd + " - " + m.CognomeBlu + " " + m.NomeBlu;
            }
            else if (vittorieBlu > vittorieRosso)
            {
                looser = SqlDal_Fighters.GetAtletaById(m.IdRosso).Asd + " - " + m.CognomeRosso + " " + m.NomeRosso;
                winner = SqlDal_Fighters.GetAtletaById(m.IdBlu).Asd + " - " + m.CognomeBlu + " " + m.NomeBlu;
            }
            else
            {
                winner = "";
                looser = "";
            }

            return(new Tuple <string, string>(winner, looser));
        }
예제 #13
0
        private void LoadMatchs(int idTorneo, int idDisciplina)
        {
            List <AtletaEliminatorie> allAtleti = SqlDal_Pools.GetSedicesimi(idTorneo, idDisciplina);

            poolOne   = new List <AtletaEliminatorie>();
            poolTwo   = new List <AtletaEliminatorie>();
            poolThree = new List <AtletaEliminatorie>();
            poolFour  = new List <AtletaEliminatorie>();

            if (allAtleti.Count == 0)
            {
                return;
            }

            LoadMatchesByPool(allAtleti);
        }
        private void CaricaAtletiPostGironi()
        {
            List <GironiConclusi> gironiConclusi = SqlDal_Pools.GetClassificaGironi(idTorneo, idDisciplina);

            for (int i = 0; i < atletiAmmessiEliminatorie; i++)
            {
                gironiConclusi[i].Qualificato = true;
            }

            labelStatus.Text = " Selezionati " + atletiAmmessiEliminatorie + " Atleti per la fase successiva";

            dataGridView1.DataSource = gironiConclusi.ToArray();

            dataGridView1.DataBindingComplete += new DataGridViewBindingCompleteEventHandler(dataGridView1_DataBindingComplete);

            dataGridView1.AutoResizeColumns(DataGridViewAutoSizeColumnsMode.AllCells);
        }
예제 #15
0
        public void LoadFields(int idTorneo, int idDisciplina)
        {
            this._idTorneo     = idTorneo;
            this._idDisciplina = idDisciplina;

            poolOne = SqlDal_Pools.GetFinali(idTorneo, idDisciplina, 1);
            poolTwo = SqlDal_Pools.GetFinali(idTorneo, idDisciplina, 2);

            LoadPool(poolOne, dataGridPoolOne);
            LoadPool(poolTwo, dataGridPoolTwo);

            if (poolOne.Select(x => x.PuntiFatti > 0).ToList().Count > 0 || poolTwo.Select(x => x.PuntiFatti > 0).ToList().Count > 0)
            {
                btnPrintResult.IsEnabled = true;
                SaveFields(idTorneo, idDisciplina);
            }

            _loaded = true;
        }
예제 #16
0
 private void CreateNextPhase(List <AtletaEliminatorie> listaQualificati)
 {
     if (atletiAmmessiEliminatorie == 32)
     {
         SqlDal_Pools.InsertSedicesimi(listaQualificati);
     }
     else if (atletiAmmessiEliminatorie == 16)
     {
         SqlDal_Pools.InsertOttavi(listaQualificati);
     }
     else if (atletiAmmessiEliminatorie == 8)
     {
         SqlDal_Pools.InsertQuarti(listaQualificati);
     }
     else if (atletiAmmessiEliminatorie == 4)
     {
         SqlDal_Pools.InsertSemifinali(SetCampoForSemifinali(listaQualificati));
     }
 }
예제 #17
0
        private void btnSaveResult_Click(object sender, RoutedEventArgs e)
        {
            if (_currentSelectedItems != atletiAmmessiEliminatorie)
            {
                System.Windows.Forms.MessageBox.Show("Il numero di atleti selezionati non è " + atletiAmmessiEliminatorie + ": controllare la lista", "ERRORE",
                                                     System.Windows.Forms.MessageBoxButtons.OK, System.Windows.Forms.MessageBoxIcon.Error);
            }
            else
            {
                List <AtletaEliminatorie> listaQualificati = new List <AtletaEliminatorie>();

                int posizione = 1;

                foreach (GironiConclusi a in dataGridResult.Items)
                {
                    if (a.Qualificato)
                    {
                        listaQualificati.Add(new AtletaEliminatorie()
                        {
                            IdAtleta     = a.IdAtleta,
                            IdTorneo     = a.IdTorneo,
                            idDisciplina = a.IdDisciplina,
                            Posizione    = posizione
                        }
                                             );
                        posizione++;
                    }
                }

                CreateNextPhase(listaQualificati);

                SqlDal_Pools.ConcludiGironi(idTorneo, idDisciplina);

                WindowCheckResult = true;
                this.Close();
            }
        }
예제 #18
0
        public static void SaveTournamentPool(
            int idTorneo, int idDisciplina, int poolIndex,
            List <int> idAtleti,
            int numeroIncontriAdPersonam,
            DataGrid dataGridPool)
        {
            foreach (Int32 atleta in idAtleti)
            {
                RisultatiIncontriGironi res = new RisultatiIncontriGironi();

                res.idAtleta = atleta;

                foreach (MatchEntity match in dataGridPool.Items)
                {
                    bool doppiaMorte = match.DoppiaMorte;

                    if (!SqlDal_Pools.UpdateGironiIncontri(idTorneo, idDisciplina, poolIndex, match.IdRosso, match.PuntiRosso, match.IdBlu, match.PuntiBlu, doppiaMorte))
                    {
                        new MessageBoxCustom("Error during pool savings", MessageType.Error, MessageButtons.Ok);
                        return;
                    }

                    if (match.IdRosso == atleta) //se sono l'atleta a "sinistra"
                    {
                        if (doppiaMorte)
                        {
                            res.Sconfitte++;
                            res.PuntiSubiti += Math.Abs(3 - match.PuntiRosso);
                        }
                        else
                        {
                            if (match.PuntiRosso > match.PuntiBlu)
                            {
                                res.Vittorie++;
                            }
                            else if (match.PuntiRosso < match.PuntiBlu)
                            {
                                res.Sconfitte++;
                            }
                            else
                            {
                                if (match.PuntiRosso > match.PuntiBlu)
                                {
                                    res.Vittorie++;
                                }
                                else if (match.PuntiRosso < match.PuntiBlu)
                                {
                                    res.Sconfitte++;
                                }
                            }

                            res.PuntiFatti  += match.PuntiRosso;
                            res.PuntiSubiti += match.PuntiBlu;
                        }
                    }
                    else if (match.IdBlu == atleta)   //se sono l'atleta a "destra"
                    {
                        if (doppiaMorte)
                        {
                            res.Sconfitte++;
                            res.PuntiSubiti += Math.Abs(3 - match.PuntiBlu);
                        }

                        else
                        {
                            if ((match.PuntiBlu > match.PuntiRosso) && (match.PuntiBlu >= 3))
                            {
                                res.Vittorie++;
                            }
                            else if ((match.PuntiBlu < match.PuntiRosso) && (match.PuntiRosso >= 3))
                            {
                                res.Sconfitte++;
                            }
                            else
                            {
                                if (match.PuntiBlu > match.PuntiRosso)
                                {
                                    res.Vittorie++;
                                }
                                else if (match.PuntiBlu < match.PuntiRosso)
                                {
                                    res.Sconfitte++;
                                }
                            }

                            res.PuntiFatti  += match.PuntiBlu;
                            res.PuntiSubiti += match.PuntiRosso;
                        }
                    }
                }

                int delpaP = res.PuntiFatti - res.PuntiSubiti;
                res.NumeroIncontriDisputati = numeroIncontriAdPersonam;

                res.Differenziale = (Double)(delpaP + res.Vittorie) / res.NumeroIncontriDisputati;

                //salvare res in Gironi:
                //per ogni atleta , torneo e disciplina salvo i punti fatti, subiti, le vittorie ed il differenziale
                SqlDal_Pools.UpdateGironi(res, idTorneo, idDisciplina, poolIndex);
            }
        }
예제 #19
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);
            }
        }
예제 #20
0
 private static void DeleteOldValues(int pool, int idTorneo, int idDisciplina, int fighterId)
 {
     SqlDal_Pools.EliminaSemifinaliByCampo(pool, idTorneo, idDisciplina, fighterId);
 }