public void CalcularVelocidadeMediaDeCadaPiloto(Dictionary <int, DadosCorridaPiloto> pDadosVoltaPilotos) { StringBuilder velocidadeMediaByPiloto = new StringBuilder(); var formatString = "|{0,-35}|{1,-35}|{2,-35}|"; velocidadeMediaByPiloto.AppendLine() .AppendFormat(Culture, formatString, "Código Piloto", "Nome Piloto", "Velocidade Média") .AppendLine(); String primeiraLinha = CriarLinhaFormatadoraColunasTabelas(velocidadeMediaByPiloto); velocidadeMediaByPiloto.Insert(0, primeiraLinha); velocidadeMediaByPiloto.Append(primeiraLinha).AppendLine(); // constroi relatorio da velocidade Média de Cada Piloto pDadosVoltaPilotos.ToList().ForEach(x => { velocidadeMediaByPiloto.AppendFormat(Culture, formatString, x.Value.Piloto.Codigo.ToString("D3"), x.Value.Piloto.NomePiloto, x.Value.VelocidadeMediaCorrida.ToString()).AppendLine(); }); //acrescenta no relatorio Final título seção Velcidade Média por Piloto RelatorioFinal.Append(Environment.NewLine).AppendLine().Append("-> [ VELOCIDADE MÉDIA POR PILOTO ]").AppendLine().AppendLine(); //append no relatorio Final dados sobre MELHOR VOLTA POR PILOTO RelatorioFinal.Append(velocidadeMediaByPiloto.ToString()); }
public void CalcularMelhorVoltaDeCadaPiloto(Dictionary <int, DadosCorridaPiloto> pDadosVoltaPilotos) { var melhorVoltaByPilotoRelatorio = new StringBuilder(); var formatString = "|{0,-35}|{1,-35}|{2,-35}|"; melhorVoltaByPilotoRelatorio.AppendLine() .AppendFormat(Culture, formatString, "Código Piloto", "Nome Piloto", "Melhor Volta") .AppendLine(); string primeiraLinha = CriarLinhaFormatadoraColunasTabelas(melhorVoltaByPilotoRelatorio); melhorVoltaByPilotoRelatorio.Insert(0, primeiraLinha); melhorVoltaByPilotoRelatorio.Append(primeiraLinha).AppendLine(); // constrói relatório da melhor Volta De Cada Piloto pDadosVoltaPilotos.ToList().ForEach(elem => { int codigoPiloto = elem.Key; String nomePiloto = elem.Value.Piloto.NomePiloto; TimeSpan melhorVolta = elem.Value.MelhorVolta; melhorVoltaByPilotoRelatorio.AppendFormat(Culture, formatString, codigoPiloto.ToString("D4"), nomePiloto, melhorVolta.ToString(@"hh\:mm\:ss\:fff")).AppendLine(); }); //acrescenta no relatório Final título como: [ MELHOR VOLTA POR PILOTO ] RelatorioFinal.AppendLine().AppendLine().Append("-> [ MELHOR VOLTA POR PILOTO ]").AppendLine().AppendLine(); //append no relatório Final dados sobre MELHOR VOLTA POR PILOTO RelatorioFinal.Append(melhorVoltaByPilotoRelatorio.ToString()); }
private Resultado DadosValidos(RelatorioFinal dados) { var resultado = new Resultado(); if (dados == null) { resultado.Inconsistencias.Add( "Preencha os Dados do RelatorioFinal"); } return(resultado); }
public ActionResult <Resultado> Post([FromBody] RelatorioFinal RelatorioFinal) { if (_service.UserProjectCan(RelatorioFinal.ProjetoId, User, Authorizations.ProjectPermissions.LeituraEscrita)) { var resultado = _service.Incluir(RelatorioFinal); if (resultado.Sucesso) { this.CreateLog(_service, RelatorioFinal.ProjetoId, RelatorioFinal); } return(resultado); } return(Forbid()); }
public Resultado Excluir(int id) { Resultado resultado = new Resultado(); resultado.Acao = "Exclusão de RelatorioFinal"; RelatorioFinal RelatorioFinal = _context.RelatorioFinal.FirstOrDefault(p => p.Id == id); if (RelatorioFinal == null) { resultado.Inconsistencias.Add("RelatorioFinal não encontrado"); } else { _context.Uploads.RemoveRange(_context.Uploads.Where(t => t.RelatorioFinalId == id)); _context.RelatorioFinal.Remove(RelatorioFinal); _context.SaveChanges(); } return(resultado); }
public ActionResult <Resultado> Put([FromBody] RelatorioFinal RelatorioFinal) { var Relatorio = _service._context.RelatorioFinal.Find(RelatorioFinal.Id); if (Relatorio != null) { if (_service.UserProjectCan(Relatorio.ProjetoId, User, Authorizations.ProjectPermissions.LeituraEscrita)) { _service._context.Entry(Relatorio).State = Microsoft.EntityFrameworkCore.EntityState.Detached; var resultado = _service.Atualizar(RelatorioFinal); if (resultado.Sucesso) { this.CreateLog(_service, Relatorio.ProjetoId, RelatorioFinal, Relatorio); } return(resultado); } return(Forbid()); } return(NotFound()); }
public Resultado Incluir(RelatorioFinal dados) { Resultado resultado = DadosValidos(dados); resultado.Acao = "Inclusão de RelatorioFinal"; RelatorioFinal RelatorioFinal = _context.RelatorioFinal .Where(p => p.ProjetoId == dados.ProjetoId) .FirstOrDefault(); if (RelatorioFinal != null) { resultado.Inconsistencias.Add("Já existe um RelatorioFinal final para o projeto. Remova-o ou atualize."); } if (resultado.Inconsistencias.Count == 0) { _context.RelatorioFinal.Add(dados); _context.SaveChanges(); resultado.Id = dados.Id.ToString(); } return(resultado); }
public void CalcularMelhorVoltaDaCorrida(Dictionary <int, DadosCorridaPiloto> pDadosVoltaPilotos) { StringBuilder melhorVoltaDaCorrida = new StringBuilder(); var formatString = "|{0,-35}|{1,-35}|{2,-35}|"; melhorVoltaDaCorrida.AppendLine() .AppendFormat(Culture, formatString, "Código Piloto", "Nome Piloto", "Tempo da Volta") .AppendLine(); String primeiraLinha = CriarLinhaFormatadoraColunasTabelas(melhorVoltaDaCorrida); melhorVoltaDaCorrida.Insert(0, primeiraLinha); melhorVoltaDaCorrida.Append(primeiraLinha).AppendLine(); //hashmap que sera retornado. OBS é um LinkedHashMap pois ele sempre preserva a ordem de insercão //pilotos ordenados pelo menor tempo de volta var pilotosOrdenadosByMenorTempoVolta = new Dictionary <int, DadosCorridaPiloto>(); //ordena o dicionário pelo menor tempo de volta de cada piloto pDadosVoltaPilotos.ToList().OrderBy(x => x.Value.MelhorVolta).ToList() .ForEach(x => pilotosOrdenadosByMenorTempoVolta.Add(x.Key, x.Value)); DadosCorridaPiloto dadosMelhorPiloto = pilotosOrdenadosByMenorTempoVolta.FirstOrDefault().Value; int codigoPiloto = dadosMelhorPiloto.Piloto.Codigo; String nomePiloto = dadosMelhorPiloto.Piloto.NomePiloto; TimeSpan melhorVolta = dadosMelhorPiloto.MelhorVolta; melhorVoltaDaCorrida.AppendFormat(Culture, formatString, codigoPiloto.ToString("D3"), nomePiloto, melhorVolta.ToString(@"hh\:mm\:ss\:fff")).AppendLine(); //acrescenta no relatorio Final título seção MELHOR VOLTA POR PILOTO RelatorioFinal.AppendLine().AppendLine().Append("-> [ MELHOR VOLTA DA CORRIDA ]").AppendLine().AppendLine(); //append no relatorio Final dados sobre MELHOR VOLTA POR PILOTO RelatorioFinal.Append(melhorVoltaDaCorrida.ToString()); }
public Resultado Atualizar(RelatorioFinal dados) { Resultado resultado = DadosValidos(dados); resultado.Acao = "Atualização de RelatorioFinal"; if (resultado.Inconsistencias.Count == 0) { RelatorioFinal RelatorioFinal = _context.RelatorioFinal.Where( p => p.Id == dados.Id).FirstOrDefault(); if (RelatorioFinal == null) { resultado.Inconsistencias.Add( "RelatorioFinal não encontrado"); } else { RelatorioFinal.ProdutoAlcancado = !dados.ProdutoAlcancado.HasValue ? RelatorioFinal.ProdutoAlcancado : dados.ProdutoAlcancado; RelatorioFinal.JustificativaProduto = (dados.JustificativaProduto == null) ? RelatorioFinal.JustificativaProduto : dados.JustificativaProduto; RelatorioFinal.EspecificacaoProduto = (dados.EspecificacaoProduto == null) ? RelatorioFinal.EspecificacaoProduto : dados.EspecificacaoProduto; RelatorioFinal.TecnicaPrevista = !dados.TecnicaPrevista.HasValue ? RelatorioFinal.TecnicaPrevista : dados.TecnicaPrevista; RelatorioFinal.JustificativaTecnica = (dados.JustificativaTecnica == null) ? RelatorioFinal.JustificativaTecnica : dados.JustificativaTecnica; RelatorioFinal.DescTecnica = (dados.DescTecnica == null) ? RelatorioFinal.DescTecnica : dados.DescTecnica; RelatorioFinal.AplicabilidadePrevista = !dados.AplicabilidadePrevista.HasValue ? RelatorioFinal.AplicabilidadePrevista : dados.AplicabilidadePrevista; RelatorioFinal.JustificativaAplicabilidade = (dados.JustificativaAplicabilidade == null) ? RelatorioFinal.JustificativaAplicabilidade : dados.JustificativaAplicabilidade; RelatorioFinal.DescTestes = (dados.DescTestes == null) ? RelatorioFinal.DescTestes : dados.DescTestes; RelatorioFinal.DescAbrangencia = (dados.DescAbrangencia == null) ? RelatorioFinal.DescAbrangencia : dados.DescAbrangencia; RelatorioFinal.DescAmbito = (dados.DescAmbito == null) ? RelatorioFinal.DescAmbito : dados.DescAmbito; RelatorioFinal.DescAtividades = (dados.DescAtividades == null) ? RelatorioFinal.DescAtividades : dados.DescAtividades; _context.SaveChanges(); } } return(resultado); }
public void CalcularClassificacaoFinalPilotos(Dictionary <int, DadosCorridaPiloto> pPosicaoFinal) { StringBuilder classificacaoFinal = new StringBuilder(); var formatString = "|{0,-30}|{1,-30}|{2,-30}|{3,-30}|{4,-30}|{5,-30}|"; classificacaoFinal.AppendLine() .AppendFormat(Culture, formatString, "Posição Chegada", "Código Piloto", "Nome Piloto", "Qtde Voltas Completadas", "Tempo Total de Prova", "Tempo de Chegada Após Vencedor") .AppendLine(); String primeiraLinha = CriarLinhaFormatadoraColunasTabelas(classificacaoFinal); classificacaoFinal.Insert(0, primeiraLinha); classificacaoFinal.Append(primeiraLinha).AppendLine(); TimeSpan tempoChegadaVencedor = pPosicaoFinal.FirstOrDefault().Value.HoraUltimaVolta; int count = 1; // constrói relatorio da classificação final de cada piloto pPosicaoFinal.ToList().ForEach(x => { int codigoPiloto = x.Key; string nomePiloto = x.Value.Piloto.NomePiloto; int qtdVoltas = x.Value.NumeroDeVoltasTotais; string tempoTotal = x.Value.TempoTotalCorrida.ToString(@"hh\:mm\:ss\:fff"); TimeSpan horaChegada = x.Value.HoraUltimaVolta; string diferencaToVencedor = (tempoChegadaVencedor.CompareTo(horaChegada) == 0) ? "(Não se Aplica)" : TimeSpanUtils.OperarTimeSpans(horaChegada, tempoChegadaVencedor, ETimeSpanOperacao.Subtracao).ToString(@"hh\:mm\:ss\:fff"); classificacaoFinal.AppendFormat(Culture, formatString, count++, codigoPiloto.ToString("D3"), nomePiloto, qtdVoltas, tempoTotal, diferencaToVencedor).AppendLine(); }); RelatorioFinal.Append("[ RESULTADO FINAL DA CORRIDA (CLASSIFICAÇÃO) E DIFERENÇA DE TEMPO DE CHEGADA DE CADA PILOTO PARA O VENCEDOR ]").AppendLine().AppendLine(); RelatorioFinal.Append(classificacaoFinal.ToString()); }
// função que calcula e faz chamadas para métodos que ajudarão a construir o relatório final public string CalcularResultadoCorrida(List <IVoltaCorrida> pVoltas) { // Dicionário que conterá dados relevantes de cada piloto ao final da corrida var dDadosPilotosCorrida = new Dictionary <int, DadosCorridaPiloto>(); // agrupa voltas por cada piloto var voltasGroupedByPiloto = pVoltas.GroupBy(x => x.Piloto.Codigo); // para cada piloto, itere sobre suas voltas foreach (var voltaG in voltasGroupedByPiloto) { var voltasPiloto = voltaG.Select(volta => volta); var somadorVelocidades = 0.0f; var ultimaVolta = voltasPiloto.Last(); //para cada volta do piloto atual foreach (var volta in voltasPiloto) { if (!dDadosPilotosCorrida.ContainsKey(voltaG.Key)) { somadorVelocidades += volta.VelocidadeMediaVolta; var dadosCorrida = new DadosCorridaPiloto(volta.HoraVolta, volta.NumeroVolta, volta.TempoVolta, volta.VelocidadeMediaVolta, volta.Piloto); dDadosPilotosCorrida.Add(voltaG.Key, dadosCorrida); } else { //se o piloto já esta no hashmap dados_pilotos_final_da_corrida, atualize seus dados// DadosCorridaPiloto dadosPiloto = dDadosPilotosCorrida[voltaG.Key]; //atualiza hora da última volta dadosPiloto.HoraUltimaVolta = volta.HoraVolta; //atualiza número da volta dadosPiloto.NumeroDeVoltasTotais = volta.NumeroVolta; //atualiza velocidadeTotal dadosPiloto.VelocidadeTotalCorrida = dadosPiloto.VelocidadeTotalCorrida + volta.VelocidadeMediaVolta; //atualiza tempo total durante a corrida dadosPiloto.TempoTotalCorrida = TimeSpanUtils.OperarTimeSpans(dadosPiloto.TempoTotalCorrida, volta.TempoVolta, ETimeSpanOperacao.Adicao); //se tempo da volta atual for melhor (menor) que o anterior, atualize este valor if (volta.TempoVolta < dadosPiloto.MelhorVolta) { dadosPiloto.MelhorVolta = volta.TempoVolta; } // variável que armazena a soma das velocidades de cada volta do piloto atual somadorVelocidades += volta.VelocidadeMediaVolta; // se for a última volta do piloto atual calcule sua Velocidade Média if (volta.Equals(ultimaVolta)) { float velocidadeMedia = somadorVelocidades / voltasPiloto.Count(); dadosPiloto.VelocidadeMediaCorrida = velocidadeMedia; somadorVelocidades = 0.0F; // reseta somadorVelocidades } //atualiza dados do piloto atual no dicionário dDadosPilotosCorrida dDadosPilotosCorrida[voltaG.Key] = dadosPiloto; } } } //Dicionário com classificação final dos pilotos Dictionary <int, DadosCorridaPiloto> posicaoFinal = ComputarPosicaoFinalDosPilotos(dDadosPilotosCorrida); //gera relatório da classificação final da corrida CalcularClassificacaoFinalPilotos(posicaoFinal); //gera relatório da melhor volta de cada piloto na corrida CalcularMelhorVoltaDeCadaPiloto(dDadosPilotosCorrida); //gera relatório da melhor volta da corrida CalcularMelhorVoltaDaCorrida(dDadosPilotosCorrida); //gera relatório da velocidade média de cada piloto na corrida CalcularVelocidadeMediaDeCadaPiloto(dDadosPilotosCorrida); return(RelatorioFinal.ToString()); }