Beispiel #1
0
        /// <summary>
        /// Retorna a listagem das galerias. Caso tenha sido passado um Id de serviço, lista apenas as galerias do Serviço.
        /// </summary>
        /// <param name="servicoId">Id do Serviço.</param>
        /// <returns>PartialView com a listagem de galerias.</returns>
        public async Task <IActionResult> InitialGaleria(string servicoId)
        {
            var galerias = _context.Galerias.Include(g => g.Fotografias).Include(g => g.Servico).Select(g => g);

            // Recolher as galerias por página do cookie
            int galPP = CookieAPI.GetAsInt32(Request, "GaleriasPerPage") ?? _galPP;

            if (!String.IsNullOrEmpty(servicoId))
            {
                galerias = galerias.Where(g => g.ServicoFK.Equals(servicoId));
            }

            int totalGalerias = galerias.Count();

            galerias = galerias
                       .OrderByDescending(g => g.DataDeCriacao)
                       .Take(galPP)
                       .Include(g => g.Fotografias)
                       .Include(g => g.Galerias_Metadados).ThenInclude(mt => mt.Metadado);

            // Refrescar as capas das galerias
            await RefreshCoverImages(await galerias.ToListAsync());

            GaleriasIndexViewModel response = new GaleriasIndexViewModel
            {
                Galerias  = await galerias.ToListAsync(),
                FirstPage = true,
                LastPage  = (totalGalerias <= galPP),
                PageNum   = 1
            };

            return(PartialView("PartialViews/_IndexCards", response));
        }
Beispiel #2
0
        public async Task <IActionResult> IndexFilter([Bind("NomeSearch,DateMin,DateMax,ServicoID,Metadados,Ordem,Page,GaleriasPerPage")] GaleriasSearchViewModel search)

        {
            int skipNum = (search.Page - 1) * search.GaleriasPerPage;

            // Recolher os serviços por página do cookie
            int galPP = CookieAPI.GetAsInt32(Request, "GaleriasPerPage") ?? _galPP;

            // Caso o utilizador tenha alterado os serviços por página, alterar a variável global e guardar
            // o novo  valor no cookie
            if (search.GaleriasPerPage != galPP)
            {
                galPP = search.GaleriasPerPage;
                CookieAPI.Set(Response, "GaleriasPerPage", galPP.ToString());
            }

            // Query de todos os serviços
            IQueryable <Galeria> galerias = _context.Galerias.Select(g => g);

            // Caso exista pesquisa por nome
            if (!String.IsNullOrEmpty(search.NomeSearch))
            {
                galerias = galerias.Where(s => s.Nome.Contains(search.NomeSearch));
            }
            // Caso exista pesquisa por servico
            if (!String.IsNullOrEmpty(search.ServicoID))
            {
                galerias = galerias.Where(g => g.ServicoFK.Equals(search.ServicoID));
            }
            // Caso exista pesquisa por data min
            if (search.DateMin != null)
            {
                galerias = galerias.Where(s => s.DataDeCriacao >= search.DateMin);
            }
            // Caso exista pesquisa por data max
            if (search.DateMax != null)
            {
                galerias = galerias.Where(s => s.DataDeCriacao <= search.DateMax);
            }
            // Caso exista metadados
            if (!String.IsNullOrEmpty(search.Metadados))
            {
                foreach (string metaID in search.Metadados.Split(","))
                {
                    var galeriasList = _context.Galerias_Metadados.Where(st => st.MetadadoFK == Int32.Parse(metaID)).Select(st => st.GaleriaFK).ToList();
                    galerias = galerias.Where(s => galeriasList.Contains(s.ID));
                }
            }

            if (!String.IsNullOrEmpty(search.Ordem))
            {
                switch (search.Ordem)
                {
                case "data":
                    galerias = galerias.OrderByDescending(s => s.DataDeCriacao);
                    break;

                case "nome":
                    galerias = galerias.OrderBy(s => s.Nome);
                    break;

                default:
                    galerias = galerias.OrderByDescending(s => s.DataDeCriacao);
                    break;
                }
            }
            else
            {
                galerias = galerias.OrderByDescending(s => s.DataDeCriacao);
            }

            // Incluir as tabelas associadas e saltar o numero de galeria referentes à página
            galerias = galerias.Include(g => g.Fotografias)
                       .Include(g => g.Servico)
                       .Include(g => g.Galerias_Metadados).ThenInclude(gmt => gmt.Metadado)
                       .Skip(skipNum);

            int totalGalerias = galerias.Count();

            galerias = galerias.Take(galPP); // Pegar apenas o número de galerias por página definido pelo utilizador

            // Refrescar as capas das galerias
            await RefreshCoverImages(await galerias.ToListAsync());

            GaleriasIndexViewModel response = new GaleriasIndexViewModel
            {
                Galerias  = await galerias.ToListAsync(),
                FirstPage = (search.Page == 1),
                LastPage  = (totalGalerias <= galPP),
                PageNum   = search.Page
            };

            return(PartialView("PartialViews/_IndexCards", response));
        }