public async Task <ActionResult> Details(int id)
        {
            Categoria categoria = await db.Categoria.FindAsync(id);

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

            //-----------------------------Campos adicionales Inicio
            List <CampoValor> campos = new List <CampoValor>();
            var Campos = await db.Campo.Where(m => m.NivelPadre.id == categoria.Nivel.id || m.TodaCategoria == true).ToListAsync();

            foreach (Campo campon in Campos)
            {
                CampoValor cp = new CampoValor();
                cp.Campo = campon;
                cp.Valor = await db.ValorCampo.Where(m => m.CampoPadre.Id == campon.Id && m.CategoriaPadre.id == categoria.id).FirstOrDefaultAsync();

                campos.Add(cp);
            }
            ViewBag.campos = campos;
            //-----------------------------Campos adicionales Fin

            return(View(categoria));
        }
        public async Task <ActionResult> Edit(int id)
        {
            Categoria categoria = await db.Categoria.FindAsync(id);

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

            List <SelectListItem> CategoriaLista = new List <SelectListItem>();
            var CategoriaListadb = await db.Categoria.Where(n => n.id != id).ToListAsync();

            foreach (var itemn in CategoriaListadb)
            {
                CategoriaLista.Add(new SelectListItem()
                {
                    Text = itemn.numero + " " + itemn.nombre, Value = itemn.id.ToString()
                });
            }
            ViewBag.Categorias   = new SelectList(CategoriaLista, "Value", "Text", categoria.idCategoria);
            ViewBag.Responsables = new SelectList(await db.Responsable.ToListAsync(), "Id", "Nombre", categoria.IdResponsable);
            ViewBag.Niveles      = new SelectList(await db.Nivel.ToListAsync(), "id", "nombre", categoria.idNivel);

            //-----------------------------Campos adicionales Inicio
            List <CampoValor> campos = new List <CampoValor>();

            var Campos = await db.Campo.Where(m => m.NivelPadre.id == categoria.Nivel.id || m.TodaCategoria == true).ToListAsync();

            foreach (Campo campon in Campos)
            {
                CampoValor cp = new CampoValor();
                cp.Campo        = campon;
                cp.Campo.Nombre = cp.Campo.Nombre + "Add";
                cp.Valor        = await db.ValorCampo.Where(m => m.CampoPadre.Id == campon.Id && m.CategoriaPadre.id == categoria.id).FirstOrDefaultAsync();

                if (cp.Valor != null)
                {
                    cp.Valor.CategoriaPadre = null;
                }
                campos.Add(cp);
            }

            HttpContext.Session.SetComplex("Campos", campos);
            ViewBag.Campos = campos;
            //-----------------------------Campos adicionales Fin

            return(View(categoria));
        }
        public async Task <ActionResult> Resumen(int ID)
        {
            EjecucionCategoriaController controladorEjecuciones = new EjecucionCategoriaController(db, userManager);
            NotasController          controlnotas         = new NotasController(db, userManager);
            ConfiguracionsController controlconfigutacion = new ConfiguracionsController(db, userManager);
            Configuracion            config = await controlconfigutacion.Get();

            EvaluacionsController controlEvaluacion = new EvaluacionsController(db);


            List <Object>             respuesta        = new List <object>();
            List <EjecucionCategoria> listaEjecuciones = new List <EjecucionCategoria>();


            var categoria = await getFromId(ID);  //retoma la categoria por id desde la base de datos

            //if (categoria == null) { return new HttpStatusCodeResult(404, "no se encuentran categoria"); }  //error generado si no se encuentra la categoria

            if (config.PonderacionTipo == "PonderacionAbsoluta")
            {
                PonderacionAbsoluta pond = new PonderacionAbsoluta(db, userManager);
                categoria.Ponderador = await pond.CategoriaPonderador(ID);
            }

            int notasAbiertas = await controlnotas.NumeroNotasEstadoCategoriaId(ID, "Abierta");

            int notasCerradas = await controlnotas.NumeroNotasEstadoCategoriaId(ID, "Cerrada");

            ViewBag.notasAbiertas = notasAbiertas;
            ViewBag.notasCerradas = notasCerradas;

            listaEjecuciones = await controladorEjecuciones.GetFromCategoria(categoria.id);

            //======================================== obtiene los semanoforos===============================
            List <Evaluacion> evaluaciones = await controlEvaluacion.Get(categoria.id, "Categotia");

            var semaforos = controlEvaluacion.SetEvaluacionCategoria(listaEjecuciones, evaluaciones);

            //======================================== obtiene los semanoforos===============================
            object[] CategoriaConejecuciones = { categoria, listaEjecuciones, semaforos };
            respuesta.Add(CategoriaConejecuciones);


            ViewBag.categorias = respuesta;

            //-----------------------------Campos adicionales Inicio
            List <CampoValor> campos = new List <CampoValor>();
            var Campos = db.Campo.Where(m => m.NivelPadre.id == categoria.Nivel.id || m.TodaCategoria == true).ToList();

            foreach (Campo campon in Campos)
            {
                CampoValor cp = new CampoValor();
                cp.Campo = campon;
                cp.Valor = db.ValorCampo.Where(m => m.CampoPadre.Id == campon.Id && m.CategoriaPadre.id == categoria.id).FirstOrDefault();
                campos.Add(cp);
            }
            ViewBag.campos = campos;
            //-----------------------------Campos adicionales Fin

            return(View(respuesta));
        }