private void SumarizarGrupo(ConfiguracaoRelatorio configuracao, GrupoDados grupo) { ColecaoDados sumario = new ColecaoDados(); foreach (var sumarioConfig in configuracao.Sumarios) { ConfiguracaoCampo campo = configuracao.CamposSelecionados.Single(x => x.CampoId == sumarioConfig.CampoId); sumario.Colunas.Add(campo.Posicao, campo.Alias); var listaSumarios = sumarioConfig.ListarSumarios(); foreach (var sumarioLinha in grupo.Sumarizacoes.Linhas) { if (listaSumarios.Keys.Any(y => y == (eTipoSumario)sumarioLinha)) { switch ((eTipoSumario)sumarioLinha) { case eTipoSumario.Contar: sumario[sumarioLinha, campo.Posicao] = grupo.Dados.ItensDistintos(campo.Posicao); break; case eTipoSumario.Somar: sumario[sumarioLinha, campo.Posicao] = grupo.Dados.Somar(campo.Posicao); break; case eTipoSumario.Media: sumario[sumarioLinha, campo.Posicao] = grupo.Dados.Media(campo.Posicao); break; case eTipoSumario.Maximo: sumario[sumarioLinha, campo.Posicao] = grupo.Dados.Maximo(campo.Posicao); break; case eTipoSumario.Minimo: sumario[sumarioLinha, campo.Posicao] = grupo.Dados.Minimo(campo.Posicao); break; } } else { sumario[sumarioLinha, campo.Posicao] = null; } } grupo.Sumarizacoes = sumario; } }
private DadosRelatorio CarregarDados(ConfiguracaoRelatorio configuracao, List <List <ValoresBanco> > dados) { Dictionary <int, string> colunas = new Dictionary <int, string>(); configuracao.CamposSelecionados.OrderBy(x => x.Posicao).ToList().ForEach(x => { colunas.Add(x.Posicao, x.Alias); }); DadosRelatorio retorno = new DadosRelatorio(colunas); retorno.Nome = configuracao.Nome; retorno.Totalizar = configuracao.ContarRegistros; retorno.ComAgrupamento = configuracao.Agrupamentos.Count > 0; string grupo = null; GrupoDados grupoDados = null; int linha = 0; foreach (var item in dados) { int c = 0; foreach (var coluna in item) { if (!retorno.ComAgrupamento) { retorno.Dados[linha, c] = coluna.Valor.ToString(); } else { if (c == 0) { string grupoAtual = coluna.Valor.ToString(); if (grupo != grupoAtual) { grupo = grupoAtual; grupoDados = retorno.CriarGrupo(); grupoDados.Campo = configuracao.Agrupamentos.Single(x => x.Alias == coluna.Chave).Campo.Alias; grupoDados.Valor = grupo; linha = 0; } } else { grupoDados.Dados[linha, (c - configuracao.Agrupamentos.Count)] = coluna.Valor.ToString(); } } c++; } linha++; } foreach (var campo in configuracao.CamposSelecionados.OrderBy(x => x.Posicao)) { try { retorno.Campos.Add(new ValoresBanco() { Chave = campo.Alias, Valor = campo.Tamanho.ToString(), DimensaoColuna = campo.Campo.DimensaoNome + "@" + campo.Campo.Nome }); } catch (Exception e) { throw new Exception(campo.CampoId + " - " + campo.Alias + " - " + campo.Posicao + " - " + campo.Tamanho, e); } } return(retorno); }