public ActionResult RespondeTest(int?idTest)
        {
            if (idTest == null)
            {
                return(HttpNotFound());
            }

            Test test = db.Tests.Find(idTest);

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

            TestEstudiante  te   = new TestEstudiante();
            ApplicationUser user = db.Users.FirstOrDefault(m => User.Identity.Name == m.UserName);

            if (user == null)
            {
                return(Content("Error"));
            }

            return(View(test));
        }
        public ActionResult ResponderPreguntas(int?idTest)
        {
            Test test = db.Tests.Find(idTest);

            if (test == null)
            {
                return(Content("error: test no encontrado"));
            }

            string userid = db.Users.Where(m => m.UserName == User.Identity.Name).ToList()[0].Id;
            IEnumerable <TestEstudiante> lista = db.TestsEstudiantes.Where(m => m.Id == userid && m.TestID == idTest);
            TestEstudiante test_est            = new TestEstudiante();

            if (lista.Count() == 0)
            {
                test_est.Id     = userid;
                test_est.TestID = (int)idTest;

                db.TestsEstudiantes.Add(test_est);
                db.SaveChanges();
            }

            ResponderTestViewModel resp_test = new ResponderTestViewModel();

            resp_test.test = test;
            if (test.TestPreguntas.Count == 0)
            {
                return(Content("error: el test no tiene preguntas"));
            }

            // seleccionar la pregunta que toca en el momento
            List <TestPregunta> preguntas = test.TestPreguntas.ToList();

            string estudianteID = db.Users.FirstOrDefault(m => m.UserName == User.Identity.Name).Id;
            int    i            = 0;

            while (i < preguntas.Count)
            {
                while (i != preguntas.Count && (db.RespuestasEscritas.ToList().Where(m => m.PreguntaID == preguntas[i].PreguntaID &&
                                                                                     m.TestEstudiante.Id == estudianteID && m.TestEstudiante.TestID == idTest).Count() != 0 ||
                                                db.RespuestasMarcadas.ToList().Where(m => m.Respuesta.PreguntaID == preguntas[i].PreguntaID &&
                                                                                     m.TestEstudiante.Id == estudianteID && m.TestEstudiante.TestID == idTest).Count() != 0))
                {
                    i++;
                }

                if (i == preguntas.Count)
                {
                    break;
                }
                int idP = preguntas[i].PreguntaID;
                var etp = db.EstudiantePreguntaTest.FirstOrDefault(m => m.IdEstudiante == estudianteID && m.PreguntaID == idP && m.TestID == idTest);
                if (etp == null)
                {
                    break;
                }

                else if (!etp.TiempoAgotado)
                {
                    break;
                }

                else
                {
                    i++;
                }
            }
            if (i == preguntas.Count)
            {
                return(RedirectToAction("Calificaciones", new { idEstudiante = estudianteID }));
            }

            resp_test.pregunta = preguntas[i].Pregunta;
            var estudianteTestPregunta = db.EstudiantePreguntaTest.FirstOrDefault(m => m.TestID == idTest && m.IdEstudiante == estudianteID && m.PreguntaID == resp_test.pregunta.PreguntaID);

            if (estudianteTestPregunta == null)
            {
                estudianteTestPregunta = new EstudiantePreguntaTest()
                {
                    TestID        = (int)idTest,
                    IdEstudiante  = estudianteID,
                    PreguntaID    = resp_test.pregunta.PreguntaID,
                    Inicio        = DateTime.Now,
                    TiempoAgotado = false
                };

                db.EstudiantePreguntaTest.Add(estudianteTestPregunta);
                db.SaveChanges();
            }


            int tiempoPrevio = 0;

            if (resp_test.pregunta.Introduccion)
            {
                tiempoPrevio = (int)resp_test.pregunta.TiempoPrevio;
            }

            resp_test.TiempoRestante = resp_test.pregunta.Tiempo + tiempoPrevio - DateTime.Now.Subtract(estudianteTestPregunta.Inicio).TotalSeconds;


            if (resp_test.TiempoRestante <= 0)
            {
                var e = db.EstudiantePreguntaTest.FirstOrDefault(m => m.TestID == idTest && m.IdEstudiante == estudianteID && m.PreguntaID == resp_test.pregunta.PreguntaID);
                e.TiempoAgotado   = true;
                db.Entry(e).State = EntityState.Modified;
                db.SaveChanges();

                return(View("TiempoAgotado", idTest));
            }
            if (resp_test.TiempoRestante - resp_test.pregunta.Tiempo >= 0)
            {
                return(View("Introduccion", resp_test));
            }

            return(View(resp_test));
        }
        public ActionResult ResponderPreguntas(int?idPregunta, int?idTest, string respuesta_actual, IEnumerable <int> idRespuestas)
        {
            string userid = db.Users.Where(m => m.UserName == User.Identity.Name).ToList()[0].Id;
            IEnumerable <TestEstudiante> lista = db.TestsEstudiantes.Where(m => m.Id == userid && m.TestID == idTest);
            TestEstudiante test_est            = new TestEstudiante();

            if (lista.Count() == 0)
            {
                return(Content("Error"));
            }
            else
            {
                test_est = lista.ToList().First();
                if (test_est == null)
                {
                    return(Content("TestEstudiante null"));
                }
            }

            if (idRespuestas != null)
            {
                if (idRespuestas.Count() > 1)
                {
                    return(Content("Error: Solo se puede marcar una respuesta"));
                }

                int idrespuesta = idRespuestas.First();

                RespuestaMarcada respuesta = new RespuestaMarcada();

                respuesta.TestEstudianteID = test_est.TestEstudianteID;
                respuesta.RespuestaID      = idrespuesta;

                var respuesta_ = db.Respuestas.Find(idrespuesta);
                if (respuesta_ == null)
                {
                    return(Content("Esa Respuesta no existe"));
                }

                if (db.RespuestasMarcadas.ToList().Where(m => m.Respuesta.PreguntaID == respuesta_.PreguntaID &&
                                                         m.TestEstudianteID == respuesta.TestEstudianteID).Count() > 0)
                {
                    return(Content("Ya has respondido esta pregunta"));
                }

                db.RespuestasMarcadas.Add(respuesta);
                db.SaveChanges();
            }
            else
            {
                RespuestaEscrita respuesta = new RespuestaEscrita();

                respuesta.PreguntaID       = (int)idPregunta;
                respuesta.TestEstudianteID = test_est.TestEstudianteID;
                respuesta.Respuesta        = respuesta_actual;

                if (db.RespuestasEscritas.ToList().Where(m => m.PreguntaID == respuesta.PreguntaID &&
                                                         m.TestEstudianteID == respuesta.TestEstudianteID).Count() > 0)
                {
                    return(Content("Ya has respondido esta pregunta"));
                }

                db.RespuestasEscritas.Add(respuesta);
                db.SaveChanges();
            }

            ResponderTestViewModel resp_test = new ResponderTestViewModel();

            //Buscar la proxima pregunta

            /*Test test_actual = db.Tests.Where(m => m.TestID == (int)idTest).ToList()[0];
             * int i = 0;
             * while (test_actual.TestPreguntas.ToList()[i++].PreguntaID != idPregunta) { }
             *
             * if (i == test_actual.TestPreguntas.Count)
             *  return RedirectToAction("Calificaciones", new { idEstudiante = userid});
             *
             * Pregunta prox_pregunta = test_actual.TestPreguntas.ToList()[i].Pregunta;
             * resp_test.pregunta = prox_pregunta;
             * resp_test.test = test_actual;
             *
             * return View(resp_test);*/
            return(RedirectToAction("ResponderPreguntas", new { idTest = idTest }));
        }