Exemple #1
0
        public async Task <ProcurarSaida> Procurar(ProcurarAgendamentoEntrada procurarEntrada)
        {
            var query = _efContext.Agendamentos
                        .Include(x => x.Conta)
                        .Include(x => x.CartaoCredito)
                        .Include(x => x.Categoria)
                        .ThenInclude(x => x.CategoriaPai)
                        .ThenInclude(x => x.CategoriasFilha)
                        .Include(x => x.Pessoa)
                        .Include(x => x.Parcelas)
                        .AsNoTracking()
                        .AsQueryable();

            if (procurarEntrada.IdCategoria.HasValue)
            {
                query = query.Where(x => x.IdCategoria == procurarEntrada.IdCategoria);
            }

            if (procurarEntrada.IdConta.HasValue)
            {
                query = query.Where(x => x.IdConta == procurarEntrada.IdConta);
            }

            if (procurarEntrada.IdCartaoCredito.HasValue)
            {
                query = query.Where(x => x.IdCartaoCredito == procurarEntrada.IdCartaoCredito);
            }

            if (procurarEntrada.IdPessoa.HasValue)
            {
                query = query.Where(x => x.IdPessoa == procurarEntrada.IdPessoa);
            }

            if (procurarEntrada.DataInicioParcela.HasValue && procurarEntrada.DataFimParcela.HasValue)
            {
                query = query.Where(x => x.Parcelas.Any(y => y.Data.Date >= procurarEntrada.DataInicioParcela.Value.Date && y.Data.Date <= procurarEntrada.DataFimParcela.Value.Date));
            }

            if (procurarEntrada.Concluido.HasValue)
            {
                query = procurarEntrada.Concluido.Value
                    ? query.Where(x => x.Parcelas.Count(y => y.Status == StatusParcela.Aberta) == x.Parcelas.Count(y => y.Status == StatusParcela.Fechada))
                    : query.Where(x => x.Parcelas.Count(y => y.Status == StatusParcela.Aberta) != x.Parcelas.Count(y => y.Status == StatusParcela.Fechada));
            }

            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 AgendamentoSaida(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 AgendamentoSaida(x)),
                           procurarEntrada.OrdenarPor,
                           procurarEntrada.OrdenarSentido,
                           totalRegistros));
            }
        }
        public async Task <ProcurarSaida> Procurar(ProcurarAgendamentoEntrada procurarEntrada)
        {
            var query = _efContext.Agendamentos
                        .Include(x => x.Conta)
                        .Include(x => x.CartaoCredito)
                        .Include(x => x.Categoria.CategoriaPai)
                        .Include(x => x.Pessoa)
                        .Include(x => x.Parcelas)
                        .AsNoTracking()
                        .Where(x => x.IdUsuario == procurarEntrada.IdUsuario)
                        .AsQueryable();

            if (procurarEntrada.IdCategoria.HasValue)
            {
                query = query.Where(x => x.IdCategoria == procurarEntrada.IdCategoria);
            }

            if (procurarEntrada.IdConta.HasValue)
            {
                query = query.Where(x => x.IdConta == procurarEntrada.IdConta);
            }

            if (procurarEntrada.IdCartaoCredito.HasValue)
            {
                query = query.Where(x => x.IdCartaoCredito == procurarEntrada.IdCartaoCredito);
            }

            if (procurarEntrada.IdPessoa.HasValue)
            {
                query = query.Where(x => x.IdPessoa == procurarEntrada.IdPessoa);
            }

            if (procurarEntrada.DataInicioParcela.HasValue && procurarEntrada.DataFimParcela.HasValue)
            {
                query = query.Where(x => x.Parcelas.Any(y => y.Data.Date >= procurarEntrada.DataInicioParcela.Value.Date && y.Data.Date <= procurarEntrada.DataFimParcela.Value.Date));
            }

            if (procurarEntrada.Concluido.HasValue)
            {
                query = procurarEntrada.Concluido.Value
                    ? query.AsEnumerable().Where(x => !x.Parcelas.Any(y => y.ObterStatus() == StatusParcela.Aberta)).AsQueryable()
                    : query.AsEnumerable().Where(x => x.Parcelas.Any(y => y.ObterStatus() == StatusParcela.Aberta)).AsQueryable();
            }

            switch (procurarEntrada.OrdenarPor)
            {
            case AgendamentoOrdenarPor.DataProximaParcela:
                query = procurarEntrada.OrdenarSentido == "ASC" ? query.OrderBy(x => x.ObterDataProximaParcelaAberta()).ThenBy(x => x.Id) : query.OrderByDescending(x => x.ObterDataProximaParcelaAberta()).ThenBy(x => x.Id);
                break;

            case AgendamentoOrdenarPor.DataUltimaParcela:
                query = procurarEntrada.OrdenarSentido == "ASC" ? query.OrderBy(x => x.ObterDataUltimaParcelaAberta()).ThenBy(x => x.Id) : query.OrderByDescending(x => x.ObterDataUltimaParcelaAberta()).ThenBy(x => x.Id);
                break;

            case AgendamentoOrdenarPor.CategoriaCaminho:
                query = procurarEntrada.OrdenarSentido == "ASC" ? query.OrderBy(x => x.Categoria.ObterCaminho()).ThenBy(x => x.Id) : query.OrderByDescending(x => x.Categoria.ObterCaminho()).ThenBy(x => x.Id);
                break;

            case AgendamentoOrdenarPor.NomePessoa:
                query = procurarEntrada.OrdenarSentido == "ASC" ? query.OrderBy(x => (x.Pessoa != null) ? x.Pessoa.Nome : string.Empty).ThenBy(x => x.Id) : query.OrderByDescending(x => (x.Pessoa != null) ? x.Pessoa.Nome : string.Empty).ThenBy(x => x.Id);
                break;

            case AgendamentoOrdenarPor.NomeConta:
                query = procurarEntrada.OrdenarSentido == "ASC" ? query.OrderBy(x => (x.Conta != null) ? x.Conta.Nome : string.Empty).ThenBy(x => x.Id) : query.OrderByDescending(x => (x.Conta != null) ? x.Conta.Nome : string.Empty).ThenBy(x => x.Id);
                break;

            case AgendamentoOrdenarPor.NomeCartaoCredito:
                query = procurarEntrada.OrdenarSentido == "ASC" ? query.OrderBy(x => (x.CartaoCredito != null) ? x.CartaoCredito.Nome : string.Empty).ThenBy(x => x.Id) : query.OrderByDescending(x => (x.CartaoCredito != null) ? x.CartaoCredito.Nome : string.Empty).ThenBy(x => x.Id);
                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 AgendamentoSaida(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 AgendamentoSaida(x)),
                           procurarEntrada.OrdenarPor.ToString(),
                           procurarEntrada.OrdenarSentido,
                           totalRegistros));
            }
        }