public IHttpActionResult Get( string clientId = null, string policyId = null, decimal?amountInsured = null, string email = null, bool?installmentPayment = null, DateTime?inceptionDate = null, [FromUri] PaginadoDTO paginado = null, [FromUri] OrdenamientoDTO ordenamiento = null) { //TODO: eliminar System.Threading.Thread.Sleep(1500); // no se puede hacer un pedido sin paginacion if (paginado == null) { // toma los valores por default del paginado paginado = new PaginadoDTO(); } // no se puede hacer un pedido sin ordenamiento o de una columna que no existe if (ordenamiento == null || typeof(Policy).GetProperties().Where(p => p.Name.ToUpper() == ordenamiento.ColumnaOrdenamiento.ToUpper()).FirstOrDefault() == null) { // toma los valores por default del ordenamiento ordenamiento = new OrdenamientoDTO(); ordenamiento.ColumnaOrdenamiento = nameof(Policy.Id); } // se obtienen las policies del repositorio var policies = this.policiesRepository.GetPolicies(); // filtro por id de cliente (equals) if (!string.IsNullOrEmpty(clientId)) { policies = policies.Where(p => p.ClientId.Equals(clientId)); } // filtro por id de policy (equals) if (!string.IsNullOrEmpty(policyId)) { policies = policies.Where(p => p.Id.ToUpper().Trim().Equals(policyId.ToUpper().Trim())); } // filtro por amount insured (equals) if (amountInsured != null) { policies = policies.Where(p => p.AmountInsured.Equals(amountInsured)); } // filtro por installment payment (equals) if (installmentPayment != null) { policies = policies.Where(p => p.InstallmentPayment.Equals(installmentPayment)); } // filtro por email (starts with) if (!string.IsNullOrEmpty(email)) { policies = policies.Where(p => p.Email.ToUpper().StartsWith(email.ToUpper())); } // filtro por inception date (equals) if (inceptionDate != null) { policies = policies.Where(p => p.InceptionDate.Year.Equals(inceptionDate.Value.Year)) .Where(p => p.InceptionDate.Month.Equals(inceptionDate.Value.Month)) .Where(p => p.InceptionDate.Day.Equals(inceptionDate.Value.Day)); } // cantidad de registros (sin paginacion) var cantidadRegistros = policies.Count(); // se aplica el ordenamiento policies = policies.OrderBy($"{ordenamiento.ColumnaOrdenamiento} {ordenamiento.GetSentidoOrdenamiento()}"); // se aplica el paginado policies = policies.Skip((int)(paginado.Pagina - 1) * (int)paginado.FilasPorPagina).Take((int)paginado.FilasPorPagina); // dto de respuesta GenericListDTO <PolicyDTO> resp = new GenericListDTO <PolicyDTO>(); resp.Lista = policies.ToDto(); resp.PaginaActual = paginado.Pagina; resp.CantidadRegistros = cantidadRegistros; resp.CantidadPaginas = (int)Math.Ceiling((decimal)cantidadRegistros / (decimal)paginado.FilasPorPagina); return(this.Ok(resp)); }
public IHttpActionResult Get( string id = null, string name = null, string email = null, string role = null, [FromUri] PaginadoDTO paginado = null, [FromUri] OrdenamientoDTO ordenamiento = null) { //TODO: eliminar System.Threading.Thread.Sleep(1500); // no se puede hacer un pedido sin paginacion if (paginado == null) { // toma los valores por default del paginado paginado = new PaginadoDTO(); } // no se puede hacer un pedido sin ordenamiento o de una columna que no existe if (ordenamiento == null || typeof(Client).GetProperties().Where(p => p.Name.ToUpper() == ordenamiento.ColumnaOrdenamiento.ToUpper()).FirstOrDefault() == null) { // toma los valores por default del ordenamiento ordenamiento = new OrdenamientoDTO(); ordenamiento.ColumnaOrdenamiento = nameof(Client.Id); } // se obtienen los clientes del repositorio var clients = this.clientsRepository.GetClients(); // filtro por id (equals) if (!string.IsNullOrEmpty(id)) { clients = clients.Where(p => p.Id.Equals(id)); } // filtro por nombre (contains) if (!string.IsNullOrEmpty(name)) { clients = clients.Where(p => p.Name.ToUpper().Contains(name.ToUpper())); } // filtro por email (starts with) if (!string.IsNullOrEmpty(email)) { clients = clients.Where(p => p.Email.ToUpper().StartsWith(email.ToUpper())); } // filtro por rol (equals) if (!string.IsNullOrEmpty(role)) { clients = clients.Where(p => p.Role.ToUpper().Equals(role.ToUpper())); } // cantidad de registros (sin paginacion) var cantidadRegistros = clients.Count(); // se aplica el ordenamiento clients = clients.OrderBy($"{ordenamiento.ColumnaOrdenamiento} {ordenamiento.GetSentidoOrdenamiento()}"); // se aplica el paginado clients = clients.Skip((int)(paginado.Pagina - 1) * (int)paginado.FilasPorPagina).Take((int)paginado.FilasPorPagina); // dto de respuesta GenericListDTO <ClientDTO> resp = new GenericListDTO <ClientDTO>(); resp.Lista = clients.ToDto(); resp.PaginaActual = paginado.Pagina; resp.CantidadRegistros = cantidadRegistros; resp.CantidadPaginas = (int)Math.Ceiling((decimal)cantidadRegistros / (decimal)paginado.FilasPorPagina); return(this.Ok(resp)); }