// GET: Alumno/View/id
        public ActionResult View(int id)
        {
            if (id == null)
            {
                return(new HttpStatusCodeResult(HttpStatusCode.BadRequest));
            }
            var extra = ExtraDataAccess.ObtenerExtras(db).Include(ex => ex.CategoriaExtra).Include(ex => ex.SubTema.Tema).FirstOrDefault(b => b.ExtraId == id);

            if (extra == null)
            {
                return(HttpNotFound());
            }

            ExtrasViewViewModel viewModel = new ExtrasViewViewModel();

            viewModel.Extra = extra;
            return(View(viewModel));
        }
        // GET: Alumno/Extras
        public ActionResult Index(int id)
        {
            if (id == null)
            {
                return(new HttpStatusCodeResult(HttpStatusCode.BadRequest));
            }

            var subtema = SubTemaDataAccess.ObtenerSubTemas(db).Include(s => s.Tema).SingleOrDefault(s => s.SubTemaId == id);

            if (subtema == null)
            {
                return(HttpNotFound());
            }
            if (!ComprobarAccesoSubTema(id))
            {
                return(RedirectToAction("SinAcceso", "Home", new { Area = "Alumno" }));
            }

            ExtrasIndexViewModel viewModel = new ExtrasIndexViewModel();

            viewModel.categorias = db.CategoriaExtras.ToList();
            viewModel.Subtema    = subtema;

            viewModel.ExtraDesbloqueadoEstadisticas = new List <ExtraDesbloqueadoEstadistica>();
            foreach (var categoria in viewModel.categorias)
            {
                var extras  = ExtraDataAccess.ObtenerExtras(db).Where(ex => ex.CategoriaExtraId == categoria.CategoriaExtraId && ex.SubTemaId == id).Select(ex => ex.ExtraId).ToList();
                int nExtras = extras.Count;
                var userId  = ((ClaimsIdentity)User.Identity).FindFirst("UserId").Value;
                int nExtrasDesbloqueados = db.ExtraDesbloqueados.Count(ex => ex.AlumnoId == userId && extras.Contains(ex.ExtraId));

                double porcentaje = (double)nExtrasDesbloqueados / nExtras * 100;
                ExtraDesbloqueadoEstadistica extraEstadistica = new ExtraDesbloqueadoEstadistica()
                {
                    CateGoriaExtraId = categoria.CategoriaExtraId,
                    NDesbloqueados   = nExtrasDesbloqueados,
                    NExtras          = nExtras,
                    Porcentaje       = (int)porcentaje
                };
                viewModel.ExtraDesbloqueadoEstadisticas.Add(extraEstadistica);
            }

            return(View(viewModel));
        }
        // GET: Alumno/Categoria/id
        public ActionResult Categoria(int id, int subtemaId)
        {
            if (id == null)
            {
                return(new HttpStatusCodeResult(HttpStatusCode.BadRequest));
            }
            var categoria = db.CategoriaExtras.FirstOrDefault(b => b.CategoriaExtraId == id);

            if (categoria == null)
            {
                return(HttpNotFound());
            }


            if (subtemaId == null)
            {
                return(new HttpStatusCodeResult(HttpStatusCode.BadRequest));
            }

            var subtema = SubTemaDataAccess.ObtenerSubTemas(db).Include(s => s.Tema).SingleOrDefault(s => s.SubTemaId == subtemaId);

            if (subtema == null)
            {
                return(HttpNotFound());
            }
            if (!ComprobarAccesoSubTema(subtemaId))
            {
                return(RedirectToAction("SinAcceso", "Home", new { Area = "Alumno" }));
            }

            ExtrasCategoriaViewModel viewModel = new ExtrasCategoriaViewModel();

            viewModel.CategoriaExtra = categoria;
            viewModel.Subtema        = subtema;
            viewModel.extras         = ExtraDataAccess.ObtenerExtras(db).Where(ex => ex.CategoriaExtraId == id && ex.SubTemaId == subtemaId).OrderBy(ex => ex.Orden).ToList();

            var extras = viewModel.extras.Select(ex => ex.ExtraId).ToList();

            var userId = ((ClaimsIdentity)User.Identity).FindFirst("UserId").Value;

            viewModel.extrasDesbloqueados = db.ExtraDesbloqueados.Where(ex => ex.AlumnoId == userId && extras.Contains(ex.ExtraId)).Select(ex => ex.ExtraId).ToList();

            var siguienteExtra = viewModel.extras.Where(ex => !viewModel.extrasDesbloqueados.Contains(ex.ExtraId)).OrderBy(ex => ex.Orden).FirstOrDefault();

            if (siguienteExtra != null)
            {
                int siguienteId = siguienteExtra.ExtraId;
                viewModel.siguienteId = siguienteId;
            }
            else
            {
                viewModel.siguienteId = 0;
            }

            int nExtras = extras.Count;
            int nExtrasDesbloqueados = viewModel.extrasDesbloqueados.Count;

            double porcentaje = (double)nExtrasDesbloqueados / nExtras * 100;
            ExtraDesbloqueadoEstadistica extraEstadistica = new ExtraDesbloqueadoEstadistica()
            {
                CateGoriaExtraId = categoria.CategoriaExtraId,
                NDesbloqueados   = nExtrasDesbloqueados,
                NExtras          = nExtras,
                Porcentaje       = (int)porcentaje
            };

            viewModel.ExtraDesbloqueadoEstadistica = extraEstadistica;


            return(View(viewModel));
        }