public ActionResult Buscar(SearchParameters parameters) { var queriable = _pedidosService.Buscar(); queriable = queriable.Where(a => a.EstadoId != (int)EstadosEnum.Cancelado && a.EmpresaId == parameters.IdEmpresa); if (parameters.IdPedido.HasValue) { queriable = queriable.Where(a => a.Id == parameters.IdPedido.Value); } if (parameters.Finalizados.HasValue) { queriable = parameters.Finalizados.Value ? queriable.Where(a => a.EstadoId == (int)EstadosEnum.Finalizado) : queriable.Where(a => a.EstadoId != (int)EstadosEnum.Finalizado); } else { queriable = queriable.Where(a => a.EstadoId != (int)EstadosEnum.Finalizado); } if (!string.IsNullOrEmpty(parameters.Nombre)) { queriable = queriable.Where(a => (a.Cliente.Nombres + " " + a.Cliente.Apellidos).Contains(parameters.Nombre)); } if (!string.IsNullOrEmpty(parameters.Carnet)) { queriable = queriable.Where(a => a.Cliente.Carnet.Contains(parameters.Carnet)); } if (!string.IsNullOrEmpty(parameters.Contenedor)) { queriable = queriable.Where(a => a.Contenedores.Contains(parameters.Contenedor)); } if (parameters.FechaDesde.HasValue && parameters.FechaHasta.HasValue) { queriable = queriable.Where(a => a.Fecha >= parameters.FechaDesde.Value && a.Fecha <= parameters.FechaHasta.Value); } else if (parameters.FechaDesde.HasValue) { queriable = queriable.Where(a => a.Fecha >= parameters.FechaDesde.Value); } else if (parameters.FechaHasta.HasValue) { queriable = queriable.Where(a => a.Fecha <= parameters.FechaHasta.Value); } var querySelect = queriable.Select(a => new { Pedido = new { a.Id, a.Descripcion, Contenedores = a.Contenedores, a.Fecha, a.Precio, Cliente = new { a.Cliente.Id, a.Cliente.Carnet, a.Cliente.Nombres, a.Cliente.Apellidos, NombreCompleto = (a.Cliente.Nombres + " " + a.Cliente.Apellidos).Trim() }, Estado = new { a.Estado.Id, a.Estado.Nombre } } }); var order = parameters.GetEnum(SearchParameters.PedidoOrderColumn.Fecha); switch (order) { case SearchParameters.PedidoOrderColumn.Id: querySelect = parameters.Ascendente ? querySelect.OrderBy(a => a.Pedido.Id) : querySelect.OrderByDescending(a => a.Pedido.Id); break; case SearchParameters.PedidoOrderColumn.Nombre: querySelect = parameters.Ascendente ? querySelect.OrderBy(a => a.Pedido.Cliente.Nombres).ThenBy(a => a.Pedido.Cliente.Apellidos) : querySelect.OrderByDescending(a => a.Pedido.Cliente.Nombres).ThenByDescending(a => a.Pedido.Cliente.Apellidos); break; case SearchParameters.PedidoOrderColumn.Fecha: querySelect = parameters.Ascendente ? querySelect.OrderByDescending(a => a.Pedido.Fecha) : querySelect.OrderByDescending(a => a.Pedido.Fecha); break; } var listado = querySelect.Skip((parameters.PageIndex - 1) * parameters.ItemsPerPage) .Take(parameters.ItemsPerPage).ToList(); var returnList = listado.Select(a => { var tieneObservaciones = _observacionesService.TieneObservaciones(a.Pedido.Id); var returnData = new { a.Pedido, FechaPedido = a.Pedido.Fecha.ToString("dd/MM/yyyy"), Contenedor = string.Join(", ", a.Pedido.Contenedores), TieneObservaciones = tieneObservaciones }; return(returnData); }); var transfer = new ClientTransfer(); var totalElements = querySelect.Count(); var totalPages = totalElements / parameters.ItemsPerPage; transfer.Data = returnList; transfer.Pagination.TotalPages = totalPages + ((totalElements % parameters.ItemsPerPage) > 0 ? 1 : 0); transfer.Pagination.TotalRecords = totalElements; //Total de elementos segun filtro transfer.Pagination.TotalDisplayRecords = listado.Count; //Total de elementos segun pagina return(Json(transfer)); }