public static void relatorioGrupos(Competicao competicao, bool fotoEquipe, List <List <EquipeCompeticao> > timesProximaFase) { StringBuilder cabecalhoHTML = new StringBuilder(); StringBuilder cabecalhoRelatorio = new StringBuilder(); StringBuilder equipesRelatorio = new StringBuilder(); StringBuilder finalRelatorio = new StringBuilder(); StringBuilder finalHTML = new StringBuilder(); StringBuilder fullHTML = new StringBuilder(); //Cabeçalho HTML 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} - Classificação</title>", competicao.nome).AppendLine(); cabecalhoHTML.AppendLine(" </head>"); cabecalhoHTML.AppendLine(" <body>"); fullHTML.Append(cabecalhoHTML.ToString()); //Cabeçalho Relatório - Por Grupo for (int iGrupo = 0; iGrupo < competicao.grupos.Count; iGrupo++) { // Ordena as equipes competicao.grupos[iGrupo] = (from customDS in competicao.grupos[iGrupo] orderby customDS.pontos descending, customDS.vitorias descending, customDS.golsPro - customDS.golsContra descending select customDS).ToList <EquipeCompeticao>(); cabecalhoRelatorio = new StringBuilder(); cabecalhoRelatorio.AppendLine(" <div class=\"card\">"); cabecalhoRelatorio.AppendFormat(" <div class=\"card-header bg-primary mb-3\"><strong>{0}</strong></div>", CompeticaoViewUtilidades.getNomeGrupo(competicao.nomesGrupos, iGrupo + 1)).AppendLine(); cabecalhoRelatorio.AppendLine(" <div class=\"card-body\">"); cabecalhoRelatorio.AppendLine(" <table class=\"table table-striped\">"); cabecalhoRelatorio.AppendLine(" <thead>"); cabecalhoRelatorio.AppendLine(" <tr>"); cabecalhoRelatorio.AppendLine(" <th style=\"width: 6%\">P.</th>"); if (fotoEquipe) { cabecalhoRelatorio.AppendLine(" <th style=\"width: 10%\"> </th>"); } cabecalhoRelatorio.AppendLine(" <th style=\"width: 20%\">Equipe</th>"); cabecalhoRelatorio.AppendLine(" <th style=\"width: 9%\">Pts</th>"); cabecalhoRelatorio.AppendLine(" <th style=\"width: 6%\">J</th>"); cabecalhoRelatorio.AppendLine(" <th style=\"width: 6%\">V</th>"); cabecalhoRelatorio.AppendLine(" <th style=\"width: 6%\">E</th>"); cabecalhoRelatorio.AppendLine(" <th style=\"width: 6%\">D</th>"); cabecalhoRelatorio.AppendLine(" <th style=\"width: 6%\">GP</th>"); cabecalhoRelatorio.AppendLine(" <th style=\"width: 6%\">GC</th>"); cabecalhoRelatorio.AppendLine(" <th style=\"width: 6%\">SG</th>"); cabecalhoRelatorio.AppendLine(" <th style=\"width: 6%\">%</th>"); cabecalhoRelatorio.AppendLine(" </tr>"); cabecalhoRelatorio.AppendLine(" </thead>"); cabecalhoRelatorio.AppendLine(" <tbody>"); fullHTML.Append(cabecalhoRelatorio.ToString()); //Equipes for (int iEquipe = 0; iEquipe < competicao.grupos[iGrupo].Count; iEquipe++) { EquipeCompeticao equipe = competicao.grupos[iGrupo][iEquipe]; //Verifica se a equipe até então está se classificando bool classificada = false; if (timesProximaFase[iGrupo].Contains(equipe)) { classificada = true; } equipesRelatorio = new StringBuilder(); equipesRelatorio.AppendFormat(" <tr {0}>", (classificada ? "style=\"font-weight:bold\"" : "")).AppendLine(); equipesRelatorio.AppendFormat(" <td>{0}º</td>", iEquipe + 1).AppendLine(); if (fotoEquipe) { equipesRelatorio.AppendFormat(" <td><div class=\"text-center\"> <img height=\"75\" src=\"file:///{0}\" class=\"rounded\"></div></td> ", (equipe.urlLogo is null ? "" : equipe.urlLogo)).AppendLine(); } equipesRelatorio.AppendFormat(" <td>{0}</td>", equipe.nome).AppendLine(); equipesRelatorio.AppendFormat(" <td>{0}</td>", equipe.pontos).AppendLine(); equipesRelatorio.AppendFormat(" <td>{0}</td>", equipe.vitorias + equipe.derrotas + equipe.empates).AppendLine(); equipesRelatorio.AppendFormat(" <td>{0}</td>", equipe.vitorias).AppendLine(); equipesRelatorio.AppendFormat(" <td>{0}</td>", equipe.empates).AppendLine(); equipesRelatorio.AppendFormat(" <td>{0}</td>", equipe.derrotas).AppendLine(); equipesRelatorio.AppendFormat(" <td>{0}</td>", equipe.golsPro).AppendLine(); equipesRelatorio.AppendFormat(" <td>{0}</td>", equipe.golsContra).AppendLine(); equipesRelatorio.AppendFormat(" <td>{0}</td>", equipe.golsPro - equipe.golsContra).AppendLine(); if (equipe.vitorias + equipe.derrotas + equipe.empates > 0) { equipesRelatorio.AppendFormat(" <td>{0}</td>", equipe.pontos * 100 / ((equipe.vitorias + equipe.derrotas + equipe.empates) * 3)).AppendLine(); } else { equipesRelatorio.AppendFormat(" <td>{0}</td>", 0).AppendLine(); } equipesRelatorio.AppendLine(" </tr> "); fullHTML.Append(equipesRelatorio.ToString()); } //Parte final relatório finalRelatorio = new StringBuilder(); finalRelatorio.AppendLine(" </tbody>"); finalRelatorio.AppendLine(" </table>"); finalRelatorio.AppendLine(" </div>"); finalRelatorio.AppendLine(" </div>"); fullHTML.Append(finalRelatorio.ToString()); } //Final HTML finalHTML = new StringBuilder(); finalHTML.AppendLine(" </body>"); finalHTML.AppendLine("</html>"); 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 classificação"; saveFileDialog.FileName = String.Format("{0} - Relatório de classificação", competicao.nome); 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 classificação", MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.Yes) { System.Diagnostics.Process.Start(saveFileDialog.FileName); } } }
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); } } }
private void load(object sender, EventArgs e) { lblCompeticao.Text = competicao.nome; competicao.partidas = CompeticaoRepositorio.Instance.getPartidasPorCompeticao(competicao.id); // Cria as abas das partidas tcPartidas.Controls.Clear(); tcAbas.SelectedTab = tpPartidas; dgvRodadas = new List <DataGridView>(); partidasPorRodada = new List <List <Competicao_Partida> >(); int numRodadas = CompeticaoRepositorio.Instance.getNumRodadas(competicao); for (int numRodada = 0; numRodada < numRodadas; numRodada++) { DataGridView dgvRodada = CompeticaoViewUtilidades.criaAba("Rodada " + (numRodada + 1).ToString(), numRodada, tcPartidas, dgvPartidas_CellMouseClick); dgvRodada.Tag = numRodada + 1; dgvRodada.ReadOnly = false; dgvRodada.CellEndEdit += dgvRodada_CellEndEdit; dgvRodada.CellMouseDoubleClick += dgvRodadas_CellMouseDoubleClick; dgvRodadas.Add(dgvRodada); List <Competicao_Partida> partidas = competicao.partidas.FindAll(partidasAEncontrar => partidasAEncontrar.rodada == numRodada + 1); CompeticaoViewUtilidades.refreshDataGridViewRodadas(dgvRodada, partidas, competicao, numRodada); partidasPorRodada.Add(partidas); } // Cria as abas das partidas da fase final int numAbasAdicionais = 0; switch (competicao.faseFinal) { case FaseFinalEnum._1_Nao: numAbasAdicionais = 0; break; case FaseFinalEnum._2_Final: numAbasAdicionais = 1; break; case FaseFinalEnum._3_SemiFinal: numAbasAdicionais = 2; break; case FaseFinalEnum._4_QuartasFinal: numAbasAdicionais = 3; break; case FaseFinalEnum._5_OitavasFinal: numAbasAdicionais = 4; break; } // Define o nome da aba e o número da rodada (fase final) for (int numAbaAdicional = 0; numAbaAdicional < numAbasAdicionais; numAbaAdicional++) { int numRodada = 0; string nomeAba = CompeticaoViewUtilidades.getNomeAba(numAbasAdicionais, numAbaAdicional, ref numRodada); DataGridView dgvRodada = CompeticaoViewUtilidades.criaAba(nomeAba, numRodada, tcPartidas, dgvPartidas_CellMouseClick); dgvRodada.Tag = numRodada; dgvRodada.CellMouseDoubleClick += dgvRodadas_CellMouseDoubleClick; dgvRodada.ReadOnly = false; dgvRodada.CellEndEdit += dgvRodada_CellEndEdit; dgvRodadas.Add(dgvRodada); List <Competicao_Partida> partidas = competicao.partidas.FindAll(partidasAEncontrar => partidasAEncontrar.rodada == numRodada); partidasPorRodada.Add(partidas); CompeticaoViewUtilidades.refreshDataGridViewRodadas(dgvRodada, partidas, competicao, numRodada); } partidasPorRodada_view = new List <List <Competicao_Partida> >(partidasPorRodada); if (competicao.status == StatusEnum._0_Encerrada) { btnProximaFase.Enabled = false; } else { btnProximaFase.Enabled = true; } // Cria a abas dos grupos e a classificação tcClassificacao.Controls.Clear(); tcAbas.SelectedTab = tpClassificacao; // Seleciona os times até então classificados para a próxima fase int numProximaFase = 0; int numPartidasASeremGeradas = 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; } competicao.equipes = EquipeRepositorio.Instance.getEquipesByCompeticao(competicao.id); competicao.grupos = CompeticaoRepositorio.Instance.getGruposPorCompeticao(competicao.id, competicao.equipes); List <List <EquipeCompeticao> > timesProximaFase = Utilidades.listaEquipesClassificadas(competicao, numPartidasASeremGeradas, numProximaFase); for (int numGrupo = 0; numGrupo < competicao.numGrupos; numGrupo++) { DataGridView dgvGrupos = CompeticaoViewUtilidades.criaAba(CompeticaoViewUtilidades.getNomeGrupo(competicao.nomesGrupos, numGrupo + 1), numGrupo, tcClassificacao); dgvGrupos.Tag = new List <Object> { numGrupo, competicao, usuarioLogado }; dgvGrupos.CellMouseDoubleClick += CompeticaoViewUtilidades.dgvEquipesGrupo_CellMouseDoubleClick; if (numGrupo < competicao.grupos.Count) { CompeticaoViewUtilidades.refreshDataGridViewGrupos(competicao, dgvGrupos, competicao.grupos[numGrupo], timesProximaFase[numGrupo]); } else { CompeticaoViewUtilidades.refreshDataGridViewGrupos(competicao, dgvGrupos, null, null); } } // Cria a aba de artilheiros tcAbas.SelectedTab = tpArtilheiros; artilheiros = CompeticaoRepositorio.Instance.getArtilheiros(competicao.id); refreshDataGridViewArtilheiros(dgvArtilheiros, artilheiros); // Verifica qual a atual fase da competicao if (competicao.status == StatusEnum._0_Encerrada) { lblFase.Text = "Campeão: " + competicao.campeao.nome; } else { string nomeFaseAtual = ""; switch (competicao.fase_Atual) { case 0: nomeFaseAtual = "Classificatória"; break; case -1: nomeFaseAtual = "Final"; break; case -2: nomeFaseAtual = "Semi-Final"; break; case -3: nomeFaseAtual = "Quartas de Final"; break; case -4: nomeFaseAtual = "Oitava de Final"; break; case -5: nomeFaseAtual = "16 avos de Final"; break; case -6: nomeFaseAtual = "32 avos de Final"; break; } lblFase.Text = "Fase atual: " + nomeFaseAtual; } tcAbas.SelectedIndex = 0; //Preenche o ComboBox da busca cboCamposBusca.Items.Clear(); cboCamposBusca.Items.Add("Equipe"); cboCamposBusca.SelectedIndex = 0; }