public IEnumerable <PuntoDeInteres> Get()
        {
            //Hacer peticion a la base de datos y traer todos los pois
            BuscAR db = new BuscAR();

            return(db.puntosInteres);
        }
 // GET: Cuenta
 public ActionResult Index()
 {
     using (BuscAR db = new BuscAR())
     {
         return(View(db.Usuarios.ToList()));
     }
 }
 // GET: Accion
 public ActionResult Index()
 {
     using (BuscAR db = new BuscAR())
     {
         return(View(db.configuracionDeAcciones.ToList()));
     }
 }
        public ActionResult DeleteParada(int id)
        {
            ParadaDeColectivo parada;

            using (var db = new BuscAR())
            {
                parada = (ParadaDeColectivo)db.puntosInteres.Where(p => p.id == id).Single();
            }
            return(View(parada));
        }
        public ActionResult EditCGP(int id)
        {
            CGP cgp;

            using (var db = new BuscAR())
            {
                cgp = (CGP)db.puntosInteres.Where(p => p.id == id).Single();
            }
            return(View(cgp));
        }
        public ActionResult EditBanco(int id)
        {
            Banco banco;

            using (var db = new BuscAR())
            {
                banco = (Banco)db.puntosInteres.Where(p => p.id == id).Single();
            }
            return(View(banco));
        }
        // ---------------------------------------------------------------------------------------
        //                             A B M   P A R A D A
        //----------------------------------------------------------------------------------------

        public ActionResult ABMParada()
        {
            List <ParadaDeColectivo> paradas;

            using (var db = new BuscAR())
            {
                paradas = (from p in db.puntosInteres.OfType <ParadaDeColectivo>()
                           orderby p.nombreDePOI
                           select p).ToList();
            }

            return(View(paradas));
        }
        // ---------------------------------------------------------------------------------------
        //                             A B M   C G P
        //----------------------------------------------------------------------------------------

        public ActionResult ABMCGP()
        {
            List <CGP> cgp;

            using (var db = new BuscAR())
            {
                cgp = (from p in db.puntosInteres.OfType <CGP>()
                       orderby p.nombreDePOI
                       select p).ToList();
            }

            return(View(cgp));
        }
        private List <Busqueda> recuperarBusquedas()
        {
            List <Busqueda> busquedas;

            using (var db = new BuscAR())
            {
                busquedas = (from b in db.Busquedas
                             orderby b.Id
                             select b).ToList();
            }

            return(busquedas);
        }
        // ---------------------------------------------------------------------------------------
        //                             A B M   B A N C O
        //----------------------------------------------------------------------------------------

        public ActionResult ABMBanco()
        {
            List <Banco> bancos;

            using (var db = new BuscAR())
            {
                bancos = (from p in db.puntosInteres.OfType <Banco>()
                          orderby p.nombreDePOI
                          select p).ToList();
            }

            return(View(bancos));
        }
        public ActionResult Configurar(ConfiguracionDeAcciones accion)
        {
            if (ModelState.IsValid)
            {
                using (BuscAR db = new BuscAR())
                {
                    db.configuracionDeAcciones.Add(accion);
                    db.SaveChanges();
                }

                ModelState.Clear();

                ViewBag.Message = accion.nombreAccion + "Fue configurada correctamente";
            }
            return(View());
        }
        public ActionResult DeleteCGP(int id, FormCollection collection)
        {
            try
            {
                CGP cgp;
                using (var db = new BuscAR())
                {
                    cgp = (CGP)db.puntosInteres.Where(p => p.id == id).Single();
                }

                cgp.eliminarCGP(id);

                return(RedirectToAction("ABMCGP"));
            }
            catch
            {
                return(View());
            }
        }
        public ActionResult DeleteBanco(int id, FormCollection collection)
        {
            try
            {
                Banco banco;
                using (var db = new BuscAR())
                {
                    banco = (Banco)db.puntosInteres.Where(p => p.id == id).Single();
                }

                banco.eliminarBanco(id);

                return(RedirectToAction("ABMBanco"));
            }
            catch
            {
                return(View());
            }
        }
        public ActionResult DeleteParada(int id, FormCollection collection)
        {
            try
            {
                ParadaDeColectivo parada;
                using (var db = new BuscAR())
                {
                    parada = (ParadaDeColectivo)db.puntosInteres.Where(p => p.id == id).Single();
                }

                parada.eliminarParada(id);

                return(RedirectToAction("ABMParada"));
            }
            catch
            {
                return(View());
            }
        }
        public ActionResult Login(Terminal usuario)
        {
            using (BuscAR db = new BuscAR())
            {
                //var usu = db.cuentaDeUsuario.Single(us => us.Dni == usuario.Dni && us.Contrasenia == usuario.Contrasenia);
                var usu = usuario;

                if (usu != null)
                {
                    Session["IdUsuario"] = usu.id.ToString();
                    Session["EMAIl"]     = usu.email.ToString();
                    return(RedirectToAction("Logueado"));
                }
                else
                {
                    ModelState.AddModelError("", "El Usuario o Contraseña son incorrectos");
                }
            }
            return(View());
        }
        public ActionResult EditCGP(FormCollection collection)
        {
            try
            {
                CGP cgp;
                using (var db = new BuscAR())
                {
                    int id = Convert.ToInt16(collection["id"]);
                    cgp = (CGP)db.puntosInteres.Where(p => p.id == id).Single();


                    DbGeography           coordenada      = DbGeography.FromText("POINT(" + collection["coordenada.Latitude"] + " " + collection["coordenada.Longitude"] + ")");
                    List <string>         palabrasClave   = collection["palabrasClave"].Split(new char[] { ',' }).ToList();
                    List <HorarioAbierto> horariosAbierto = new List <HorarioAbierto>();

                    //         HorarioAbierto horarios = new HorarioAbierto(DayOfWeek.Monday, Convert.ToInt32(collection["abreLunes"]), Convert.ToInt32(collection["cierraLunes"]));
                    //         horariosAbierto.Add(horarios);

                    List <HorarioAbierto> horariosFeriado = new List <HorarioAbierto>();

                    List <Servicio> servicios = new List <Servicio>();



                    cgp.actualizar(collection["calle"], Convert.ToInt32(collection["numeroAltura"]),
                                   Convert.ToInt32(collection["piso"]), Convert.ToInt32(collection["unidad"]), Convert.ToInt32(collection["codigoPostal"]),
                                   collection["localidad"], collection["barrio"], collection["provincia"], collection["pais"], collection["entreCalles"],
                                   palabrasClave, collection["nombreDePOI"], Convert.ToInt32(collection["numeroDeComuna"]),
                                   servicios, Convert.ToInt32(collection["zonaDelimitadaPorLaComuna"]), horariosAbierto, horariosFeriado);


                    db.SaveChanges();
                }

                return(RedirectToAction("ABMCGP"));
            }
            catch
            {
                return(View());
            }
        }
        public ActionResult EditParada(FormCollection collection)
        {
            try
            {
                ParadaDeColectivo parada;
                using (var db = new BuscAR())
                {
                    int id = Convert.ToInt16(collection["id"]);
                    parada = (ParadaDeColectivo)db.puntosInteres.Where(p => p.id == id).Single();

                    DbGeography   coordenada    = DbGeography.FromText("POINT(" + collection["coordenada.Latitude"] + " " + collection["coordenada.Longitude"] + ")");
                    List <string> palabrasClave = collection["palabrasClave"].Split(new char[] { ',' }).ToList();


                    ParadaDeColectivo paradaActalizada = new ParadaDeColectivo();

                    paradaActalizada.calle         = collection["calle"];
                    paradaActalizada.numeroAltura  = Convert.ToInt32(collection["numeroAltura"]);
                    paradaActalizada.codigoPostal  = Convert.ToInt32(collection["codigoPostal"]);
                    paradaActalizada.localidad     = collection["localidad"];
                    paradaActalizada.barrio        = collection["barrio"];
                    paradaActalizada.calle         = collection["calle"];
                    paradaActalizada.provincia     = collection["provincia"];
                    paradaActalizada.pais          = collection["pais"];
                    paradaActalizada.entreCalles   = collection["entreCalles"];
                    paradaActalizada.palabrasClave = palabrasClave;
                    paradaActalizada.calle         = collection["nombreDePOI"];


                    parada.actualizar(paradaActalizada);
                    db.SaveChanges();
                }

                return(RedirectToAction("ABMParada"));
            }
            catch
            {
                return(View());
            }
        }
        public ActionResult Index(FormCollection search)
        {
            ViewBag.Message = "Buscá puntos de interés, descubrí cuáles están cerca.";


            string palabraBusqueda = search["palabraClave"];

            try
            {
                using (var db = new BuscAR())
                {
                    SearchViewModel modeloVista = new SearchViewModel();

                    //Defino ubicación actual (UTN/CAMPUS)
                    DispositivoTactil dispositivoTactil = db.DispositivoTactiles.Where(i => i.nombre == "UTN FRBA Lugano").Single();

                    //Si la persona ingresó un número, asumo que busca una parada de bondi
                    int linea = 0;
                    if (int.TryParse(palabraBusqueda, out linea) && linea > 0)
                    {
                        List <ParadaDeColectivo> resultadosBusqueda = db.puntosInteres.OfType <ParadaDeColectivo>().Where(b => b.nombreDePOI == palabraBusqueda).ToList();

                        foreach (ParadaDeColectivo punto in resultadosBusqueda)
                        {
                            if (punto.estaCerca(dispositivoTactil.coordenada))
                            {
                                modeloVista.paradasEncontradasCerca.Add(punto);
                                ViewBag.Latitud    = punto.coordenada.Latitude.ToString();
                                ViewBag.Longitud   = punto.coordenada.Longitude.ToString();
                                ViewBag.TextoLugar = "Parada del " + punto.nombreDePOI;

                                ViewBag.Search = "ok";
                            }
                            else
                            {
                                modeloVista.paradasEncontradas.Add(punto);
                                ViewBag.Search = "ok";
                            }
                        }
                    }

                    //Si la persona ingresó una palabra, me fijo si es un rubro
                    if (db.Rubros.Where(b => b.nombre.Contains(palabraBusqueda.ToLower())).ToList().Count() > 0)
                    {
                        List <LocalComercial> resultadosBusqueda = db.puntosInteres.OfType <LocalComercial>().Include("horarioAbierto").Include("horarioFeriado").ToList().Where(b => b.rubro.nombre.ToLower().Contains(palabraBusqueda.ToLower())).ToList();
                        resultados.AddRange(resultadosBusqueda);

                        foreach (LocalComercial punto in resultadosBusqueda)
                        {
                            if (punto.estaCerca(dispositivoTactil.coordenada))
                            {
                                modeloVista.localesEncontradosCerca.Add(punto);
                                ViewBag.Latitud = punto.coordenada.Latitude.ToString();
                                ViewBag.Search  = "ok";
                            }
                            else
                            {
                                modeloVista.localesEncontrados.Add(punto);
                                ViewBag.Search = "ok";
                            }
                        }

                        // Si la palabra ingresada no era parada ni rubro, la busco como local
                    }


                    List <LocalComercial> resultadosBusquedaLocales = db.puntosInteres.OfType <LocalComercial>().Include("horarioAbierto").Include("horarioFeriado").Include("rubro").Where(b => b.nombreDePOI.ToLower().Contains(palabraBusqueda.ToLower())).ToList();
                    if (resultadosBusquedaLocales.Count() > 0)
                    {
                        resultados.AddRange(resultadosBusquedaLocales);
                        foreach (LocalComercial punto in resultadosBusquedaLocales)
                        {
                            if (punto.estaCerca(dispositivoTactil.coordenada))
                            {
                                modeloVista.localesEncontradosCerca.Add(punto);
                                ViewBag.Latitud    = punto.coordenada.Latitude.ToString();
                                ViewBag.Longitud   = punto.coordenada.Longitude.ToString();
                                ViewBag.TextoLugar = punto.nombreDePOI;
                                ViewBag.Search     = "ok";
                            }
                            else
                            {
                                modeloVista.localesEncontrados.Add(punto);
                                ViewBag.Search = "ok";
                            }
                        }
                    }

                    List <Banco> resultadosBusquedaBancos = db.puntosInteres.OfType <Banco>().Include("horarioAbierto").Include("horarioFeriado").Include("servicios").Include("servicios.horarioAbierto").Include("servicios.horarioFeriados").Where(b => b.nombreDePOI.ToLower().Contains(palabraBusqueda.ToLower())).ToList();

                    GetJsonBanks buscadorDeBancosJSON        = new GetJsonBanks();
                    List <Banco> resultadoBusquedaJSONBancos = buscadorDeBancosJSON.getJsonData().FindAll(b => b.nombreDePOI.ToLower().Contains(palabraBusqueda.ToLower()));
                    resultadosBusquedaBancos.AddRange(resultadoBusquedaJSONBancos);

                    if (resultadosBusquedaBancos.Count() > 0)
                    {
                        resultados.AddRange(resultadosBusquedaBancos);
                        foreach (Banco punto in resultadosBusquedaBancos)
                        {
                            if (punto.estaCerca(dispositivoTactil.coordenada))
                            {
                                modeloVista.bancosEncontradosCerca.Add(punto);
                                ViewBag.Latitud    = punto.coordenada.Latitude.ToString();
                                ViewBag.Longitud   = punto.coordenada.Longitude.ToString();
                                ViewBag.TextoLugar = punto.nombreDePOI;
                                ViewBag.Search     = "ok";
                            }
                            else
                            {
                                modeloVista.bancosEncontrados.Add(punto);
                                ViewBag.Search = "ok";
                            }
                        }
                    }



                    List <CGP> resultadosBusquedaCGP = db.puntosInteres.OfType <CGP>().Include("horarioAbierto").Include("horarioFeriado").Include("servicios").Include("servicios.horarioAbierto").Include("servicios.horarioFeriados").Where(b => b.nombreDePOI.ToLower().Contains(palabraBusqueda.ToLower())).Cast <CGP>().ToList();

                    /*   GetJsonCGP buscadorDeCGPJSON = new GetJsonCGP();
                     * List<Banco> resultadoBusquedaJSONCGP = buscadorDeCGPJSON.getJsonData().FindAll(b => b.nombreDePOI.ToLower().Contains(palabraBusqueda.ToLower()));
                     * resultadoBusquedaJSONCGP.AddRange(resultadoBusquedaJSONCGP);*/


                    if (resultadosBusquedaCGP.Count() > 0)
                    {
                        resultados.AddRange(resultadosBusquedaCGP);
                        foreach (CGP punto in resultadosBusquedaCGP)
                        {
                            if (punto.estaCerca(dispositivoTactil.coordenada))
                            {
                                modeloVista.cgpsEncontradosCerca.Add(punto);
                                ViewBag.Latitud    = punto.coordenada.Latitude.ToString();
                                ViewBag.Longitud   = punto.coordenada.Longitude.ToString();
                                ViewBag.TextoLugar = punto.nombreDePOI;
                                ViewBag.Search     = "ok";
                            }
                            else
                            {
                                modeloVista.cgpsEncontrados.Add(punto);
                                ViewBag.Search = "ok";
                            }
                        }
                    }


                    if (resultados.Count == 0)
                    {
                        ViewBag.Search     = "error";
                        ViewBag.SearchText = "Disculpa, pero no encontramos ningún punto con esa palabra clave.";
                    }
                    else
                    {
                        Busqueda busqueda = new Busqueda(palabraBusqueda, resultados, DateTime.Today);
                        db.Busquedas.Add(busqueda);
                        db.SaveChanges();
                    }

                    return(View(modeloVista));
                }
            }
            catch (Exception ex)
            {
                Console.WriteLine(ex);
                return(View());
            }
        }