/// <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)); }
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)); }