Exemplo n.º 1
0
        private void dgvRodadas_CellMouseDoubleClick(object sender, DataGridViewCellMouseEventArgs e)
        {
            if (e.RowIndex > -1)
            {
                int numRodada;
                numRodada = Convert.ToInt32(((DataGridView)sender).Tag);
                List <Competicao_Partida> partidas = competicao.partidas.FindAll(partidasAEncontrar => partidasAEncontrar.rodada == numRodada);
                Competicao_Partida        partida  = partidas[e.RowIndex];

                if (partida.data is null)
                {
                    MessageBox.Show("Por favor verifique" + Environment.NewLine + Environment.NewLine +
                                    String.Format("Não foi possível realizar a partida entre {0} e {1} pois não foi definida uma data para a realização da partida", partida.equipe1.nome, partida.equipe2.nome),
                                    String.Format("{0} - {1} x {2}", competicao.nome, partida.equipe1.nome, partida.equipe2.nome), MessageBoxButtons.OK, MessageBoxIcon.Warning);
                }
                else if (partida.arbitro is null)
                {
                    MessageBox.Show("Por favor verifique" + Environment.NewLine + Environment.NewLine +
                                    String.Format("Não foi possível realizar a partida entre {0} e {1} pois não foi definido o árbitro da partida", partida.equipe1.nome, partida.equipe2.nome),
                                    String.Format("{0} - {1} x {2}", competicao.nome, partida.equipe1.nome, partida.equipe2.nome), MessageBoxButtons.OK, MessageBoxIcon.Warning);
                }
                else
                {
                    abrePartida(partida, (DataGridView)sender, partidas, false);
                }
            }
        }
Exemplo n.º 2
0
        private void exportarPlanilha(object sender, EventArgs e)
        {
            Competicao         competicao = (Competicao)(((List <Object>)((ToolStripMenuItem)sender).Tag)[0]);
            Competicao_Partida partida    = (Competicao_Partida)(((List <Object>)((ToolStripMenuItem)sender).Tag)[1]);

            if (partida.data is null)
            {
                MessageBox.Show("Por favor verifique" + Environment.NewLine + Environment.NewLine +
                                String.Format("Não foi possível exportar a planilha da partida entre {0} e {1} pois não foi definida uma data para a realização da partida", partida.equipe1.nome, partida.equipe2.nome),
                                String.Format("{0} - {1} x {2}", competicao.nome, partida.equipe1.nome, partida.equipe2.nome), MessageBoxButtons.OK, MessageBoxIcon.Warning);
            }
            else if (partida.arbitro is null)
            {
                MessageBox.Show("Por favor verifique" + Environment.NewLine + Environment.NewLine +
                                String.Format("Não foi possível realizar a partida entre {0} e {1} pois não foi definido o árbitro da partida", partida.equipe1.nome, partida.equipe2.nome),
                                String.Format("{0} - {1} x {2}", competicao.nome, partida.equipe1.nome, partida.equipe2.nome), MessageBoxButtons.OK, MessageBoxIcon.Warning);
            }
            else
            {
                if (partida.equipe1.atletas is null)
                {
                    partida.equipe1.atletas = PessoaRepositorio.Instance.getAtletasByEquipeCompeticao(competicao.id, partida.equipe1.id);
                }

                if (partida.equipe2.atletas is null)
                {
                    partida.equipe2.atletas = PessoaRepositorio.Instance.getAtletasByEquipeCompeticao(competicao.id, partida.equipe2.id);
                }

                GerenciadorCSV.exportarPlanilha(competicao, partida);
            }
        }
Exemplo n.º 3
0
        private void dgvRodada_CellEndEdit(object sender, DataGridViewCellEventArgs e)
        {
            if (e.RowIndex > -1)
            {
                DataGridView       dataGridView = (DataGridView)sender;
                Competicao_Partida partida      = partidasPorRodada_view[tcPartidas.SelectedIndex][e.RowIndex];

                if (partida.encerrada)
                {
                    dataGridView.Rows[e.RowIndex].Cells["Data_view"].Value = ((DateTime)partida.data).ToString("dd/MM/yyyy");
                }
                else
                {
                    string   strData     = dataGridView.Rows[e.RowIndex].Cells["Data_view"].Value.ToString();
                    DateTime dataPartida = new DateTime();
                    if (DateTime.TryParseExact(strData, "dd/MM/yyyy", System.Globalization.CultureInfo.InvariantCulture, System.Globalization.DateTimeStyles.NoCurrentDateDefault, out dataPartida))
                    {
                        if (dataPartida.Date >= DateTime.Now.Date)
                        {
                            partida.data = dataPartida;
                            partidasPorRodada_view[tcPartidas.SelectedIndex][e.RowIndex].data = dataPartida;
                            partidasPorRodada[tcPartidas.SelectedIndex].Find(find => find.id == partida.id).data = dataPartida;

                            CompeticaoRepositorio.Instance.updatePartida(ref competicao, partida);

                            return;
                        }
                    }

                    dataGridView.Rows[e.RowIndex].Cells["Data_view"].Value = "";
                }
            }
        }
Exemplo n.º 4
0
        private void btnEncerrarPartida_Click(object sender, EventArgs e)
        {
            int golsEquipe1 = 0, golsEquipe2 = 0;

            //Verifica se terá que ter desempate
            if (partida.rodada < 0)
            {
                if (penalidades)
                {
                    int golsPenaltiEquipe1, golsPenaltiEquipe2;
                    golsPenaltiEquipe1 = partida.eventos.FindAll(eventos => eventos.tpEvento.Equals(tpEventoEnum.Gol_Penalti) && eventos.equipe.id == partida.equipe1.id).Count;
                    golsPenaltiEquipe2 = partida.eventos.FindAll(eventos => eventos.tpEvento.Equals(tpEventoEnum.Gol_Penalti) && eventos.equipe.id == partida.equipe2.id).Count;

                    if (golsPenaltiEquipe1 == golsPenaltiEquipe2)
                    {
                        return;
                    }
                }
                else
                {
                    golsEquipe1 = partida.eventos.FindAll(eventosAEncontrar => eventosAEncontrar.tpEvento.Equals(tpEventoEnum.Gol) && eventosAEncontrar.equipe.id.Equals(partida.equipe1.id)).Count;
                    golsEquipe2 = partida.eventos.FindAll(eventosAEncontrar => eventosAEncontrar.tpEvento.Equals(tpEventoEnum.Gol) && eventosAEncontrar.equipe.id.Equals(partida.equipe2.id)).Count;

                    // Se for mata-mata só vai para os penaltis no segundo jogo
                    if (competicao.jogosIdaEVolta_FaseFinal)
                    {
                        // Verifica se é o jogo de volta
                        Competicao_Partida partidaIda = competicao.partidas.Find(x => x.encerrada && x.rodada == partida.rodada && x.numGrupo == partida.numGrupo && x.equipe1.id == partida.equipe2.id && x.equipe2.id == partida.equipe1.id && x.id != partida.id);
                        if (!(partidaIda is null))
                        {
                            golsEquipe1 += partidaIda.eventos.FindAll(eventos => eventos.tpEvento.Equals(tpEventoEnum.Gol) && eventos.equipe.id == partida.equipe1.id).Count;
                            golsEquipe2 += partidaIda.eventos.FindAll(eventos => eventos.tpEvento.Equals(tpEventoEnum.Gol) && eventos.equipe.id == partida.equipe2.id).Count;

                            if (golsEquipe1 == golsEquipe2)
                            {
                                btnDisputaPenaltis.Enabled = true;
                                btnDisputaPenaltis_Click(null, null);
                                return;
                            }
                        }
                    }
                    else
                    {
                        if (golsEquipe1 == golsEquipe2)
                        {
                            btnDisputaPenaltis.Enabled = true;
                            btnDisputaPenaltis_Click(null, null);
                            return;
                        }
                    }
                }
            }

            partidaIniciada   = false;
            partida.encerrada = true;
            CompeticaoRepositorio.Instance.updatePartida(ref competicao, partida);

            fillFields();
        }
Exemplo n.º 5
0
        private void abrePartida(Competicao_Partida partida, DataGridView sender, List <Competicao_Partida> partidas, bool partidaIniciada)
        {
            ViewPartida viewPartida = new ViewPartida(usuarioLogado, competicao, partida, partidaIniciada);

            viewPartida.Tag = new List <Object>()
            {
                sender, partidas
            };
            viewPartida.FormClosing += viewPartida_FormClosing;
            viewPartida.ShowDialog();
        }
Exemplo n.º 6
0
        public ViewPartida(Usuario usuarioLogado, Competicao competicao, Competicao_Partida partida, bool partidaIniciada = false)
        {
            InitializeComponent();

            // Centraliza o form na tela
            CenterToScreen();

            this.usuarioLogado = usuarioLogado;

            this.competicao      = competicao;
            this.partida         = partida;
            this.partidaIniciada = partidaIniciada;
        }
Exemplo n.º 7
0
        public SetArbitro(Usuario usuarioLogado, Competicao competicao, Competicao_Partida partida)
        {
            InitializeComponent();

            CenterToScreen();

            this.usuarioLogado = usuarioLogado;
            this.competicao    = competicao;
            this.partida       = partida;

            arbitros = CompeticaoRepositorio.Instance.getArbitroPorCompeticao(competicao.id);
            if (arbitros is null)
            {
                MessageBox.Show("Houve um erro ao tentar listar os registros." + Environment.NewLine + Environment.NewLine + errorMessage, "Contate o Suporte técnico", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
            arbitros_view = new List <Cargo>(arbitros);

            Text += String.Format(" - {0} - {1} | {2} ", partida.equipe1.nome, partida.equipe2.nome, (partida.data is null? "" : ((DateTime)partida.data).ToString("dd/MM/yyyy")));

            windowMode = Utilidades.WindowMode.ModoNormal;
            windowModeChanged();
        }
Exemplo n.º 8
0
        public static void relatorioPartidas(Competicao competicao, List <Competicao_Partida> partidas, int rodada, string nomeRodada, bool fotoAtleta)
        {
            //Cabeçalho HTML
            StringBuilder cabecalhoHTML = new StringBuilder();

            cabecalhoHTML.AppendLine("<html>");
            cabecalhoHTML.AppendLine("    <head>");
            cabecalhoHTML.AppendLine("            <link rel=\"stylesheet\" href=\"https://stackpath.bootstrapcdn.com/bootstrap/4.1.1/css/bootstrap.min.css\" integrity=\"sha384-WskhaSGFgHYWDcbwN70/dfYBj47jz9qbsMId/iRN3ewGhXQFZCSftd1LZCfmhktB\" crossorigin=\"anonymous\">");
            cabecalhoHTML.AppendLine("            <script src=\"https://stackpath.bootstrapcdn.com/bootstrap/4.1.1/js/bootstrap.min.js\" integrity=\"sha384-smHYKdLADwkXOn1EmN1qk/HfnUcbVRZyYmZ4qpPea6sjB/pTJ0euyQp0Mk8ck+5T\" crossorigin=\"anonymous\"></script>");
            cabecalhoHTML.AppendLine("        <meta charset=\"UTF-8\">");
            cabecalhoHTML.AppendFormat("        <title>{0} - Artilheiros</title>", competicao.nome).AppendLine();
            cabecalhoHTML.AppendLine("    </head>");
            cabecalhoHTML.AppendLine("    <style>");
            cabecalhoHTML.AppendLine("        th {	font-size: 18px;	}");
            cabecalhoHTML.AppendLine("        td {	font-size: 16px;	}");
            cabecalhoHTML.AppendLine("        div {	font-size: 18px;	}");
            cabecalhoHTML.AppendLine("    </style>");
            cabecalhoHTML.AppendLine("    <body>");

            //Cabeçalho Relatório
            StringBuilder cabecalhoRelatorio = new StringBuilder();

            cabecalhoRelatorio.AppendLine("		<div class=\"card\">");
            cabecalhoRelatorio.AppendFormat("            <div class=\"card-header bg-primary mb-3\"><strong>{0}</strong></div>", nomeRodada).AppendLine();
            cabecalhoRelatorio.AppendLine("            <div class=\"card-body\">");
            cabecalhoRelatorio.AppendLine("                <table class=\"table table-striped\">");
            cabecalhoRelatorio.AppendLine("                    <thead>");
            cabecalhoRelatorio.AppendLine("                        <tr>");

            string nomeGrupoJogo;

            if (rodada < 0)
            {
                nomeGrupoJogo = "Jogo";
            }
            else
            {
                nomeGrupoJogo = "Grupo";
            }
            cabecalhoRelatorio.AppendFormat("                            <th style=\"width: 10%\">{0}</th>", nomeGrupoJogo).AppendLine();

            cabecalhoRelatorio.AppendLine("                            <th style=\"width: 10%\">Data</th>");

            if (fotoAtleta)
            {
                cabecalhoRelatorio.AppendLine("                            <th style=\"width: 4.41%\"> </th>");
            }

            cabecalhoRelatorio.AppendLine("                            <th style=\"width: 17.85%\">Casa</th>");
            cabecalhoRelatorio.AppendLine("                            <th style=\"width: 6%\"> </th>");
            cabecalhoRelatorio.AppendLine("                            <th style=\"width: 2%\">X</th>");
            cabecalhoRelatorio.AppendLine("                            <th style=\"width: 6%\"> </th>");
            cabecalhoRelatorio.AppendLine("                            <th style=\"width: 17.85%\">Visitante</th>");

            if (fotoAtleta)
            {
                cabecalhoRelatorio.AppendLine("                            <th style=\"width: 4.41%\"> </th>");
            }

            cabecalhoRelatorio.AppendLine("                            <th style=\"width: 15.66%\">Árbitro</th>");
            cabecalhoRelatorio.AppendLine("                        </tr>");
            cabecalhoRelatorio.AppendLine("                    </thead>");
            cabecalhoRelatorio.AppendLine("                    <tbody>");

            //Partidas
            StringBuilder partidasRelatorio = new StringBuilder();

            for (int numPartida = 0; numPartida < partidas.Count; numPartida++)
            {
                Competicao_Partida partida = partidas[numPartida];

                int numGolsEquipe1, numGolsEquipe2;
                numGolsEquipe1 = partida.eventos.FindAll(find => find.tpEvento == tpEventoEnum.Gol && find.id_Equipe == partida.equipe1.id).Count;
                numGolsEquipe2 = partida.eventos.FindAll(find => find.tpEvento == tpEventoEnum.Gol && find.id_Equipe == partida.equipe2.id).Count;

                int numGolsPenaltiEquipe1, numGolsPenaltiEquipe2;
                numGolsPenaltiEquipe1 = partida.eventos.FindAll(find => find.tpEvento == tpEventoEnum.Gol_Penalti && find.id_Equipe == partida.equipe1.id).Count;
                numGolsPenaltiEquipe2 = partida.eventos.FindAll(find => find.tpEvento == tpEventoEnum.Gol_Penalti && find.id_Equipe == partida.equipe2.id).Count;

                bool vitoriaEquipe1, vitoriaEquipe2;
                if (numGolsPenaltiEquipe1 > 0 || numGolsPenaltiEquipe2 > 0)
                {
                    vitoriaEquipe1 = numGolsPenaltiEquipe1 > numGolsPenaltiEquipe2;
                    vitoriaEquipe2 = numGolsPenaltiEquipe2 > numGolsPenaltiEquipe1;
                }
                else
                {
                    vitoriaEquipe1 = numGolsEquipe1 > numGolsEquipe2;
                    vitoriaEquipe2 = numGolsEquipe2 > numGolsEquipe1;
                }

                partidasRelatorio.AppendLine("                        <tr>");

                if (rodada < 0)
                {
                    nomeGrupoJogo = "Jogo " + partida.numGrupo.ToString();
                }
                else
                {
                    nomeGrupoJogo = CompeticaoViewUtilidades.getNomeGrupo(competicao.nomesGrupos, partida.numGrupo + 1);
                }
                partidasRelatorio.AppendFormat("							<td>{0}</td>", nomeGrupoJogo).AppendLine();

                string dataJogo;
                if (partida.data is null)
                {
                    dataJogo = "";
                }
                else
                {
                    dataJogo = ((DateTime)partida.data).ToString("dd/MM/yyyy");
                }
                partidasRelatorio.AppendFormat("							<td>{0}</td>", dataJogo).AppendLine();

                if (fotoAtleta)
                {
                    partidasRelatorio.AppendFormat("							<td><div class=\"text-center\">	<img height=\"25\" src=\"file:///{0}\" class=\"rounded\"></div></td>  ", (partida.equipe1.urlLogo is null ? "" : partida.equipe1.urlLogo)).AppendLine();
                }

                string golsEquipe1 = numGolsEquipe1.ToString();
                if (numGolsPenaltiEquipe1 > 0 || numGolsPenaltiEquipe2 > 0)
                {
                    golsEquipe1 += " (" + numGolsPenaltiEquipe1.ToString() + ")";
                }
                partidasRelatorio.AppendFormat("							<td {0}>{1}</td>", (vitoriaEquipe1 ? "style=\"font-weight:bold\"" : ""), partida.equipe1.nome).AppendLine();
                partidasRelatorio.AppendFormat("							<td align=\"right\" {0}>{1}</td>", (vitoriaEquipe1 ? "style=\"font-weight:bold\"" : ""), (partida.encerrada ? golsEquipe1 : "")).AppendLine();
                partidasRelatorio.AppendLine("							<td style=\"font-weight:bold\">X</td>");

                string golsEquipe2 = "";
                if (numGolsPenaltiEquipe1 > 0 || numGolsPenaltiEquipe2 > 0)
                {
                    golsEquipe2 = "(" + numGolsPenaltiEquipe2.ToString() + ") ";
                }
                golsEquipe2 += numGolsEquipe2.ToString();
                partidasRelatorio.AppendFormat("							<td align=\"left\" {0}>{1}</td>", (vitoriaEquipe2 ? "style=\"font-weight:bold\"" : ""), (partida.encerrada ? golsEquipe2 : "")).AppendLine();

                partidasRelatorio.AppendFormat("							<td {0}>{1}</td>", (vitoriaEquipe2 ? "style=\"font-weight:bold\"" : ""), partida.equipe2.nome).AppendLine();

                if (fotoAtleta)
                {
                    partidasRelatorio.AppendFormat("							<td><div class=\"text-center\">	<img height=\"25\" src=\"file:///{0}\" class=\"rounded\"></div></td>  ", (partida.equipe2.urlLogo is null ? "" : partida.equipe2.urlLogo)).AppendLine();
                }

                partidasRelatorio.AppendFormat("							<td>{0}</td>", (partida.arbitro is null? "" : partida.arbitro.pessoa.nome)).AppendLine();
                partidasRelatorio.AppendLine("						</tr> ");
            }

            //Parte final relatório
            StringBuilder finalRelatorio = new StringBuilder();

            finalRelatorio.AppendLine("                    </tbody>");
            finalRelatorio.AppendLine("                </table>");
            finalRelatorio.AppendLine("            </div>");
            finalRelatorio.AppendLine("        </div>");

            //Final HTML
            StringBuilder finalHTML = new StringBuilder();

            finalHTML.AppendLine("    </body>");
            finalHTML.AppendLine("</html>");

            //HTML Inteiro
            StringBuilder fullHTML = new StringBuilder();

            fullHTML.Append(cabecalhoHTML.ToString());
            fullHTML.Append(cabecalhoRelatorio.ToString());
            fullHTML.Append(partidasRelatorio.ToString());
            fullHTML.Append(finalRelatorio.ToString());
            fullHTML.Append(finalHTML.ToString());

            // Escolhe onde vai salvar o arquivo
            SaveFileDialog saveFileDialog = new SaveFileDialog();

            saveFileDialog.Filter   = "HTML Files|*.html";
            saveFileDialog.Title    = "Escolha um diretório para salvar o relatório de partidas";
            saveFileDialog.FileName = String.Format("{0} - {1} - Relatório de partidas", competicao.nome, nomeRodada);

            if (saveFileDialog.ShowDialog() == DialogResult.OK)
            {
                // Salva o arquivo
                StreamWriter salvar = new StreamWriter(saveFileDialog.FileName);
                salvar.WriteLine(fullHTML.ToString());
                salvar.Close();

                if (MessageBox.Show("Gostaria de abrir o relatório?",
                                    "Relatório de partidas",
                                    MessageBoxButtons.YesNo,
                                    MessageBoxIcon.Question) == DialogResult.Yes)
                {
                    System.Diagnostics.Process.Start(saveFileDialog.FileName);
                }
            }
        }
Exemplo n.º 9
0
        private void btnProximaFase_Click(object sender, EventArgs e)
        {
            int numPartidasRestantes;

            if (competicao.fase_Atual == 0)
            {
                numPartidasRestantes = competicao.partidas.FindAll(partidas => partidas.encerrada == false && partidas.rodada > competicao.fase_Atual).Count;
            }
            else
            {
                numPartidasRestantes = competicao.partidas.FindAll(partidas => partidas.encerrada == false && partidas.rodada == competicao.fase_Atual).Count;
            }

            if (numPartidasRestantes > 0)
            {
                MessageBox.Show("Por favor verifique" + Environment.NewLine + Environment.NewLine +
                                "Existem ainda " + numPartidasRestantes + " partidas que não foram encerradas nesta fase.",
                                "Não foi possível avançar", MessageBoxButtons.OK, MessageBoxIcon.Warning);
            }
            else
            {
                int numProximaFase           = 0;
                int numPartidasASeremGeradas = 0;

                // Caso a fase atual seja a fase classificatória
                if (competicao.fase_Atual >= 0)
                {
                    switch (competicao.faseFinal)
                    {
                    case FaseFinalEnum._5_OitavasFinal: numProximaFase = -4; numPartidasASeremGeradas = 8; break;

                    case FaseFinalEnum._4_QuartasFinal: numProximaFase = -3; numPartidasASeremGeradas = 4; break;

                    case FaseFinalEnum._3_SemiFinal: numProximaFase = -2; numPartidasASeremGeradas = 2; break;

                    case FaseFinalEnum._2_Final: numProximaFase = -1; numPartidasASeremGeradas = 1; break;
                    }

                    // Zera os cartões da competição
                    if (competicao.zerarCartoesFaseFinal)
                    {
                        CompeticaoRepositorio.Instance.zeraSuspensao(competicao);
                    }

                    // O campeonato é só por pontos corridos
                    if ((competicao.faseFinal == FaseFinalEnum._1_Nao) && (competicao.grupos.Count == 1))
                    {
                        competicao.status = StatusEnum._0_Encerrada;

                        EquipeCompeticao campeao = (from proximaFase in competicao.grupos[0]
                                                    orderby proximaFase.pontos descending, proximaFase.vitorias descending, proximaFase.golsPro - proximaFase.golsContra descending
                                                    select proximaFase).ToList <EquipeCompeticao>().First();

                        competicao.campeao    = campeao;
                        competicao.id_Campeao = campeao.id;
                        CompeticaoRepositorio.Instance.update(competicao);
                    }
                    else
                    {
                        int numTimesPorGrupo = 0, numTimesRestantes = 0;
                        List <List <EquipeCompeticao> > timesProximaFase = Utilidades.listaEquipesClassificadas(competicao, numPartidasASeremGeradas, numProximaFase, ref numTimesRestantes, ref numTimesPorGrupo);
                        Utilidades.criaPartidasProximaFase(ref competicao, timesProximaFase, numPartidasASeremGeradas, numTimesRestantes, numTimesPorGrupo, numProximaFase);

                        // Cria as partidas de volta da fase final
                        if (competicao.jogosIdaEVolta_FaseFinal)
                        {
                            List <Competicao_Partida> partidasIda = competicao.partidas.FindAll(partidasIdaAEncontrar => partidasIdaAEncontrar.rodada == numProximaFase);
                            for (int numPartidaVolta = 0; numPartidaVolta < partidasIda.Count; numPartidaVolta++)
                            {
                                Competicao_Partida partidaDeVolta = new Competicao_Partida(partidasIda[numPartidaVolta].equipe2, partidasIda[numPartidaVolta].equipe1, numProximaFase, partidasIda[numPartidaVolta].numGrupo);
                                CompeticaoRepositorio.Instance.insertPartida(ref competicao, partidaDeVolta);
                            }
                        }
                    }
                }
                else
                {
                    // Neste caso, a fase atual já é uma das fases finais

                    numProximaFase = competicao.fase_Atual + 1;

                    // Define os times que vão para a próxima fase
                    List <List <EquipeCompeticao> > timesProximaFase = new List <List <EquipeCompeticao> >();
                    List <EquipeCompeticao>         timesClassificadosFaseAnterior = new List <EquipeCompeticao>();

                    List <Competicao_Partida> partidasFaseAnterior = new List <Competicao_Partida>();
                    partidasFaseAnterior = competicao.partidas.FindAll(partidasFinalizadas => partidasFinalizadas.encerrada == true && partidasFinalizadas.rodada == competicao.fase_Atual);

                    // Define os classificados
                    for (int iCount = 0; iCount < partidasFaseAnterior.Count; iCount++)
                    {
                        Competicao_Partida partidaFaseAnterior = partidasFaseAnterior[iCount];
                        EquipeCompeticao   equipeVencedora     = null;

                        int golsEquipe1, golsEquipe2;
                        if (competicao.jogosIdaEVolta_FaseFinal)
                        {
                            if (iCount < partidasFaseAnterior.Count / 2)
                            {
                                Competicao_Partida partidaDeVoltaFaseAnterior = partidasFaseAnterior.FindAll(x => x.numGrupo == partidaFaseAnterior.numGrupo && x.rodada == partidaFaseAnterior.rodada).Last();

                                golsEquipe1 = partidaFaseAnterior.eventos.FindAll(eventosAEncontrar => eventosAEncontrar.tpEvento.Equals(tpEventoEnum.Gol) && eventosAEncontrar.equipe.id == partidaFaseAnterior.equipe1.id).Count;
                                golsEquipe2 = partidaFaseAnterior.eventos.FindAll(eventosAEncontrar => eventosAEncontrar.tpEvento.Equals(tpEventoEnum.Gol) && eventosAEncontrar.equipe.id == partidaFaseAnterior.equipe2.id).Count;

                                golsEquipe1 += partidaDeVoltaFaseAnterior.eventos.FindAll(eventosAEncontrar => eventosAEncontrar.tpEvento.Equals(tpEventoEnum.Gol) && eventosAEncontrar.equipe.id == partidaFaseAnterior.equipe1.id).Count;
                                golsEquipe2 += partidaDeVoltaFaseAnterior.eventos.FindAll(eventosAEncontrar => eventosAEncontrar.tpEvento.Equals(tpEventoEnum.Gol) && eventosAEncontrar.equipe.id == partidaFaseAnterior.equipe2.id).Count;

                                // Verifica se a partida empatou e foi para os penaltis
                                if (golsEquipe1 == golsEquipe2)
                                {
                                    int golsPenaltiEquipe1, golsPenaltiEquipe2;
                                    golsPenaltiEquipe1 = partidaDeVoltaFaseAnterior.eventos.FindAll(eventosAEncontrar => eventosAEncontrar.tpEvento.Equals(tpEventoEnum.Gol_Penalti) && eventosAEncontrar.equipe.id == partidasFaseAnterior[iCount].equipe1.id).Count;
                                    golsPenaltiEquipe2 = partidaDeVoltaFaseAnterior.eventos.FindAll(eventosAEncontrar => eventosAEncontrar.tpEvento.Equals(tpEventoEnum.Gol_Penalti) && eventosAEncontrar.equipe.id == partidasFaseAnterior[iCount].equipe2.id).Count;

                                    if (golsPenaltiEquipe1 > golsPenaltiEquipe2)
                                    {
                                        equipeVencedora = partidaFaseAnterior.equipe1;
                                    }
                                    else
                                    {
                                        if (golsPenaltiEquipe2 > golsPenaltiEquipe1)
                                        {
                                            equipeVencedora = partidaFaseAnterior.equipe2;
                                        }
                                    }
                                }
                                else
                                {
                                    // Não empatou
                                    if (golsEquipe1 > golsEquipe2)
                                    {
                                        equipeVencedora = partidaFaseAnterior.equipe1;
                                    }
                                    else
                                    {
                                        if (golsEquipe2 > golsEquipe1)
                                        {
                                            equipeVencedora = partidaFaseAnterior.equipe2;
                                        }
                                    }
                                }

                                timesClassificadosFaseAnterior.Add(equipeVencedora);
                            }
                        }
                        else
                        {
                            // Verifica o vencedor
                            golsEquipe1 = partidaFaseAnterior.eventos.FindAll(eventosAEncontrar => eventosAEncontrar.tpEvento.Equals(tpEventoEnum.Gol) && eventosAEncontrar.equipe.id == partidasFaseAnterior[iCount].equipe1.id).Count;
                            golsEquipe2 = partidaFaseAnterior.eventos.FindAll(eventosAEncontrar => eventosAEncontrar.tpEvento.Equals(tpEventoEnum.Gol) && eventosAEncontrar.equipe.id == partidasFaseAnterior[iCount].equipe2.id).Count;

                            // Verifica se a partida empatou e foi para os penaltis
                            if (golsEquipe1 == golsEquipe2)
                            {
                                int golsPenaltiEquipe1, golsPenaltiEquipe2;
                                golsPenaltiEquipe1 = partidaFaseAnterior.eventos.FindAll(eventosAEncontrar => eventosAEncontrar.tpEvento.Equals(tpEventoEnum.Gol_Penalti) && eventosAEncontrar.equipe.id == partidasFaseAnterior[iCount].equipe1.id).Count;
                                golsPenaltiEquipe2 = partidaFaseAnterior.eventos.FindAll(eventosAEncontrar => eventosAEncontrar.tpEvento.Equals(tpEventoEnum.Gol_Penalti) && eventosAEncontrar.equipe.id == partidasFaseAnterior[iCount].equipe2.id).Count;

                                if (golsPenaltiEquipe1 > golsPenaltiEquipe2)
                                {
                                    equipeVencedora = partidaFaseAnterior.equipe1;
                                }
                                else
                                {
                                    if (golsPenaltiEquipe2 > golsPenaltiEquipe1)
                                    {
                                        equipeVencedora = partidaFaseAnterior.equipe2;
                                    }
                                }
                            }
                            else
                            {
                                // Não empatou
                                if (golsEquipe1 > golsEquipe2)
                                {
                                    equipeVencedora = partidaFaseAnterior.equipe1;
                                }
                                else
                                {
                                    if (golsEquipe2 > golsEquipe1)
                                    {
                                        equipeVencedora = partidaFaseAnterior.equipe2;
                                    }
                                }
                            }

                            timesClassificadosFaseAnterior.Add(equipeVencedora);
                        }
                    }

                    int numPartidasASeremGeradasProximaFase = 0;

                    // Faz a criação das partidas
                    Competicao_Partida partida;
                    EquipeCompeticao   equipe1, equipe2;
                    switch (numProximaFase)
                    {
                    case -1:     // Final
                        numPartidasASeremGeradasProximaFase = 1;

                        equipe1 = timesClassificadosFaseAnterior[0];    equipe2 = timesClassificadosFaseAnterior[1];
                        partida = new Competicao_Partida(equipe1, equipe2, numProximaFase, 1);
                        CompeticaoRepositorio.Instance.insertPartida(ref competicao, partida);

                        break;

                    case -2:     // Semi-Final
                        equipe1 = timesClassificadosFaseAnterior[0]; equipe2 = timesClassificadosFaseAnterior[1];
                        partida = new Competicao_Partida(equipe1, equipe2, numProximaFase, 1);
                        CompeticaoRepositorio.Instance.insertPartida(ref competicao, partida);

                        equipe1 = timesClassificadosFaseAnterior[2]; equipe2 = timesClassificadosFaseAnterior[3];
                        partida = new Competicao_Partida(equipe1, equipe2, numProximaFase, 2);
                        CompeticaoRepositorio.Instance.insertPartida(ref competicao, partida);

                        numPartidasASeremGeradasProximaFase = 2;
                        break;

                    case -3:     // Quartas de Final
                        equipe1 = timesClassificadosFaseAnterior[0]; equipe2 = timesClassificadosFaseAnterior[1];
                        partida = new Competicao_Partida(equipe1, equipe2, numProximaFase, 1);
                        CompeticaoRepositorio.Instance.insertPartida(ref competicao, partida);

                        equipe1 = timesClassificadosFaseAnterior[2]; equipe2 = timesClassificadosFaseAnterior[3];
                        partida = new Competicao_Partida(equipe1, equipe2, numProximaFase, 2);
                        CompeticaoRepositorio.Instance.insertPartida(ref competicao, partida);

                        equipe1 = timesClassificadosFaseAnterior[4]; equipe2 = timesClassificadosFaseAnterior[5];
                        partida = new Competicao_Partida(equipe1, equipe2, numProximaFase, 3);
                        CompeticaoRepositorio.Instance.insertPartida(ref competicao, partida);

                        equipe1 = timesClassificadosFaseAnterior[6]; equipe2 = timesClassificadosFaseAnterior[7];
                        partida = new Competicao_Partida(equipe1, equipe2, numProximaFase, 4);
                        CompeticaoRepositorio.Instance.insertPartida(ref competicao, partida);

                        numPartidasASeremGeradasProximaFase = 4;
                        break;
                    }

                    // Cria as partidas de volta da fase final
                    if (competicao.jogosIdaEVolta_FaseFinal)
                    {
                        List <Competicao_Partida> partidasIda = competicao.partidas.FindAll(partidasIdaAEncontrar => partidasIdaAEncontrar.rodada == numProximaFase);
                        for (int numPartidaVolta = 0; numPartidaVolta < partidasIda.Count; numPartidaVolta++)
                        {
                            Competicao_Partida partidaDeVolta = new Competicao_Partida(partidasIda[numPartidaVolta].equipe2, partidasIda[numPartidaVolta].equipe1, numProximaFase, partidasIda[numPartidaVolta].numGrupo);
                            CompeticaoRepositorio.Instance.insertPartida(ref competicao, partidaDeVolta);
                        }
                    }
                }

                competicao.fase_Atual = numProximaFase;
                CompeticaoRepositorio.Instance.update(competicao);

                load(null, null);
            }
        }
Exemplo n.º 10
0
        private void dgvPartidas_CellMouseClick(object sender, DataGridViewCellMouseEventArgs e)
        {
            if (e.RowIndex > -1 && e.ColumnIndex > -1)
            {
                if (e.Button == MouseButtons.Right)
                {
                    DataGridView dataGridView = (DataGridView)sender;

                    // Recupera a partida que foi selecionada
                    List <Competicao_Partida> partidas = competicao.partidas.FindAll(find => find.rodada == Convert.ToInt32(dataGridView.Tag));
                    Competicao_Partida        partida  = partidas[e.RowIndex];

                    // Cria o menu de contexto e suas respectivas configurações para cada equipe do grupo
                    ContextMenuStrip  contextMenuStrip = new ContextMenuStrip();
                    ToolStripMenuItem toolStripMenuItem;

                    toolStripMenuItem        = new ToolStripMenuItem("Importar planilha da partida");
                    toolStripMenuItem.Click += importarPlanilha;
                    toolStripMenuItem.Tag    = new List <Object>()
                    {
                        competicao, partida, dataGridView, partidas
                    };
                    toolStripMenuItem.Image   = Properties.Resources.import;
                    toolStripMenuItem.Enabled = !partida.encerrada;
                    contextMenuStrip.Items.Add(toolStripMenuItem);

                    toolStripMenuItem        = new ToolStripMenuItem("Exportar layout da planilha para a partida");
                    toolStripMenuItem.Click += exportarPlanilha;
                    toolStripMenuItem.Tag    = new List <Object>()
                    {
                        competicao, partida, dataGridView, partidas
                    };
                    toolStripMenuItem.Image   = Properties.Resources.export;
                    toolStripMenuItem.Enabled = !partida.encerrada;
                    contextMenuStrip.Items.Add(toolStripMenuItem);

                    toolStripMenuItem        = new ToolStripMenuItem("Definir árbitro da partida");
                    toolStripMenuItem.Image  = Properties.Resources.arbitro;
                    toolStripMenuItem.Click += (_sender, _e) => {
                        setArbitroForm = new SetArbitro(usuarioLogado, competicao, partida);

                        setArbitroForm.FormClosing += (__sender, __e) => {
                            if (!(setArbitroForm.arbitroSelecionado is null))
                            {
                                partida.arbitro    = setArbitroForm.arbitroSelecionado;
                                partida.id_Arbitro = setArbitroForm.arbitroSelecionado.pessoa.id;

                                CompeticaoRepositorio.Instance.updatePartida(ref competicao, partida);

                                int numRodada = Convert.ToInt32(Convert.ToInt32(dataGridView.Tag));
                                if (numRodada >= 0)
                                {
                                    numRodada--;
                                }
                                CompeticaoViewUtilidades.refreshDataGridViewRodadas(dataGridView, partidas, competicao, numRodada);
                            }
                        };

                        setArbitroForm.ShowDialog();
                    };
                    toolStripMenuItem.Tag = new List <Object>()
                    {
                        competicao, partida, dataGridView, partidas
                    };
                    toolStripMenuItem.Enabled = !partida.encerrada;
                    contextMenuStrip.Items.Add(toolStripMenuItem);

                    toolStripMenuItem        = new ToolStripMenuItem("Exportar jogos da rodada para HTML");
                    toolStripMenuItem.Click += (_sender, _e) => {
                        RelatorioHTML.relatorioPartidas(competicao, partidas, Convert.ToInt32(dataGridView.Tag), tcPartidas.SelectedTab.Text,
                                                        MessageBox.Show("Gostaria de exibir o logo das equipes no relatório de partidas?", String.Format("{0} - Relatório de partidas", competicao.nome), MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.Yes);
                    };
                    toolStripMenuItem.Tag = new List <Object>()
                    {
                        partidas
                    };
                    toolStripMenuItem.Image = Properties.Resources.export_report;
                    contextMenuStrip.Items.Add(toolStripMenuItem);

                    // Define onde será aberto o menu de contexto
                    contextMenuStrip.Show(this, this.PointToClient(MousePosition));
                }
            }
        }
Exemplo n.º 11
0
        public static Competicao_Partida importarPlanilha(Competicao competicao, Competicao_Partida partida)
        {
            string       stringLine;
            StreamReader file = null;

            try {
                OpenFileDialog openFileDialog = new OpenFileDialog();
                openFileDialog.Filter   = "CSV|*.csv";
                openFileDialog.Title    = String.Format("{0} - {1} x {2} - Importe a planilha para a partida", competicao.nome, partida.equipe1.nome, partida.equipe2.nome);
                openFileDialog.FileName = String.Format("{0} - {1} x {2}", competicao.nome, partida.equipe1.nome, partida.equipe2.nome);
                if (openFileDialog.ShowDialog() == DialogResult.OK)
                {
                    // Lê o arquivo
                    file = new StreamReader(openFileDialog.FileName);

                    int numLinha = 0;

                    // Atletas suspensos
                    List <Competicao_Suspensao> atletas_Suspensos_Equipe1 = CompeticaoRepositorio.Instance.getSuspensoesPorEquipe(competicao.id, partida.equipe1.id);
                    List <Competicao_Suspensao> atletas_Suspensos_Equipe2 = CompeticaoRepositorio.Instance.getSuspensoesPorEquipe(competicao.id, partida.equipe2.id);

                    // Lê linha por linha
                    while ((stringLine = file.ReadLine()) != null)
                    {
                        // Separa a linha toda num array
                        List <string> line = stringLine.Split(';').ToList();

                        switch (numLinha)
                        {
                        case 1:     // Linha do id da competição
                            if (Convert.ToInt32(line[0]) != competicao.id)
                            {
                                throw new Exception(String.Format("{0} x {1} - Não foi possível importar a planilha da partida" +
                                                                  Environment.NewLine + Environment.NewLine + "O id da Competição na planilha ({2}) está diferente do id da competição({3}).",
                                                                  partida.equipe1.nome, partida.equipe2.nome, line[0], competicao.id));
                            }
                            break;

                        case 4:     // Linha do id da partida
                            if (Convert.ToInt32(line[0]) != partida.id)
                            {
                                throw new Exception(String.Format("{0} x {1} - Não foi possível importar a planilha da partida" +
                                                                  Environment.NewLine + Environment.NewLine + "O id da partida na planilha ({2}) está diferente do id da partida ({3}).",
                                                                  partida.equipe1.nome, partida.equipe2.nome, line[0], partida.id));
                            }
                            break;

                        case 13:     // Linha do id das equipes
                            if (Convert.ToInt32(line[0]) != partida.equipe1.id)
                            {
                                throw new Exception(String.Format("{0} x {1} - Não foi possível importar a planilha da partida" +
                                                                  Environment.NewLine + Environment.NewLine + "O id da equipe 1 na planilha ({2}) está diferente do id da equipe 1 ({3}).",
                                                                  partida.equipe1.nome, partida.equipe2.nome, line[0], partida.equipe1.id));
                            }

                            if (Convert.ToInt32(line[3]) != partida.equipe2.id)
                            {
                                throw new Exception(String.Format("{0} x {1} - Não foi possível importar a planilha da partida" +
                                                                  Environment.NewLine + Environment.NewLine + "O id da equipe 2 na planilha ({2}) está diferente do id da equipe 2 ({3}).",
                                                                  partida.equipe1.nome, partida.equipe2.nome, line[3], partida.equipe2.id));
                            }
                            break;

                        default:
                            if (numLinha >= 16 && line.Count == 17)
                            {
                                List <string> infoEquipe1 = line.GetRange(0, 7);
                                List <string> infoEquipe2 = line.GetRange(9, 7);

                                Atleta atletaEquipe1, atletaEquipe2;

                                if (infoEquipe1[0].Length == 0 && infoEquipe2[0].Length == 0)
                                {
                                    throw new Exception(String.Format("Não foi identificado o id dos jogadores na linha {0} da planilha.", numLinha + 1));
                                }

                                if (infoEquipe1[0].Length > 0)
                                {
                                    atletaEquipe1 = PessoaRepositorio.Instance.getAtletaByCompeticao(Convert.ToInt32(infoEquipe1[0]), competicao.id);

                                    if (partida.equipe1.atletas.Find(find => find.pessoa.id == atletaEquipe1.pessoa.id) is null)
                                    {
                                        // Inconsistencia
                                        throw new Exception();
                                    }

                                    // Verifica se o atleta não está suspenso
                                    if (atletas_Suspensos_Equipe1.Find(find => find.atleta.pessoa.id == atletaEquipe1.pessoa.id) is null)
                                    {
                                        // Cria os eventos da Equipe 1
                                        int numGols1, numGolsPenalti1, numCA1, numCV1;
                                        numGols1        = Convert.ToInt32(infoEquipe1[3]);
                                        numGolsPenalti1 = Convert.ToInt32(infoEquipe1[4]);
                                        numCA1          = Convert.ToInt32(infoEquipe1[5]);
                                        numCV1          = Convert.ToInt32(infoEquipe1[6]);
                                        for (int iCount = 0; iCount < numGols1; iCount++)
                                        {
                                            partida.eventos.Add(new Competicao_Partida_Evento(partida.equipe1, atletaEquipe1, tpEventoEnum.Gol));
                                        }

                                        for (int iCount = 0; iCount < numGolsPenalti1; iCount++)
                                        {
                                            partida.eventos.Add(new Competicao_Partida_Evento(partida.equipe1, atletaEquipe1, tpEventoEnum.Gol_Penalti));
                                        }

                                        for (int iCount = 0; iCount < numCA1; iCount++)
                                        {
                                            partida.eventos.Add(new Competicao_Partida_Evento(partida.equipe1, atletaEquipe1, tpEventoEnum.CartaoAmarelo));
                                        }

                                        for (int iCount = 0; iCount < numCV1; iCount++)
                                        {
                                            partida.eventos.Add(new Competicao_Partida_Evento(partida.equipe1, atletaEquipe1, tpEventoEnum.CartaoVermelho));
                                        }
                                    }
                                }

                                if (infoEquipe2[0].Length > 0)
                                {
                                    atletaEquipe2 = PessoaRepositorio.Instance.getAtletaByCompeticao(Convert.ToInt32(infoEquipe2[0]), competicao.id);

                                    if (partida.equipe2.atletas.Find(find => find.pessoa.id == atletaEquipe2.pessoa.id) is null)
                                    {
                                        // Inconsitencia
                                        throw new Exception();
                                    }

                                    // Verifica se o atleta não está suspenso
                                    if (atletas_Suspensos_Equipe2.Find(find => find.atleta.pessoa.id == atletaEquipe2.pessoa.id) is null)
                                    {
                                        // Cria os eventos da Equipe 2
                                        int numGols2, numGolsPenalti2, numCA2, numCV2;
                                        numGols2        = Convert.ToInt32(infoEquipe2[3]);
                                        numGolsPenalti2 = Convert.ToInt32(infoEquipe2[4]);
                                        numCA2          = Convert.ToInt32(infoEquipe2[5]);
                                        numCV2          = Convert.ToInt32(infoEquipe2[6]);
                                        for (int iCount = 0; iCount < numGols2; iCount++)
                                        {
                                            partida.eventos.Add(new Competicao_Partida_Evento(partida.equipe2, atletaEquipe2, tpEventoEnum.Gol));
                                        }

                                        for (int iCount = 0; iCount < numGolsPenalti2; iCount++)
                                        {
                                            partida.eventos.Add(new Competicao_Partida_Evento(partida.equipe2, atletaEquipe2, tpEventoEnum.Gol_Penalti));
                                        }

                                        for (int iCount = 0; iCount < numCA2; iCount++)
                                        {
                                            partida.eventos.Add(new Competicao_Partida_Evento(partida.equipe2, atletaEquipe2, tpEventoEnum.CartaoAmarelo));
                                        }

                                        for (int iCount = 0; iCount < numCV2; iCount++)
                                        {
                                            partida.eventos.Add(new Competicao_Partida_Evento(partida.equipe2, atletaEquipe2, tpEventoEnum.CartaoVermelho));
                                        }
                                    }
                                }
                            }
                            break;
                        }

                        numLinha++;
                    }

                    file.Close();
                }

                // Insere efetivamente os eventos no banco de dados
                for (int iCount = 0; iCount < partida.eventos.Count; iCount++)
                {
                    CompeticaoRepositorio.Instance.insertEvento(ref partida, partida.eventos[iCount]);
                }

                return(partida);
            } catch (Exception ex) {
                partida.eventos = new List <Competicao_Partida_Evento>();

                if (!(file is null))
                {
                    file.Close();
                }

                MessageBox.Show(ex.Message,
                                String.Format("Não foi possível importar a planilha da partida entre {0} e {1}", partida.equipe1.nome, partida.equipe2.nome),
                                MessageBoxButtons.OK,
                                MessageBoxIcon.Warning);

                return(null);
            }
        }
Exemplo n.º 12
0
        public static void exportarPlanilha(Competicao competicao, Competicao_Partida partida)
        {
            StringBuilder conteudoCSV = new StringBuilder();

            // Cabeçalho
            conteudoCSV.AppendLine("idCompeticao;Competicao");                                             // Linha 1
            conteudoCSV.AppendFormat("{0};{1}", competicao.id, competicao.nome).AppendLine().AppendLine(); // Linha 2
            /*  idCompeticao = A2 - [1, 0]   */

            // Partida
            conteudoCSV.AppendLine("idPartida");                                   // Linha 4
            conteudoCSV.AppendFormat("{0}", partida.id).AppendLine().AppendLine(); // Linha 5
            /*  idPartida = A5 - [4, 0]  */

            // Data da partida
            conteudoCSV.AppendLine("dataPartida"); // Linha 7
            if (partida.data is null)
            {
                conteudoCSV.AppendFormat("{0}", "").AppendLine().AppendLine(); // Linha 8
            }
            else
            {
                conteudoCSV.AppendFormat("{0}", ((DateTime)partida.data).ToString("dd/MM/yyyy")).AppendLine().AppendLine(); // Linha 8
            }
            /*  dataPartida = A8 - [7, 0]   */

            // Árbitro
            conteudoCSV.AppendLine("idArbito;Arbitro");                                                                                                                                             // Linha 10
            conteudoCSV.AppendFormat("{0};{1}", (partida.arbitro is null ? 0 : partida.arbitro.pessoa.id), (partida.arbitro is null ? "" : partida.arbitro.pessoa.nome)).AppendLine().AppendLine(); // Linha 11
            /*  idCompeticao = A11 - [10, 0]   */

            // Equipes
            conteudoCSV.AppendLine("idEquipe1;Equipe 1; ;idEquipe2;Equipe 2");                                                                                          // Linha 13
            conteudoCSV.AppendFormat("{0};{1};;{2};{3}", partida.equipe1.id, partida.equipe1.nome, partida.equipe2.id, partida.equipe2.nome).AppendLine().AppendLine(); // Linha 14

            /*  idEquipe1 = A14 - [13, 0]
             *  idEquipe2 = D14 - [13, 3] */
            // Atletas suspensos
            List <Competicao_Suspensao> atletas_Suspensos_Equipe1 = CompeticaoRepositorio.Instance.getSuspensoesPorEquipe(competicao.id, partida.equipe1.id);
            List <Competicao_Suspensao> atletas_Suspensos_Equipe2 = CompeticaoRepositorio.Instance.getSuspensoesPorEquipe(competicao.id, partida.equipe2.id);

            // Atletas
            conteudoCSV.AppendLine("idAtleta;numAtleta;Atleta;Gol;Gol Penalti;Cartao Amarelo;Cartao Vermelho;;;idAtleta;numAtleta;Atleta;Gol;Gol Penalti;Cartao Amarelo;Cartao Vermelho;"); // Linha 16

            int numLinhas = (partida.equipe1.atletas.Count > partida.equipe2.atletas.Count ? partida.equipe1.atletas.Count : partida.equipe2.atletas.Count);

            for (int iCount = 0; iCount < numLinhas; iCount++)
            {
                Atleta atletaEquipe1, atletaEquipe2;
                string atletaSuspenso_Equipe1 = "", atletaSuspenso_Equipe2 = "";

                if (iCount < partida.equipe1.atletas.Count)
                {
                    atletaEquipe1 = partida.equipe1.atletas[iCount];

                    if (!(atletas_Suspensos_Equipe1.Find(find => find.atleta.pessoa.id == atletaEquipe1.pessoa.id) is null))
                    {
                        atletaSuspenso_Equipe1 = "Suspenso";
                    }

                    conteudoCSV.AppendFormat("{0};{1};{2};0;0;0;0;{3};", atletaEquipe1.pessoa.id, atletaEquipe1.numero, atletaEquipe1.pessoa.nome, atletaSuspenso_Equipe1);
                }
                else
                {
                    conteudoCSV.Append(";;;;;;;;");
                }

                /*  idAtleta = A? - [?, 0]
                 *  numeroAtleta = B? - [?, 1]
                 *  Gol = D? - [?, 3]
                 *  Gol Penalti = E? - [?, 4]
                 *  CA = F? - [?, 5]
                 *  CV = G? - [?, 6]
                 */

                conteudoCSV.Append(";");

                if (iCount < partida.equipe2.atletas.Count)
                {
                    atletaEquipe2 = partida.equipe2.atletas[iCount];

                    if (!(atletas_Suspensos_Equipe2.Find(find => find.atleta.pessoa.id == atletaEquipe2.pessoa.id) is null))
                    {
                        atletaSuspenso_Equipe2 = "Suspenso";
                    }

                    conteudoCSV.AppendFormat("{0};{1};{2};0;0;0;0;{3};", atletaEquipe2.pessoa.id, atletaEquipe2.numero, atletaEquipe2.pessoa.nome, atletaSuspenso_Equipe2);
                }
                else
                {
                    conteudoCSV.Append(";;;;;;;;");
                }

                /*  idAtleta = I? - [?, 8]
                 *  numeroAtleta = J? - [?, 9]
                 *  Gol = L? - [?, 11]
                 *  Gol Penalti = M? - [?, 12]
                 *  CA = N? - [?, 13]
                 *  CV = O? - [?, 14]
                 */

                conteudoCSV.AppendLine();
            }

            // Escolhe onde vai salvar o arquivo
            SaveFileDialog saveFileDialog = new SaveFileDialog();

            saveFileDialog.Filter   = "CSV|*.csv";
            saveFileDialog.FileName = String.Format("{0} - {1} x {2}", competicao.nome, partida.equipe1.nome, partida.equipe2.nome);
            saveFileDialog.Title    = String.Format("Escolha um diretório para salvar templade da partida entre {0} e {1}", partida.equipe1.nome, partida.equipe2.nome);

            if (saveFileDialog.ShowDialog() == DialogResult.OK)
            {
                // Salva o arquivo
                StreamWriter salvar = new StreamWriter(saveFileDialog.FileName);
                salvar.WriteLine(conteudoCSV.ToString());
                salvar.Close();

                if (MessageBox.Show(String.Format("Gostaria de abrir a planilha {0} ?", saveFileDialog.FileName),
                                    String.Format("{0} x {1}", partida.equipe1.nome, partida.equipe2.nome),
                                    MessageBoxButtons.YesNo,
                                    MessageBoxIcon.Question) == DialogResult.Yes)
                {
                    System.Diagnostics.Process.Start(saveFileDialog.FileName);
                }
            }
        }