/*
         * // GET: AberturaOS
         * public ActionResult Index(int pagina = 1)
         * {
         *  AberturaOSModel lista = new AberturaOSModel();
         *  var listaOrdenada = lista.ListarAberturaOS().OrderBy(n => n.Numero)
         *                                          .ToPagedList(pagina, 5);
         *  return View(listaOrdenada);
         * }
         */
        // GET: AberturaOS
        public ActionResult Index(string sortOrder = "", string currentFilter = "", string searchString = "", string ColunaPesquisa = "", int pagina = 1)
        {
            //https://docs.microsoft.com/pt-br/aspnet/mvc/overview/getting-started/getting-started-with-ef-using-mvc/sorting-filtering-and-paging-with-the-entity-framework-in-an-asp-net-mvc-application

            ViewBag.CurrentSort = sortOrder;
            if (searchString != "")
            {
                pagina = 1;
            }
            else
            {
                searchString = currentFilter.ToUpper();
            }

            ViewBag.CurrentFilter = searchString.ToUpper();
            AberturaOSModel lista = new AberturaOSModel();
            //var listaOrdenada = lista.ListarAberturaOS();
            var listaOrdenada = from s in lista.ListarAberturaOS()
                                select s;

            if (!String.IsNullOrEmpty(searchString))
            {
                switch (ColunaPesquisa)
                {
                case "Cliente":
                    listaOrdenada = listaOrdenada.Where(s => s.Cliente.Nome.Contains(searchString.ToUpper()));
                    break;

                case "Placa":
                    listaOrdenada = listaOrdenada.Where(s => s.Veiculo.Placa.Contains(searchString.ToUpper()));
                    break;

                case "Consultor Usuário":
                    listaOrdenada = listaOrdenada.Where(s => s.ConsultorUsuario.Nome.Contains(searchString.ToUpper()));
                    break;

                case "Reclamação":
                    listaOrdenada = listaOrdenada.Where(s => s.Reclamacao.Contains(searchString.ToUpper()));
                    break;
                    //default:
                    //    break;
                }
            }
            switch (sortOrder)
            {
            case "Id":
                listaOrdenada = listaOrdenada.OrderBy(s => s.Id);
                break;

            case "Numero":
                listaOrdenada = listaOrdenada.OrderBy(s => s.Numero);
                break;

            case "Situação":
                listaOrdenada = listaOrdenada.OrderBy(s => s.Situacao.Descricao);
                break;

            case "TipoOS":
                listaOrdenada = listaOrdenada.OrderBy(s => s.TipoOS.Descricao);
                break;

            case "Cliente":
                listaOrdenada = listaOrdenada.OrderBy(s => s.Cliente.Nome);
                break;

            case "Placa":
                listaOrdenada = listaOrdenada.OrderBy(s => s.Veiculo.Placa);
                break;

            case "Quilometragem Entrada":
                listaOrdenada = listaOrdenada.OrderBy(s => s.QuilometragemEntrada);
                break;

            case "Consultor Usuário":
                listaOrdenada = listaOrdenada.OrderBy(s => s.ConsultorUsuario.Nome);
                break;

            case "Abertura":
                listaOrdenada = listaOrdenada.OrderBy(s => s.Abertura);
                break;

            case "Previsao Entrega":
                listaOrdenada = listaOrdenada.OrderBy(s => s.PrevisaoEntrega);
                break;

            case "Reclamação":
                listaOrdenada = listaOrdenada.OrderBy(s => s.Reclamacao);
                break;

            default:      // numero ascending
                listaOrdenada = listaOrdenada.OrderBy(s => s.Numero);
                break;
            }
            return(View(listaOrdenada.ToPagedList(pagina, 5)));
        }
        // GET: AberturaOS
        public ActionResult Index2(string sortOrder = "", string currentFilter = "", string searchString = "", int pagina = 1)
        {
            ViewBag.CurrentSort = sortOrder;
            if (searchString != "")
            {
                pagina = 1;
            }
            else
            {
                searchString = currentFilter.ToUpper();
            }

            ViewBag.CurrentFilter = searchString.ToUpper();
            AberturaOSModel lista = new AberturaOSModel();
            //var listaOrdenada = lista.ListarAberturaOS();
            var listaOrdenada = from s in lista.ListarAberturaOS()
                                select s;

            if (!String.IsNullOrEmpty(searchString))
            {
                listaOrdenada = listaOrdenada.Where(s => s.Veiculo.Placa.Contains(searchString.ToUpper()));
            }
            switch (sortOrder)
            {
            case "Id":
                listaOrdenada = listaOrdenada.OrderBy(s => s.Id);
                break;

            case "Numero":
                listaOrdenada = listaOrdenada.OrderBy(s => s.Numero);
                break;

            case "Situação":
                listaOrdenada = listaOrdenada.OrderBy(s => s.Situacao);
                break;

            case "TipoOS":
                listaOrdenada = listaOrdenada.OrderBy(s => s.TipoOS);
                break;

            case "Cliente":
                listaOrdenada = listaOrdenada.OrderBy(s => s.Cliente.Nome);
                break;

            case "Placa":
                listaOrdenada = listaOrdenada.OrderBy(s => s.Veiculo.Placa);
                break;

            case "Quilometragem Entrada":
                listaOrdenada = listaOrdenada.OrderBy(s => s.QuilometragemEntrada);
                break;

            case "Consultor Usuário":
                listaOrdenada = listaOrdenada.OrderBy(s => s.ConsultorUsuario.Nome);
                break;

            case "Abertura":
                listaOrdenada = listaOrdenada.OrderBy(s => s.Abertura);
                break;

            case "Previsao Entrega":
                listaOrdenada = listaOrdenada.OrderBy(s => s.PrevisaoEntrega);
                break;

            case "Reclamação":
                listaOrdenada = listaOrdenada.OrderBy(s => s.Reclamacao);
                break;

            default:      // numero ascending
                listaOrdenada = listaOrdenada.OrderBy(s => s.Numero);
                break;
            }


            return(View(listaOrdenada.ToPagedList(pagina, 5)));
        }