// GET: Roteiros/Create
        public ActionResult Create()
        {
            CreateEditRoteiroViewModel model = new CreateEditRoteiroViewModel();

            model.Pontos = db.PontosInteresse.ToList().Where(p => p.Visivel.Equals(true));
            return(View(model));
        }
        public ActionResult Create(CreateEditRoteiroViewModel model)
        {
            ModelState.Remove("model.Roteiro.Id");

            if (model.PontosSeleccionados == null)
            {
                ModelState.AddModelError("", "Tem que seleccionar pelo menos um ponto de interesse.");
                model.Pontos = db.PontosInteresse.ToList().Where(p => p.Visivel.Equals(true));
                return(View(model));
            }
            if (ModelState.IsValid)
            {
                var roteiro = model.Roteiro;
                roteiro.PontosInteresse = new List <PontoRoteiro>();
                foreach (var item in model.PontosSeleccionados)
                {
                    roteiro.PontosInteresse.Add(new PontoRoteiro
                    {
                        Posicao = model.PontosSeleccionados.IndexOf(item) + 1,
                        Ponto   = db.PontosInteresse.FirstOrDefault(i => i.Id == item.IdPonto)
                    });;
                }



                db.Roteiroes.Add(model.Roteiro);
                db.SaveChanges();
                return(RedirectToAction("Index"));
            }

            return(View(model));
        }
        public ActionResult Edit(CreateEditRoteiroViewModel model)
        {
            if (ModelState.IsValid)
            {
                var oldRoteiro = db.Roteiroes.Find(model.Roteiro.Id);

                foreach (var relacao in oldRoteiro.PontosInteresse.ToList())
                {
                    db.PontoRoteiro.Remove(relacao);
                }

                foreach (var ponto in model.PontosSeleccionados.OrderBy(p => p.Posicao))
                {
                    oldRoteiro.PontosInteresse.Add(new PontoRoteiro
                    {
                        Posicao = ponto.Posicao + 1,
                        Ponto   = db.PontosInteresse.FirstOrDefault(i => i.Id == ponto.IdPonto)
                    });
                }

                oldRoteiro.Nome      = model.Roteiro.Nome;
                oldRoteiro.Descricao = model.Roteiro.Descricao;

                db.SaveChanges();

                return(RedirectToAction("Index"));
            }
            return(View(model));
        }
        public ActionResult Edit(int?id)
        {
            if (id == null)
            {
                return(new HttpStatusCodeResult(HttpStatusCode.BadRequest));
            }
            Roteiro roteiro = db.Roteiroes.Find(id);

            if (roteiro == null)
            {
                return(HttpNotFound());
            }
            var model = new CreateEditRoteiroViewModel();

            model.PontosSeleccionados = new List <RoteiroPontoModel>();
            model.Roteiro             = roteiro;
            model.Pontos          = db.PontosInteresse.ToList();
            model.PontosGuardados = new List <PontosGuardados>();
            foreach (var item in db.PontoRoteiro.Where(p => p.Roteiro.Id == id))
            {
                var pt = new PontosGuardados()
                {
                    IdPonto = item.Ponto.Id,
                    Nome    = item.Ponto.Nome
                };
                model.PontosGuardados.Add(pt);
            }

            //var rotPontosModel = new RoteiroPontoModel();
            //foreach (var item in roteiro.PontosInteresse)
            //{
            //    rotPontosModel.IdPonto = item.Ponto.Id;
            //    rotPontosModel.Posicao = item.Posicao;
            //    var result = model.PontosSeleccionados.Append(rotPontosModel);
            //}

            return(View(model));

            //return RedirectToAction("Index");
        }