public IActionResult FiltrarRepassesNivelDois([FromBody] FiltroRepasseNivelDoisDto <AprovarRepasseNivelDoisDto> filtroDto)
 {
     try
     {
         var resultBD = _repasseNivelUmService.FiltrarRepassesNivelDois(filtroDto);
         return(Ok(resultBD));
     }
     catch (Exception ex)
     {
         return(BadRequest());
     }
 }
        public FiltroRepasseNivelDoisDto <AprovarRepasseNivelDoisDto> Filtrar(FiltroRepasseNivelDoisDto <AprovarRepasseNivelDoisDto> filtro)
        {
            var query = DbSet.AsQueryable().AsNoTracking();

            var periodoVigente = _context.PeriodoRepasses.LastOrDefault();

            //query = query.Where(x => x.PeriodoRepasse.Id == filtro.IdPeriodoRepasse);
            query = query.Where(x => x.DataRepasse <= periodoVigente.DtLancamentoFim && x.Status == SharedEnuns.StatusRepasseEacesso.APROVADO_NIVEL_UM.GetDescription());

            if (filtro.IdsCelulasOrigem.Length > 0 && filtro.IdsCelulasDestino.Length > 0)
            {
                query = query.Where(x => filtro.IdsCelulasOrigem.Contains(x.IdCelulaOrigem) ||
                                    filtro.IdsCelulasDestino.Contains(x.IdCelulaDestino));
            }
            else if (filtro.IdsCelulasOrigem.Length > 0 && filtro.IdsCelulasDestino.Length == 0)
            {
                query = query.Where(x => filtro.IdsCelulasOrigem.Contains(x.IdCelulaOrigem));
            }
            else if (filtro.IdsCelulasOrigem.Length == 0 && filtro.IdsCelulasDestino.Length > 0)
            {
                query = query.Where(x => filtro.IdsCelulasDestino.Contains(x.IdCelulaDestino));
            }

            if (!string.IsNullOrEmpty(filtro.FiltroGenerico))
            {
                query = query.Where(x => x.NomeClienteOrigem.ToUpper().Contains(filtro.FiltroGenerico.ToUpper()) ||
                                    x.NomeClienteDestino.ToString().Contains(filtro.FiltroGenerico.ToUpper()) ||
                                    x.NomeServicoOrigem.ToString().Contains(filtro.FiltroGenerico.ToUpper()) ||
                                    x.NomeServicoDestino.ToUpper().Contains(filtro.FiltroGenerico.ToUpper()));
            }

            var dados = query.Select(p => new AprovarRepasseNivelDoisDto
            {
                Id                     = p.Id,
                Aprovado               = ObterStatusAprovacaoNivelDois(p.Status),
                Status                 = p.Status,
                StatusDesc             = ObterNomeStatus(p.Status),
                IdCelulaDestino        = p.IdCelulaDestino,
                IdCelulaOrigem         = p.IdCelulaOrigem,
                ClienteOrigem          = p.NomeClienteOrigem,
                ClienteDestino         = p.NomeClienteDestino,
                DataAlteracao          = p.DataAlteracao,
                QuantidadeHoras        = p.QuantidadeItens,
                ServicoOrigem          = p.NomeServicoOrigem,
                ServicoDestino         = p.NomeServicoDestino,
                Usuario                = p.Usuario,
                DataRepasse            = p.DataRepasse,
                ValorTotal             = p.ValorTotal,
                ValorUnitario          = p.ValorUnitario,
                EstaNoPeriodoVigente   = DataRepasseEstaDentroDoUltimoPeriodoCadastrado(p.DataRepasse, periodoVigente),
                ValorCustoProfissional = p.ValorCustoProfissional,
                Descricao              = p.DescricaoProjeto
            });

            filtro.Total = dados.Count();

            filtro.CampoOrdenacao = filtro.CampoOrdenacao.First().ToString().ToUpper() + filtro.CampoOrdenacao.Substring(1);
            if (filtro.OrdemOrdenacao == "asc")
            {
                dados = dados.OrderBy(x => x.GetType().GetProperty(filtro.CampoOrdenacao).GetValue(x));
            }
            else if (filtro.OrdemOrdenacao == "desc")
            {
                dados = dados.OrderByDescending(x => x.GetType().GetProperty(filtro.CampoOrdenacao).GetValue(x));
            }
            else
            {
                dados = dados.OrderBy(x => x.Status).ThenBy(x => x.IdCelulaOrigem).ThenBy(y => y.ClienteDestino);
            }

            filtro.Valores = dados.Skip((filtro.Pagina) * filtro.QuantidadePorPagina).Take(filtro.QuantidadePorPagina).ToList();
            return(filtro);
        }
 public FiltroRepasseNivelDoisDto <AprovarRepasseNivelDoisDto> FiltrarRepassesNivelDois(FiltroRepasseNivelDoisDto <AprovarRepasseNivelDoisDto> filtro) => _repasseNivelUmRepository.Filtrar(filtro);