/// <summary> /// Obtem uma lista de endereços de cliente pelos IDs /// </summary> /// <param name="requisicaoDto"></param> /// <param name="retornoDto"></param> /// <returns></returns> internal bool ObterListaPorId(RequisicaoListaGuidsDto requisicaoDto, ref RetornoObterListaDto <ClienteEnderecoDto> retornoDto) { // Obter a query primária string mensagemErro = ""; IQueryable <ClienteEnderecoVo> query; if (!this.ObterQueryBd(out query, ref mensagemErro)) { retornoDto.Mensagem = $"Houve um problema ao listar os endereços de clientes: {mensagemErro}"; retornoDto.Retorno = false; logBll.ResgistrarLog(requisicaoDto, LogRecursos.ObterListaEnderecosClientePorId, Guid.Empty, retornoDto.Mensagem); return(false); } List <ClienteEnderecoVo> listaVo = query.Where(p => requisicaoDto.ListaGuids.Contains(p.Id)).ToList(); List <CepVo> listaCepsVo = new List <CepVo>(); // Obter CEPs CepBll cepBll = new CepBll(false); if (!cepBll.ObterListaEnderecosPorId(listaVo.Select(p => p.IdCep).ToList(), ref listaCepsVo, ref mensagemErro)) { retornoDto.Mensagem = mensagemErro; retornoDto.Retorno = false; logBll.ResgistrarLog(requisicaoDto, LogRecursos.ObterListaEnderecosClientePorId, Guid.Empty, retornoDto.Mensagem); return(false); } // Converter foreach (var clienteEndereco in listaVo) { CepVo cepDto = listaCepsVo.Where(p => p.Id == clienteEndereco.IdCep).FirstOrDefault(); ClienteEnderecoDto clienteEnderecoDto = new ClienteEnderecoDto(); if (!ConverterVoParaDto(clienteEndereco, ref clienteEnderecoDto, ref mensagemErro)) { retornoDto.Mensagem = "Erro ao converter para DTO: " + mensagemErro; retornoDto.Retorno = false; logBll.ResgistrarLog(requisicaoDto, LogRecursos.ObterListaEnderecosClientePorId, clienteEndereco.Id, retornoDto.Mensagem); return(false); } //Preencher dados do endereço clienteEnderecoDto.Endereco = new CepDto() { Bairro = cepDto == null ? "" : cepDto.Bairro, Cep = cepDto == null ? "" : cepDto.Cep, Cidade = cepDto == null ? "" : cepDto.Cidade, Logradouro = cepDto == null ? "" : cepDto.Logradouro, Id = cepDto == null ? Guid.Empty : cepDto.Id }; retornoDto.ListaEntidades.Add(clienteEnderecoDto); } return(true); }
/// <summary> /// Obtém uma lista de entregas com filtros aplicados, podendo ser paginada /// </summary> /// <param name="requisicaoDto"></param> /// <param name="retornoDto"></param> /// <returns></returns> public override bool ObterListaFiltrada(RequisicaoObterListaDto requisicaoDto, ref RetornoObterListaDto <PedidoEntregaDto> retornoDto) { if (!base.ObterListaFiltrada(requisicaoDto, ref retornoDto)) { return(false); } string mensagemErro = ""; IQueryable <PedidoEntregaVo> query; // Obter a query primária if (!this.ObterQueryBd(out query, ref mensagemErro)) { retornoDto.Mensagem = $"Houve um problema ao listar as entregas: {mensagemErro}"; retornoDto.Retorno = false; logBll.ResgistrarLog(requisicaoDto, LogRecursos.ObterListaPedidoEntrega, Guid.Empty, retornoDto.Mensagem); return(false); } // Aplicar os filtros foreach (var filtro in requisicaoDto.ListaFiltros) { switch (filtro.Key) { case "IDENDERECO": Guid idEndereco; if (!Guid.TryParse(filtro.Value, out idEndereco)) { retornoDto.Mensagem = $"Problema ao converter o filtro de endereço."; retornoDto.Retorno = false; logBll.ResgistrarLog(requisicaoDto, LogRecursos.ObterListaPedidoEntrega, Guid.Empty, retornoDto.Mensagem); return(false); } query = query.Where(p => p.IdEndereco == idEndereco); break; case "DATAINCLUSAOINICIO": DateTime data; if (!DateTime.TryParse(filtro.Value, out data)) { retornoDto.Mensagem = $"Fala ao converter o filtro de 'data de inclusão'."; retornoDto.Retorno = false; logBll.ResgistrarLog(requisicaoDto, LogRecursos.ObterListaPedidoEntrega, Guid.Empty, retornoDto.Mensagem); return(false); } query = query.Where(p => DbFunctions.TruncateTime(p.DataInclusao) >= data); break; case "DATAINCLUSAOFIM": DateTime dataFim; if (!DateTime.TryParse(filtro.Value, out dataFim)) { retornoDto.Mensagem = $"Fala ao converter o filtro de 'data de inclusão'."; retornoDto.Retorno = false; logBll.ResgistrarLog(requisicaoDto, LogRecursos.ObterListaPedidoEntrega, Guid.Empty, retornoDto.Mensagem); return(false); } query = query.Where(p => DbFunctions.TruncateTime(p.DataInclusao) <= dataFim); break; case "IDPEDIDO": Guid idPedido; if (!Guid.TryParse(filtro.Value, out idPedido)) { retornoDto.Mensagem = $"Problema ao converter o filtro de pedido."; retornoDto.Retorno = false; logBll.ResgistrarLog(requisicaoDto, LogRecursos.ObterListaPedidoEntrega, Guid.Empty, retornoDto.Mensagem); return(false); } query = query.Where(p => p.IdPedido == idPedido); break; case "IDFUNCIONARIO": Guid idFuncinario; if (!Guid.TryParse(filtro.Value, out idFuncinario)) { retornoDto.Mensagem = $"Problema ao converter o filtro de pedido."; retornoDto.Retorno = false; logBll.ResgistrarLog(requisicaoDto, LogRecursos.ObterListaPedidoEntrega, Guid.Empty, retornoDto.Mensagem); return(false); } query = query.Where(p => p.IdFuncionario == idFuncinario); break; case "VALORRETORNO": float valor; if (!float.TryParse(filtro.Value, out valor)) { retornoDto.Mensagem = $"Problema ao converter o filtro de preço."; retornoDto.Retorno = false; logBll.ResgistrarLog(requisicaoDto, LogRecursos.ObterListaPedidoEntrega, Guid.Empty, retornoDto.Mensagem); return(false); } query = query.Where(p => p.ValorRetorno == valor); break; case "CONFERIDO": bool conferido; if (!bool.TryParse(filtro.Value, out conferido)) { retornoDto.Mensagem = $"Fala ao converter o filtro de 'inativo'."; retornoDto.Retorno = false; logBll.ResgistrarLog(requisicaoDto, LogRecursos.ObterListaPedidoEntrega, Guid.Empty, retornoDto.Mensagem); return(false); } query = query.Where(p => p.Conferido == conferido); break; case "INATIVO": bool filtroInativo; if (!bool.TryParse(filtro.Value, out filtroInativo)) { retornoDto.Mensagem = $"Fala ao converter o filtro de 'inativo'."; retornoDto.Retorno = false; logBll.ResgistrarLog(requisicaoDto, LogRecursos.ObterListaPedidoEntrega, Guid.Empty, retornoDto.Mensagem); return(false); } query = query.Where(p => p.Inativo == filtroInativo); break; default: retornoDto.Mensagem = $"O filtro {filtro.Key} não está definido para esta pesquisa."; retornoDto.Retorno = false; logBll.ResgistrarLog(requisicaoDto, LogRecursos.ObterListaPedidoEntrega, Guid.Empty, retornoDto.Mensagem); return(false); } } requisicaoDto.CampoOrdem = string.IsNullOrWhiteSpace(requisicaoDto.CampoOrdem) ? "" : requisicaoDto.CampoOrdem.ToUpper().Trim(); switch (requisicaoDto.CampoOrdem) { case "DATAINCLUSAO": query = query.OrderBy(p => p.DataInclusao).ThenBy(p => p.IdFuncionario); break; case "IDFUNCIONARIO": query = query.OrderBy(p => p.IdFuncionario).ThenBy(p => p.DataInclusao); break; case "DATAINCLUSAODESCRESCENTE": query = query.OrderByDescending(p => p.DataInclusao).ThenBy(p => p.IdFuncionario); break; default: query = query.OrderByDescending(p => p.DataInclusao).ThenBy(p => p.IdFuncionario); break; } double totalItens = query.Count(); if (totalItens == 0) { retornoDto.Mensagem = "Nenhum resultado encontrado."; retornoDto.Retorno = true; return(true); } if (!requisicaoDto.NaoPaginarPesquisa) { double paginas = totalItens <= requisicaoDto.NumeroItensPorPagina ? 1 : totalItens / requisicaoDto.NumeroItensPorPagina; retornoDto.NumeroPaginas = (int)Math.Ceiling(paginas); int pular = (requisicaoDto.Pagina - 1) * requisicaoDto.NumeroItensPorPagina; query = query.Skip(pular).Take(requisicaoDto.NumeroItensPorPagina); } // Obter entregas e os IDs dos endereços List <PedidoEntregaVo> listaVo = query.ToList(); List <Guid> listaIds = listaVo.Select(p => p.IdEndereco).ToList(); // Obter os endereços pelo ID RetornoObterListaDto <ClienteEnderecoDto> retornoEnderecoDto = new RetornoObterListaDto <ClienteEnderecoDto>(); RequisicaoListaGuidsDto requisicaoEnderecoDto = new RequisicaoListaGuidsDto() { Identificacao = requisicaoDto.Identificacao, IdUsuario = requisicaoDto.IdUsuario, ListaGuids = listaIds }; ClienteEnderecoBll clienteEnderecoBll = new ClienteEnderecoBll(false); if (!clienteEnderecoBll.ObterListaPorId(requisicaoEnderecoDto, ref retornoEnderecoDto)) { retornoDto.Mensagem = "Erro ao obter os endereços: " + retornoEnderecoDto.Mensagem; retornoDto.Retorno = false; } // Converter da dto ClienteEnderecoDto enderedoNaoEncontrado = new ClienteEnderecoDto(); enderedoNaoEncontrado.Endereco.Logradouro = "Endereço não encontrado"; foreach (var pedidoEntrega in listaVo) { PedidoEntregaDto pedidoEntregaDto = new PedidoEntregaDto(); if (!ConverterVoParaDto(pedidoEntrega, ref pedidoEntregaDto, ref mensagemErro)) { retornoDto.Mensagem = "Erro ao converter para DTO: " + mensagemErro; retornoDto.Retorno = false; logBll.ResgistrarLog(requisicaoDto, LogRecursos.ObterListaPedidoEntrega, pedidoEntrega.Id, retornoDto.Mensagem); return(false); } ClienteEnderecoDto endereco = retornoEnderecoDto.ListaEntidades.Where(p => p.Id == pedidoEntregaDto.IdEndereco).FirstOrDefault(); pedidoEntregaDto.ClienteEndereco = (endereco == null) ? enderedoNaoEncontrado : endereco; retornoDto.ListaEntidades.Add(pedidoEntregaDto); } retornoDto.Mensagem = "Ok"; retornoDto.Retorno = true; return(true); }