public async Task <ISaida> ProcurarLancamentos(ProcurarLancamentoEntrada procurarEntrada) { // Verifica se os parâmetros para a procura foram informadas corretamente return(procurarEntrada.Invalido ? new Saida(false, procurarEntrada.Mensagens, null) : await _lancamentoRepositorio.Procurar(procurarEntrada)); }
public async Task <ProcurarSaida> Procurar(ProcurarLancamentoEntrada procurarEntrada) { var query = _efContext.Lancamentos .Include(x => x.Conta) .Include(x => x.Categoria) .ThenInclude(x => x.CategoriaPai) .Include(x => x.Pessoa) .Include(x => x.Anexos) .AsNoTracking() .AsQueryable(); if (procurarEntrada.IdConta.HasValue) { query = query.Where(x => x.IdConta == procurarEntrada.IdConta.Value); } if (procurarEntrada.IdCategoria.HasValue) { query = query.Where(x => x.IdCategoria == procurarEntrada.IdCategoria.Value); } if (procurarEntrada.IdPessoa.HasValue) { query = query.Where(x => x.IdCategoria == procurarEntrada.IdPessoa.Value); } if (procurarEntrada.DataInicio.HasValue && procurarEntrada.DataFim.HasValue) { query = query.Where(x => x.Data.Date >= procurarEntrada.DataInicio.Value.Date && x.Data.Date <= procurarEntrada.DataFim.Value.Date); } query = query.OrderByProperty(procurarEntrada.OrdenarPor, procurarEntrada.OrdenarSentido); if (procurarEntrada.Paginar()) { var pagedList = await query.ToPagedListAsync(procurarEntrada.PaginaIndex.Value, procurarEntrada.PaginaTamanho.Value); return(new ProcurarSaida( pagedList.ToList().Select(x => new LancamentoSaida(x)), procurarEntrada.OrdenarPor, procurarEntrada.OrdenarSentido, pagedList.TotalItemCount, pagedList.PageCount, procurarEntrada.PaginaIndex, procurarEntrada.PaginaTamanho)); } else { var totalRegistros = await query.CountAsync(); return(new ProcurarSaida( (await query.ToListAsync()).Select(x => new LancamentoSaida(x)), procurarEntrada.OrdenarPor, procurarEntrada.OrdenarSentido, totalRegistros)); } }
public async Task <IActionResult> Procurar([FromBody, SwaggerParameter("Parâmetros utilizados para realizar a procura.", Required = true)] ProcurarLancamentoViewModel model) { var entrada = new ProcurarLancamentoEntrada( base.ObterIdUsuarioClaim(), model.IdConta, model.IdCategoria, model.IdPessoa, model.DataInicio, model.DataFim, model.OrdenarPor, model.OrdenarSentido, model.PaginaIndex, model.PaginaTamanho ); return(new ApiResult(await _lancamentoServico.ProcurarLancamentos(entrada))); }
public async Task <ProcurarSaida> Procurar(ProcurarLancamentoEntrada procurarEntrada) { var query = _efContext.Lancamentos .Include(x => x.Conta) .Include(x => x.Categoria.CategoriaPai) .Include(x => x.Pessoa) .Include(x => x.Parcela) .Include(x => x.Anexos) .Include(x => x.Detalhes) .ThenInclude(x => x.Categoria.CategoriaPai) .AsNoTracking() .Where(x => x.IdUsuario == procurarEntrada.IdUsuario) .AsQueryable(); if (procurarEntrada.IdConta.HasValue) { query = query.Where(x => x.IdConta == procurarEntrada.IdConta.Value); } if (procurarEntrada.IdCategoria.HasValue) { query = query.Where(x => x.IdCategoria == procurarEntrada.IdCategoria.Value || x.Categoria.IdCategoriaPai == procurarEntrada.IdCategoria.Value); } if (procurarEntrada.IdPessoa.HasValue) { query = query.Where(x => x.IdPessoa == procurarEntrada.IdPessoa.Value); } if (procurarEntrada.DataInicio.HasValue && procurarEntrada.DataFim.HasValue) { query = query.Where(x => x.Data.Date >= procurarEntrada.DataInicio.Value.Date && x.Data.Date <= procurarEntrada.DataFim.Value.Date); } switch (procurarEntrada.OrdenarPor) { case LancamentoOrdenarPor.CategoriaCaminho: query = procurarEntrada.OrdenarSentido == "ASC" ? query.AsEnumerable().OrderBy(x => x.Categoria.ObterCaminho()).AsQueryable() : query.AsEnumerable().OrderByDescending(x => x.Categoria.ObterCaminho()).AsQueryable(); break; case LancamentoOrdenarPor.Data: query = procurarEntrada.OrdenarSentido == "ASC" ? query.OrderBy(x => x.Data) : query.OrderByDescending(x => x.Data); break; case LancamentoOrdenarPor.NomePessoa: query = procurarEntrada.OrdenarSentido == "ASC" ? query.OrderBy(x => (x.Pessoa != null) ? x.Pessoa.Nome : string.Empty) : query.OrderByDescending(x => (x.Pessoa != null) ? x.Pessoa.Nome : string.Empty); break; case LancamentoOrdenarPor.NomeConta: query = procurarEntrada.OrdenarSentido == "ASC" ? query.OrderBy(x => (x.Conta != null) ? x.Conta.Nome : string.Empty) : query.OrderByDescending(x => (x.Conta != null) ? x.Conta.Nome : string.Empty); break; case LancamentoOrdenarPor.Valor: query = procurarEntrada.OrdenarSentido == "ASC" ? query.OrderBy(x => x.Valor) : query.OrderByDescending(x => x.Valor); break; default: query = procurarEntrada.OrdenarSentido == "ASC" ? query.OrderBy(x => x.Id) : query.OrderByDescending(x => x.Id); break; } if (procurarEntrada.Paginar()) { var pagedList = await query.ToPagedListAsync(procurarEntrada.PaginaIndex.Value, procurarEntrada.PaginaTamanho.Value); return(new ProcurarSaida( pagedList.ToList().Select(x => new LancamentoSaida(x)), procurarEntrada.OrdenarPor.ToString(), procurarEntrada.OrdenarSentido, pagedList.TotalItemCount, pagedList.PageCount, procurarEntrada.PaginaIndex, procurarEntrada.PaginaTamanho)); } else { var totalRegistros = query.Count(); return(new ProcurarSaida( query.ToList().Select(x => new LancamentoSaida(x)), procurarEntrada.OrdenarPor.ToString(), procurarEntrada.OrdenarSentido, totalRegistros)); } }