Exemplo n.º 1
0
        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));
        }