Пример #1
0
        // 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));
        }
Пример #2
0
        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));
        }