public async Task <PaginacionResultado <UsuarioResumen> > ObtenerTodosAsync(PaginacionParametros paginacion) { var query = from n in db.Usuarios select new UsuarioResumen { Id = n.Id, Login = n.Login, Nombre = n.NombreCompleto, Correo = n.Correo, Activo = n.Activo }; // Aqui se mapean los paremetros que envía la UI a sus respectivas propiedad // para poder realizar el ordenamiento. // Por ejemplo, si la UI envía ordenamiento=login,-nombre este mapping // identifica que "login" corresponde a la propiedad "Login" de UsuarioResumen // y que "nombre" corresponde a la propiedad "Nombre" de UsuarioResumen. var orderMapping = new OrdenMapping <UsuarioResumen> { { "id", x => x.Id }, { "login", x => x.Login }, { "nombre", x => x.Nombre }, { "correo", x => x.Correo }, { "activo", x => x.Activo } }; var result = await query.OrdenarAsync(paginacion, x => x.Id, orderMapping); return(result); }
public async Task <PaginacionResultado <MarcaResumen> > ObtenerTodasAsync(PaginacionParametros paginacion) { var query = from q in db.Marcas select new MarcaResumen { Id = q.Id, Nombre = q.Nombre }; return(await query.OrdenarAsync(paginacion, x => x.Id)); }
public async Task <PaginacionResultado <IngresoResumen> > ObtenerTodosAsync(PaginacionParametros paginacion) { var query = from i in db.Ingresos select new IngresoResumen { Id = i.Id, Bodega = i.Bodega.Nombre, Proveedor = i.Proveedor.Nombre, Fecha = i.Fecha }; var mapping = new OrdenMapping <IngresoResumen> { { "id", x => x.Id }, { "bodega", x => x.Bodega }, { "proveedor", x => x.Proveedor }, { "fecha", x => x.Fecha } }; var ingresos = await query.OrdenarAsync(paginacion, x => x.Fecha, mapping, true); if (ingresos.CantidadElementos > 0) { var ingresosIds = ingresos.Elementos.Select(x => x.Id).ToArray(); var productosQuery = from p in db.IngresoProductos where ingresosIds.Contains(p.IngresoId) select new IngresoProductoResumen { Id = p.Id, IngresoId = p.IngresoId, Producto = p.Producto.Nombre, Marca = p.Marca.Nombre, Unidad = p.UnidadDeMedida.Nombre, Cantidad = p.Cantidad, Precio = p.Precio }; var productos = await productosQuery.ToArrayAsync(); foreach (var ingreso in ingresos.Elementos) { ingreso.Productos = productos.Where(x => x.IngresoId == ingreso.Id).ToArray(); } } return(ingresos); }
public async Task <PaginacionResultado <RolResumen> > ObtenerTodos(PaginacionParametros paginacionParametros) { var query = db.Roles.Select(x => new RolResumen { Id = x.Id, Nombre = x.Nombre, CantidadUsuarios = x.Usuarios.Count }).OrderBy(x => x.Nombre); var elementos = await query.ToArrayAsync(); return(new PaginacionResultado <RolResumen> { Elementos = elementos }); }
public async Task <PaginacionResultado <BodegaResumen> > ObtenerTodasAsync(PaginacionParametros paginacion) { var query = from n in db.Bodegas select new BodegaResumen { Id = n.Id, Nombre = n.Nombre, Direccion = n.Direccion }; var orderMapping = new OrdenMapping <BodegaResumen> { { "id", x => x.Id }, { "nombre", x => x.Nombre }, { "direccion", x => x.Direccion } }; var result = await query.OrdenarAsync(paginacion, x => x.Id, orderMapping); return(result); }
public async Task <PaginacionResultado <ProductoResumen> > ObtenerTodosAsync(PaginacionParametros paginacion) { var query = from n in db.Productos select new ProductoResumen { Id = n.Id, Nombre = n.Nombre, Descripcion = n.Descripcion }; var orderMapping = new OrdenMapping <ProductoResumen> { { "id", x => x.Id }, { "nombre", x => x.Nombre }, { "descripcion", x => x.Descripcion } }; var result = await query.OrdenarAsync(paginacion, x => x.Id, orderMapping); return(result); }
public async Task <PaginacionResultado <EgresoResumen> > ObtenerTodosAsync(PaginacionParametros paginacion) { var query = from e in db.Egresos select new EgresoResumen { Id = e.Id, Bodega = e.Bodega.Nombre, Fecha = e.Fecha }; var orderMapping = new OrdenMapping <EgresoResumen> { { "id", x => x.Id }, { "Bodega", x => x.Bodega }, { "Fecha", x => x.Fecha } }; var result = await query.OrdenarAsync(paginacion, x => x.Id, orderMapping); return(result); }
internal async Task <PaginacionResultado <MarcaResumen> > ObtenerPorProductoAsync(int productoId, PaginacionParametros paginacion) { var query = from q in db.ProductoMarcas where q.ProductoId == productoId select new MarcaResumen { Id = q.Marca.Id, Nombre = q.Marca.Nombre }; return(await query.Distinct().OrdenarAsync(paginacion, x => x.Id)); }
public async Task <PaginacionResultado <ProveedorResumen> > ObtenerTodosAsync(PaginacionParametros paginacion) { var query = from p in db.Proveedores select new ProveedorResumen { Id = p.Id, Nombre = p.Nombre, NombreContacto = p.NombreDeContacto }; var orderMapping = new OrdenMapping <ProveedorResumen> { { "id", x => x.Id }, { "nombre", x => x.Nombre }, { "nombreContacto", x => x.NombreContacto } }; var result = await query.OrdenarAsync(paginacion, x => x.Id, orderMapping); return(result); }
internal async Task <PaginacionResultado <UnidadDeMedidaResumen> > ObtenerPorProductoAsync(int productoId, PaginacionParametros paginacion) { var query = from p in db.ProductoUnidadesDeMedida where p.ProductoId == productoId select new UnidadDeMedidaResumen { Id = p.UnidadDeMedida.Id, Nombre = p.UnidadDeMedida.Nombre }; return(await query.Distinct().OrdenarAsync(paginacion, x => x.Nombre)); }
internal static async Task <PaginacionResultado <T> > OrdenarAsync <T>(this IQueryable <T> query, PaginacionParametros paginacion, Expression <Func <T, object> > defaultOrder = null, OrdenMapping <T> orderMapping = null, bool orderByDefaultDesc = false) { IOrderedQueryable <T> orderedQuery = null; if (orderMapping != null && paginacion.Ordenamiento != null && paginacion.Ordenamiento.Count > 0) { foreach (var columna in paginacion.Ordenamiento) { if (orderMapping.ContainsKey(columna.Key)) { var fn = orderMapping[columna.Key]; if (columna.Value) { orderedQuery = orderedQuery == null?query.OrderBy(fn) : orderedQuery.ThenBy(fn); } else { orderedQuery = orderedQuery == null?query.OrderByDescending(fn) : orderedQuery.ThenByDescending(fn); } } } } if (orderedQuery == null) { orderedQuery = orderByDefaultDesc ? query.OrderByDescending(defaultOrder) : query.OrderBy(defaultOrder); } if (paginacion.ElementosPorPagina < 1 || paginacion.ElementosPorPagina > 100) { paginacion.ElementosPorPagina = 20; } var totalElementos = query.Count(); var totalPaginas = (int)Math.Ceiling(totalElementos / (double)paginacion.ElementosPorPagina); if (paginacion.Pagina < 1) { paginacion.Pagina = 1; } if (paginacion.Pagina > totalPaginas) { paginacion.Pagina = totalPaginas; } var skip = (paginacion.Pagina - 1) * paginacion.ElementosPorPagina; var take = paginacion.ElementosPorPagina; var resultado = orderedQuery.Skip(skip).Take(take); var elementos = await resultado.ToArrayAsync(); var result = new PaginacionResultado <T> { Elementos = elementos, Pagina = paginacion.Pagina, ElementosPorPagina = paginacion.ElementosPorPagina, CantidadElementos = elementos.Length, TotalElementos = totalElementos, TotalPaginas = totalPaginas, PaginaSiguiente = paginacion.Pagina == totalPaginas ? null as int? : paginacion.Pagina + 1, PaginaAnterior = paginacion.Pagina == 1 ? null as int? : paginacion.Pagina - 1, Paginas = Enumerable.Range(1, totalPaginas).ToArray() }; return(result); }