Beispiel #1
0
        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);
        }
Beispiel #2
0
        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);
        }
Beispiel #3
0
        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);
        }
Beispiel #4
0
        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);
        }
Beispiel #5
0
        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);
        }
Beispiel #6
0
        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);
        }
Beispiel #7
0
        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);
        }