public IActionResult ObterQuantidade()
        {
            try
            {
                var celulaEacessoService = new CelulaEacessoService(_connectionStrings.Value.EacessoConnection);
                var resultBD             = celulaEacessoService.ObterCelulas();

                return(Ok(resultBD.Count));
            }
            catch (Exception ex)
            {
                return(BadRequest(ex));
            }
        }
        public IActionResult ObterDiretorias()
        {
            try
            {
                var celulaEacessoService = new CelulaEacessoService(_connectionStrings.Value.EacessoConnection);
                var resultBD             = celulaEacessoService.ObterDiretorias();
                var resultVM             = Mapper.Map <IEnumerable <CelulaVM> >(resultBD);

                return(Ok(new { dados = resultVM, notifications = "", success = true }));
            }
            catch (Exception ex)
            {
                return(BadRequest(ex));
            }
        }
        private static void VerificarTiposRepasse(List <EpmRepasse> repassesInternos, List <EpmRepasse> repassesComerciais, List <EpmRepasse> repassesEpm)
        {
            var eacessoConnectionCelula = new CelulaEacessoService("Data Source=10.161.69.101\\CORP_H;Initial Catalog=" + EACESSO_DB + ";User ID=stfcorp_fenix;Password=\"noRPH|dt*;\"");

            foreach (var repasse in repassesEpm)
            {
                if (!repasse.GROUPED && (repasse.IdServicoProf != null) && repasse.LancRepInterno && (repasse.IdTipoCelTec == 3 || repasse.IdTipoCelTec == 9))
                {
                    AdicionarRepasseInterno(repassesInternos, (EpmRepasse)repasse.Clone(), eacessoConnectionCelula);
                }
                if (repasse.Checked)
                {
                    AdicionarRepasseComercial(repassesComerciais, (EpmRepasse)repasse.Clone(), eacessoConnectionCelula);
                }
            }
        }
 public IActionResult ObterDiretoriasComVisualizacao()
 {
     try
     {
         var             usuario              = _variables.UserName;
         List <CelulaVM> celulasComPermissao  = BuscarCelulasVisualizadasPorUsuario(usuario);
         var             celulaEacessoService = new CelulaEacessoService(_connectionStrings.Value.EacessoConnection);
         var             resultBD             = celulaEacessoService.ObterDiretorias();
         var             celulasDiretoria     = Mapper.Map <IEnumerable <CelulaVM> >(resultBD);
         var             resultVM             = celulasComPermissao.Where(x => celulasDiretoria.Any(y => y.Id == x.Id));
         return(Ok(new { dados = resultVM, notifications = "", success = true }));
     }
     catch (Exception ex)
     {
         return(BadRequest(ex));
     }
 }
        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));
        }
        private static void AdicionarRepasseInterno(List <EpmRepasse> repassesInternos, EpmRepasse repasse, CelulaEacessoService eacessoConnectionCelula)
        {
            if (repasse.Comments == null)
            {
                repasse.Comments = "";
            }
            var novoComent = repasse.IdRepasseInterno != null?repasse.IdRepasseInterno.Value.ToString() + " - " : "";

            var comment = repasse.Comments;

            repasse.Comments = novoComent + "Gerado pelo Modulo de Automacao de Horas - EPM INTERNO - " + repasse.Comments;
            if (repasse.IdCelulaProf != repasse.IdCelulaTec)
            {
                repasse.FlStatus = "NA";
            }
            else
            {
                repasse.FlStatus = "AP";
            }

            repasse.IdMoeda = eacessoConnectionCelula.ObterMoedaCelula(repasse.IdCelulaProf);

            repasse.TransferWork = 1;
            repasse.TransferRate = repasse.ActualCost;
            repasse.TransferCost = repasse.ActualCost;
            repasse.IdServicoCom = repasse.IdServicoProf.Value.ToString();

            repassesInternos.Add(repasse);
        }
        private static void AdicionarRepasseComercial(List <EpmRepasse> repassesComerciais, EpmRepasse repasse, CelulaEacessoService eacessoConnectionCelula)
        {
            repasse.FlStatus = "NA";
            if (repasse.Comments == null)
            {
                repasse.Comments = "";
            }
            var novoComent = repasse.IdRepasse != null?repasse.IdRepasse.Value.ToString() + " - " : "";

            repasse.Comments = novoComent + "Gerado pelo Modulo de Automacao de Horas - EPM COMERCIAL - " + repasse.Comments;
            var idtecnico = repasse.IdServicoTec;

            if (int.TryParse(repasse.IdServicoCom, out int result))
            {
                repasse.IdServicoTec = int.Parse(repasse.IdServicoCom);
                repasse.IdServicoCom = idtecnico.ToString();
                repasse.IdMoeda      = eacessoConnectionCelula.ObterMoedaCelula(repasse.IdCelulaTec);
                repassesComerciais.Add(repasse);
            }
            else
            {
                repasse.IdServicoTec = idtecnico;
                AdicionarLogGenerico("EPM COMERCIAL ERROR - repasse com id:" + repasse.Id + "não possui servico tecnico", "");
            }
        }