public ActionResult Dados(string clientID) { PercursoVM percVM = new PercursoVM(); percVM.ListaPercurosPercorridosVM = new List <PercursoPercorridoVM>(); percVM.ListaPercursosCriadosVM = new List <PercursoCriadoVM>(); percVM.ListaComentarios = new List <PercursoComentarioVM>(); var listaPercursos = db.PercursosPercorridos.Include(p => p.Percurso).Where(pr => pr.ClientID == clientID).ToList(); var listaPercursosCriados = db.PercursosCriados.Include(p => p.Percurso).Where(pc => pc.IDCliente == clientID).ToList(); var listaComentarios = db.PercursoComentarios.Include(p => p.Percurso).Where(c => c.CriadorPercurso == clientID).ToList(); float contaKms = 0; float contaHoras = 0; float media = 0; int nmrComentariosPorPercurso = 0; double numeroPercursosCriados = 0; int maiorNmrComentarios = 0; foreach (var item in listaPercursos) { PercursoPercorridoVM ppercVM = new PercursoPercorridoVM(); ppercVM.Nome = item.Percurso.Nome; ppercVM.ID = item.PercursoID; ppercVM.ClientID = item.ClientID; ppercVM.Distancia = item.Percurso.Distancia; ppercVM.KmsPercorridos += percVM.Distancia; contaKms += item.Percurso.Distancia; ViewBag.TotalKms = contaKms.ToString(); contaHoras += item.Percurso.DuracaoAproximada; ViewBag.TotalHoras = contaHoras.ToString(); media = contaKms / contaHoras; ViewBag.Media = media.ToString(); percVM.ListaPercurosPercorridosVM.Add(ppercVM); } var maior = 0; double numeroComentarios = 0; foreach (var item in listaComentarios) { PercursoComentarioVM pComentVM = new PercursoComentarioVM(); pComentVM.PercursoID = item.PercursoID; ViewBag.ID = pComentVM.PercursoID; pComentVM.NomePercurso = item.Percurso?.Nome ?? "Sem Correspondencia"; pComentVM.Classificacao = item.Classificacao; pComentVM.Comentario = item.Comentario; var listaComentPorPercurso = listaComentarios.Where(p => p.PercursoID == item.PercursoID).ToList(); if (listaComentPorPercurso.Count > 1 && numeroComentarios < listaComentarios.Count) { int somaPerc = 0; foreach (var perc in listaComentPorPercurso) { somaPerc += perc.Classificacao; nmrComentariosPorPercurso++; int classPerc = somaPerc / nmrComentariosPorPercurso; pComentVM.Classificacao = classPerc; if (nmrComentariosPorPercurso > maiorNmrComentarios) { maiorNmrComentarios = nmrComentariosPorPercurso; ViewBag.MaisComentarios = perc.Percurso.Nome; } } nmrComentariosPorPercurso = 0; numeroComentarios = nmrComentariosPorPercurso - 1; } numeroComentarios++; if (pComentVM.Classificacao > maior) { maior = pComentVM.Classificacao; ViewBag.Maior = maior.ToString(); ViewBag.Nome = pComentVM.NomePercurso; } if (numeroComentarios > listaComentarios.Count) { numeroComentarios--; } percVM.ListaComentarios.Add(pComentVM); } foreach (var item in listaPercursosCriados) { PercursoCriadoVM pCriadoVM = new PercursoCriadoVM(); pCriadoVM.IDCliente = item.IDCliente; pCriadoVM.NomeCliente = item.NomeCliente; pCriadoVM.PercursoID = item.PercursoID; pCriadoVM.NomePercurso = item.Percurso.Nome; numeroPercursosCriados++; percVM.ListaPercursosCriadosVM.Add(pCriadoVM); } double percentagem = (listaComentarios.Count / numeroPercursosCriados) * 100; ViewBag.Percentagem = percentagem.ToString(); return(View(percVM)); }
// GET: Percursos/Details/5 //[Authorize(Roles = "Supervisor,Admin")] public ActionResult Details(int?id) { if (id == null) { return(new HttpStatusCodeResult(HttpStatusCode.BadRequest)); } Percurso percurso = db.Percursos.Where(p => p.ID == id). Include("POIs").Include("FotoPercursos").Include("PercursoComentarios").Include("Especies").FirstOrDefault(); PercursosCriados percCriado = db.PercursosCriados.Where(pc => pc.PercursoID == id).FirstOrDefault(); //PercursosPercorridos percursosPercorridos = db.PercursosPercorridos.Include(p => p.Percurso).Where(ppc => ppc.PercursoID == id).FirstOrDefault(); PercursoVM percursoVM = new PercursoVM(); percursoVM.ListaPOIVM = new List <PoiVM>(); percursoVM.ListaFotoPercursoVM = new List <FotoPercursoVM>(); percursoVM.ListaFotoPoiVM = new List <FotoPoiVM>(); percursoVM.ListaComentarios = new List <PercursoComentarioVM>(); percursoVM.ListaEspeciesVM = new List <EspecieViewModel>(); percursoVM.ID = percurso.ID; percursoVM.Nome = percurso.Nome; percursoVM.Descricao = percurso.Descricao; percursoVM.Distancia = percurso.Distancia; percursoVM.Duracao = percurso.DuracaoAproximada; percursoVM.Dificuldade = percurso.Dificuldade; percursoVM.Tipologia = percurso.Tipologia; percursoVM.ClientID = percCriado.IDCliente; percursoVM.NomeCliente = percCriado.NomeCliente; percursoVM.Latitude = percurso.GPS_Lat_Inicio; percursoVM.Longitude = percurso.GPS_Long_Inicio; percursoVM.Kml = percurso.KmlPath; foreach (var poi in percurso.POIs) { PoiVM poiVM = new PoiVM(); poiVM.Nome = poi.Nome; poiVM.Descricao = poi.Descricao; poiVM.Latitude = poi.GPS_Lat; poiVM.Longitude = poi.GPS_Long; percursoVM.ListaPOIVM.Add(poiVM); //FotoPoiVM fotoPoiVM = new FotoPoiVM(); //fotoPoiVM.Caminho = poi.FotoPoi.Caminho; //percursoVM.ListaFotoPoiVM.Add(fotoPoiVM); } foreach (var foto in percurso.FotoPercursos) { FotoPercursoVM fotoVM = new FotoPercursoVM(); fotoVM.ID = foto.ID; fotoVM.GPS_Lat = foto.GPS_Lat; fotoVM.GPS_Lng = foto.GPS_Long; fotoVM.Caminho = foto.Caminho; percursoVM.ListaFotoPercursoVM.Add(fotoVM); } foreach (var comentario in percurso.PercursoComentarios) { PercursoComentarioVM percComent = new PercursoComentarioVM(); percComent.ID = comentario.ID; percComent.Classificacao = comentario.Classificacao; percComent.UserName = comentario.UserName; percComent.SomaRating += comentario.Classificacao; //ViewBag.SomaRating = percComent.SomaRating; percComent.ContRating++; //ViewBag.ContRating = percComent.ContRating; percComent.Comentario = comentario.Comentario; percComent.DataHora = comentario.DataHora; percursoVM.ListaComentarios.Add(percComent); } foreach (var espec in percurso.Especies) { EspecieViewModel especVM = new EspecieViewModel(); especVM.ID = espec.ID; especVM.Nome = espec.Nome; percursoVM.ListaEspeciesVM.Add(especVM); } var ratings = percursoVM.ListaComentarios; if (ratings.Count() > 0) { var ratingSum = ratings.Sum(d => d.Classificacao); ViewBag.SomaRating = ratingSum; var ratingCount = ratings.Count(); ViewBag.ContRating = ratingCount; var classTotal = ratingSum / ratingCount; percursoVM.Classificacao = classTotal; } else { ViewBag.SomaRating = 0; ViewBag.ContRating = 0; } if (percurso == null) { return(HttpNotFound()); } return(View(percursoVM)); }