private List <ValoresRelatorioRentabilidadeDto> FiltrarTipoRelatorio(FiltroRelatorioRentabilidadeDiretoriaDto filtro, int idCelulaSelecionada, List <ProcedureHierarquiaModel> celulaValidadas, List <ValoresRelatorioRentabilidadeDto> valoresRelatorio) { var result = PrepararResultadoRelatorio(valoresRelatorio, celulaValidadas, idCelulaSelecionada); if (filtro.TipoRelatorio == "CO") { result = result.Where(x => x.Tipo != "" && x.Tipo != "CLIENTE: ").ToList(); } return(result); }
private List <ItemLancamentoFinanceiro> ObterItensLancamentoRepassesPagos(FiltroRelatorioRentabilidadeDiretoriaDto filtro, out List <RepasseRelatorioRentabilidadeModel> repassesPagos) { List <ItemLancamentoFinanceiro> itensLancamentos = new List <ItemLancamentoFinanceiro>(); repassesPagos = ObterRepassesPagosPorCelulas(filtro.IdsCelula); var repassesLista = SplitListRepasse(repassesPagos); foreach (var repasseAgrupado in repassesLista) { itensLancamentos.AddRange(_itemLancamentoFinanceiroRepository.ObterItensLancamentoPorIdRepassePagoPorPeriodo(repasseAgrupado.Select(x => x.Id).ToList(), filtro.DtInicio, filtro.DtFim)); } return(itensLancamentos); }
private List <ItemLancamentoFinanceiro> ObterItensLancamentoPorServico(FiltroRelatorioRentabilidadeDiretoriaDto filtro, out List <ServicoContratadoRelatorioRentabilidadeModel> servicos) { List <ItemLancamentoFinanceiro> itensLancamentos = new List <ItemLancamentoFinanceiro>(); servicos = ObterServicosPorCelulas(filtro.IdsCelula); var servicosLista = SplitListServico(servicos); foreach (var servicosAgrupado in servicosLista) { itensLancamentos = _itemLancamentoFinanceiroRepository.ObterItensLancamentoPorIdServicoContratadoPorPeriodo(servicosAgrupado.Select(x => x.Id).ToList(), filtro.DtInicio, filtro.DtFim); } return(itensLancamentos); }
public List <ValoresRelatorioRentabilidadeDto> ObterInformacoesPorDiretoria(FiltroRelatorioRentabilidadeDiretoriaDto filtro) { var idCelulaSelecionada = filtro.IdsCelula.LastOrDefault(); var proceduresService = new ProceduresService(_connectionStrings.Value.EacessoConnection); var celulaValidadas = proceduresService.ObterHierarquiaCelulas(filtro.IdsCelula.LastOrDefault()); var idsCelulaValidadas = celulaValidadas.Select(x => x.IdCelula).Concat(celulaValidadas.Select(x => x.IdCelulaSup)).Distinct().ToList(); filtro.IdsCelula = idsCelulaValidadas; #region variaveis var servicos = new List <ServicoContratadoRelatorioRentabilidadeModel>(); var repassesPagos = new List <RepasseRelatorioRentabilidadeModel>(); var repassesRecebidos = new List <RepasseRelatorioRentabilidadeModel>(); List <ValoresRelatorioRentabilidadeDto> valoresRelatorio = new List <ValoresRelatorioRentabilidadeDto>(); List <ValoresRelatorioRentabilidadeDto> valoresRelatorioCliente = new List <ValoresRelatorioRentabilidadeDto>(); List <ValoresRelatorioRentabilidadeDto> valoresRelatorioCelula = new List <ValoresRelatorioRentabilidadeDto>(); var itensLancamentosServico = new List <ItemLancamentoFinanceiro>(); var itensLancamentosRepassesPagos = new List <ItemLancamentoFinanceiro>(); var itensLancamentosRepassesRecebidos = new List <ItemLancamentoFinanceiro>(); var celulas = new List <CelulaEacesso>(); var celulasService = new CelulaEacessoService(_connectionStrings.Value.EacessoConnection); celulas = celulasService.ObterCelulasPorIds(filtro.IdsCelula); #endregion itensLancamentosServico = ObterItensLancamentoPorServico(filtro, out servicos); itensLancamentosRepassesPagos = ObterItensLancamentoRepassesPagos(filtro, out repassesPagos); itensLancamentosRepassesRecebidos = ObterItensLancamentoRepassesRecebidos(filtro, out repassesRecebidos); var itensAgrupados = itensLancamentosServico.GroupBy(x => x.IdServicoContratado); var itensAgrupadosRepassesPagos = itensLancamentosRepassesPagos.GroupBy(x => x.IdRepasse); var itensAgrupadosRepassesRecebidos = itensLancamentosRepassesRecebidos.GroupBy(x => x.IdRepasse); var repassesPagosAgrupados = repassesPagos.GroupBy(x => x.IdServicoContratado); var repassesRecebidosAgrupados = repassesRecebidos.GroupBy(x => x.IdServicoContratado); var idsServicos = itensAgrupados.Select(x => new ManipularValoresRelatorio { Id = x.Key.Value, Tipo = "S" }).Distinct().ToList(); var idsRepassesPagos = itensAgrupadosRepassesPagos.Select(x => new ManipularValoresRelatorio { Id = x.Key.Value, Tipo = "R" }).Distinct(); var idsRepassesRecebidos = itensAgrupadosRepassesRecebidos.Select(x => new ManipularValoresRelatorio { Id = x.Key.Value, Tipo = "R" }).Distinct(); foreach (var item in repassesPagosAgrupados) { if (!idsServicos.Any(x => x.Id == item.Key)) { idsServicos.Add(new ManipularValoresRelatorio { Id = item.Key, Tipo = "S" }); } } foreach (var item in repassesRecebidosAgrupados) { if (!idsServicos.Any(x => x.Id == item.Key)) { idsServicos.Add(new ManipularValoresRelatorio { Id = item.Key, Tipo = "S" }); } } foreach (var idItem in idsServicos) { var servicoAtual = new ServicoContratadoRelatorioRentabilidadeModel(); if (idItem.Tipo == "S") { servicoAtual = servicos.FirstOrDefault(x => x.Id == idItem.Id); } else { var idServico = repassesPagosAgrupados.FirstOrDefault(x => x.Any(y => y.Id == idItem.Id)); if (idServico != null) { servicoAtual = servicos.FirstOrDefault(x => x.Id == idServico.Key); } else { idServico = repassesRecebidosAgrupados.FirstOrDefault(x => x.Any(y => y.Id == idItem.Id)); if (idServico != null) { servicoAtual = servicos.FirstOrDefault(x => x.Id == idServico.Key); } } } IGrouping <int?, ItemLancamentoFinanceiro> itemServico = null; itemServico = itensAgrupados.FirstOrDefault(x => x.Key == servicoAtual.Id); if (itemServico == null) { var idsPagos = repassesPagos.Where(x => x.IdServicoContratado == servicoAtual.Id).Select(x => x.Id).ToList(); var itens = itensLancamentosRepassesPagos.Where(x => idsPagos.Contains(x.IdRepasse.Value)); foreach (var item in itens) { item.IdServicoContratado = repassesPagos.FirstOrDefault(x => x.Id == item.IdRepasse).IdServicoContratado; } itemServico = itensLancamentosRepassesPagos.Where(x => idsPagos.Contains(x.IdRepasse.Value)).GroupBy(x => x.IdServicoContratado).FirstOrDefault(); } if (itemServico == null) { var idsPagos = repassesRecebidos.Where(x => x.IdServicoContratado == servicoAtual.Id).Select(x => x.Id).ToList(); var itens = itensLancamentosRepassesRecebidos.Where(x => idsPagos.Contains(x.IdRepasse.Value)); foreach (var item in itens) { item.IdServicoContratado = repassesRecebidos.FirstOrDefault(x => x.Id == item.IdRepasse).IdServicoContratado; } itemServico = itensLancamentosRepassesRecebidos.Where(x => idsPagos.Contains(x.IdRepasse.Value)).GroupBy(x => x.IdServicoContratado).FirstOrDefault(); } if (itemServico == null) { continue; } var valorRelatorio = new ValoresRelatorioRentabilidadeDto(); valorRelatorio.Descricao = "SERVIÇO:" + servicos.FirstOrDefault(x => x.Id == servicoAtual.Id).DescEscopo; valorRelatorio.Tipo = ""; valorRelatorio.Nivel = 4; valorRelatorio.IdServico = servicoAtual.Id; valorRelatorio.IdCelula = servicoAtual.IdCelula; valorRelatorio.IdCliente = servicos.FirstOrDefault(x => x.Id == servicoAtual.Id).IdCliente; CalcularValorFaturamentoServico(valorRelatorio, itemServico, celulas); CalcularValorAjusteFaturamento(valorRelatorio, itemServico, servicos.FirstOrDefault(x => x.Id == servicoAtual.Id), itensLancamentosRepassesPagos.ToList(), repassesPagos, celulas); CalcularValorFaturamentoAjusteServico(valorRelatorio, celulas); CalcularValorMarkup(valorRelatorio, itemServico, servicos.FirstOrDefault(x => x.Id == servicoAtual.Id), itensLancamentosRepassesPagos.ToList(), repassesPagos, celulas); CalcularValorDespesasGerais(valorRelatorio, itemServico, servicos.FirstOrDefault(x => x.Id == servicoAtual.Id), itensLancamentosRepassesPagos.ToList(), repassesPagos, celulas); CalcularValorDespesasSalario(valorRelatorio, itemServico, servicos.FirstOrDefault(x => x.Id == servicoAtual.Id), itensLancamentosRepassesPagos.ToList(), repassesPagos, celulas); CalcularValorDespesasCelula(valorRelatorio, itemServico, servicos.FirstOrDefault(x => x.Id == servicoAtual.Id), itensLancamentosRepassesPagos.ToList(), repassesPagos, celulas); CalcularValorTotalDespesa(valorRelatorio, itemServico); CalcularValorImpostoRepasse(valorRelatorio, itensLancamentosRepassesPagos.ToList(), repassesPagos, servicoAtual, celulas); CalcularValorRepassePago(valorRelatorio, itensLancamentosRepassesPagos.ToList(), repassesPagos, servicoAtual, celulas); CalcularValorRepasseRecebido(valorRelatorio, itensLancamentosRepassesRecebidos.ToList(), repassesRecebidos, servicoAtual, celulas); CalcularValorLucroServico(valorRelatorio); CalcularValorPorcentagemLucroServico(valorRelatorio); valoresRelatorio.Add(valorRelatorio); } return(FiltrarTipoRelatorio(filtro, idCelulaSelecionada, celulaValidadas, valoresRelatorio)); }