Example #1
0
        public async Task <ActionResult> Attempt(AttemptSurveyViewModel model)
        {
            var quiz = await db.Surveys.FindAsync(model.SurveyID);

            if (quiz == null || !quiz.IsActive)
            {
                return(HttpNotFound());
            }

            if (quiz.SQuestions.Count == 0)
            {
                return(HttpNotFound());
            }

            StudentSurvey studentQuiz = new StudentSurvey();

            studentQuiz.StudentID  = User.Identity.GetUserId();
            studentQuiz.Survey     = quiz;
            studentQuiz.StartedAt  = DateTime.Now;
            studentQuiz.IsActive   = true;
            studentQuiz.ModifiedOn = DateTime.Now;

            db.StudentSurveys.Add(studentQuiz);
            await db.SaveChangesAsync();

            model.StudentSurveyID = studentQuiz.ID;
            model.TotalQuestions  = quiz.SQuestions.Count;
            model.SQuestion       = quiz.SQuestions.Where(q => q.IsActive).FirstOrDefault();
            model.QuestionIndex   = 0;

            model.Options = new List <Option>();
            model.Options.AddRange(model.SQuestion.Options.Where(q => q.IsActive));
            model.Options.Shuffle();

            return(PartialView("SurveySQuestion", model));
        }
Example #2
0
        public async Task <ActionResult> AnswerSQuestion(AttemptSurveyViewModel model)
        {
            if (model.TimerExpired)
            {
                var studentQuiz = await db.StudentSurveys.FindAsync(model.StudentSurveyID);

                studentQuiz.CompletedAt = DateTime.Now;
                studentQuiz.ModifiedOn  = DateTime.Now;

                db.Entry(studentQuiz).State = System.Data.Entity.EntityState.Modified;
                await db.SaveChangesAsync();

                StudentSurveyViewModel studentQuizModel = new StudentSurveyViewModel();

                studentQuizModel.StudentSurvey = studentQuiz;
                studentQuizModel.TimerExpired  = model.TimerExpired;

                return(PartialView("AttemptSDetailsPartial", studentQuizModel));
            }
            else
            {
                var quiz = await db.Surveys.FindAsync(model.SurveyID);

                if (quiz == null || !quiz.IsActive)
                {
                    return(HttpNotFound());
                }

                var question = quiz.SQuestions.Find(q => q.ID == model.QuestionID);

                if (question == null || !question.IsActive)
                {
                    return(HttpNotFound());
                }

                var selectedOption = question.Options.Find(o => o.ID == model.SelectedOptionID);

                if (selectedOption == null || !selectedOption.IsActive)
                {
                    return(HttpNotFound());
                }

                AttemptedSQuestion attemptedQuestion = new AttemptedSQuestion();

                attemptedQuestion.SQuestion      = question;
                attemptedQuestion.SelectedOption = selectedOption;
                attemptedQuestion.AnswerValue    = model.AnswerValue;
                attemptedQuestion.AnsweredAt     = DateTime.Now;

                if (selectedOption.IsCorrect)
                {
                    attemptedQuestion.IsCorrect = true;
                }

                var studentQuiz = await db.StudentSurveys.FindAsync(model.StudentSurveyID);

                if (studentQuiz.AttemptedSQuestions == null)
                {
                    studentQuiz.AttemptedSQuestions = new List <AttemptedSQuestion>();
                }

                attemptedQuestion.IsActive   = true;
                attemptedQuestion.ModifiedOn = DateTime.Now;

                studentQuiz.AttemptedSQuestions.Add(attemptedQuestion);

                if (model.QuestionIndex == quiz.SQuestions.Count - 1) //this was the Last question
                {
                    studentQuiz.CompletedAt = DateTime.Now;
                }

                db.Entry(studentQuiz).State = System.Data.Entity.EntityState.Modified;
                await db.SaveChangesAsync();

                if (model.QuestionIndex != quiz.SQuestions.Where(q => q.IsActive).Count() - 1)
                {
                    model.TotalQuestions = quiz.SQuestions.Count;
                    model.SQuestion      = quiz.SQuestions.Where(q => q.IsActive).ElementAtOrDefault(model.QuestionIndex + 1);
                    model.QuestionIndex  = model.QuestionIndex + 1;

                    model.Options = new List <Option>();
                    model.Options.AddRange(model.SQuestion.Options.Where(o => o.IsActive));
                    model.Options.Shuffle();

                    return(PartialView("SurveySQuestion", model));
                }
                else //this was the Last question so display the result
                {
                    StudentSurveyViewModel studentQuizModel = new StudentSurveyViewModel();

                    studentQuizModel.StudentSurvey = studentQuiz;
                    studentQuizModel.TimerExpired  = model.TimerExpired;

                    //return PartialView("AttemptSDetailsPartial", studentQuizModel);
                    return(RedirectToAction("ThankYou", "HOme"));
                }
            }
        }