// GET: Servicos public async Task <IActionResult> Index(int?page = 1) { // Fornecer feedback ao cliente caso este exista. // Este feedback é fornecido na view a partir de uma notificação 'Noty' if (TempData["Feedback"] != null) { ViewData["Feedback"] = TempData["Feedback"]; ViewData["Type"] = TempData["Type"] ?? "success"; } // Recolher os serviços por página do cookie int servPP = CookieAPI.GetAsInt32(Request, "ServicosPerPage") ?? _serPP; var servicos = _context.Servicos .Include(s => s.Requerente) .Include(s => s.Galerias) .Include(s => s.Servicos_Tipos).ThenInclude(st => st.Tipo) .Include(s => s.Servicos_ServicosSolicitados).ThenInclude(sss => sss.ServicoSolicitado) .Include(s => s.Servicos_DataExecucao).ThenInclude(sde => sde.DataExecucao) .OrderByDescending(s => s.DataDeCriacao); ServicosIndexViewModel response = new ServicosIndexViewModel { Servicos = await servicos.Take(servPP).ToListAsync(), FirstPage = true, LastPage = (servicos.Count() <= servPP), PageNum = 1 }; ViewData["servPP"] = servPP; return(View(response)); }
public async Task <IActionResult> IndexFilter([Bind("NomeSearch,DateMin,DateMax,Requerente,Obra,Tipos,ServSolicitados,Ordem,Page,ServicosPerPage")] ServicosSearchViewModel search) { int skipNum = (search.Page - 1) * search.ServicosPerPage; // Recolher os serviços por página do cookie int servPP = CookieAPI.GetAsInt32(Request, "ServicosPerPage") ?? _serPP; // 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.ServicosPerPage != servPP) { servPP = search.ServicosPerPage; CookieAPI.Set(Response, "ServicosPerPage", servPP.ToString()); } // Query de todos os serviços IQueryable <Servico> servicos = _context.Servicos; // Caso exista pesquisa por nome if (!String.IsNullOrEmpty(search.NomeSearch)) { servicos = servicos.Where(s => s.Nome.Contains(search.NomeSearch)); } // Caso exista pesquisa por Requerente if (!String.IsNullOrEmpty(search.Requerente)) { servicos = servicos.Where(s => s.Requerente.Nome.Contains(search.Requerente)); } // Caso exista pesquisa por identificação/obra if (!String.IsNullOrEmpty(search.Obra)) { servicos = servicos.Where(s => s.IdentificacaoObra.Contains(search.Obra)); } // Caso exista pesquisa por data min if (search.DateMin != null) { servicos = servicos.Where(s => s.DataDeCriacao >= search.DateMin); } // Caso exista pesquisa por data max if (search.DateMax != null) { servicos = servicos.Where(s => s.DataDeCriacao <= search.DateMax); } // Caso exista tipos if (!String.IsNullOrEmpty(search.Tipos)) { foreach (string tipoID in search.Tipos.Split(",")) { var serTipo = _context.Servicos_Tipos.Where(st => st.TipoFK == Int32.Parse(tipoID)).Select(st => st.ServicoFK).ToList(); servicos = servicos.Where(s => serTipo.Contains(s.ID)); } } // Caso exista tipos if (!String.IsNullOrEmpty(search.ServSolicitados)) { foreach (string servSolicID in search.ServSolicitados.Split(",")) { var serSerSolic = _context.Servicos_ServicosSolicitados.Where(st => st.ServicoSolicitadoFK == Int32.Parse(servSolicID)).Select(st => st.ServicoFK).ToList(); servicos = servicos.Where(s => serSerSolic.Contains(s.ID)); } } if (!String.IsNullOrEmpty(search.Ordem)) { switch (search.Ordem) { case "data": servicos = servicos.OrderByDescending(s => s.DataDeCriacao); break; case "nome": servicos = servicos.OrderBy(s => s.Nome); break; default: servicos = servicos.OrderByDescending(s => s.DataDeCriacao); break; } } else { servicos = servicos.OrderByDescending(s => s.DataDeCriacao); } servicos = servicos .Include(s => s.Requerente) .Include(s => s.Galerias) .Include(s => s.Servicos_Tipos).ThenInclude(st => st.Tipo) .Include(s => s.Servicos_ServicosSolicitados).ThenInclude(sss => sss.ServicoSolicitado) .Include(s => s.Servicos_DataExecucao).ThenInclude(sde => sde.DataExecucao) .Skip(skipNum); ServicosIndexViewModel response = new ServicosIndexViewModel { Servicos = await servicos.Take(servPP).ToListAsync(), FirstPage = (search.Page == 1), LastPage = (servicos.Count() <= servPP), PageNum = search.Page }; return(PartialView("PartialViews/_IndexCards", response)); }