Example #1
0
        public ActionResult LoadQuizSession(int skillId, int incQIndex = 0)
        {
            this.userQuiz = GetUserQuizBySkillId(skillId);

            // No quiz for such level on this skill for this user...
            if (userQuiz == null)
            {
                return(RedirectToAction("QuizSelection", "Quiz"));
            }


            Task <string> task;
            String        responseStr;

            if (incQIndex != 0)
            {
                this.userQuiz.currentQuestionIndex = this.userQuiz.currentQuestionIndex + incQIndex;
                task = ReadAsStringAsync("PIDEV/gestionQuiz/updateQuestionIndex/" + this.userQuiz.id + "/" + this.userQuiz.currentQuestionIndex);
                task.Wait();
                responseStr = task.Result;
            }

            QsessionVm.selectedQuiz = userQuiz;
            QsessionVm.skillId      = skillId;

            int?cqi = this.userQuiz.currentQuestionIndex;

            // Get userResponses
            //this.userQuiz.currentQuestionIndex = this.userQuiz.currentQuestionIndex + incQIndex;
            task = ReadAsStringAsync(
                "PIDEV/gestionQuiz/getUserQuestionResponses/"
                + this.userId + "/" + (int)this.userQuiz.quiz.questions.ElementAt(cqi != null ? cqi.Value : 0).id);
            task.Wait();
            responseStr = task.Result;
            List <userquizresponse> uqrs = JsonConvert.DeserializeObject <List <userquizresponse> >(responseStr);

            QsessionVm.userResponses = uqrs;

            for (int i = 0; i < uqrs.Count(); ++i)
            {
                QsessionVm.selectedQuiz.quiz.questions.ElementAt(cqi != null ? cqi.Value : 0).responses.ElementAt(i).isChecked = uqrs[i].isChecked;
            }

            // Setup has next & has previous buttons
            QsessionVm.HasNext     = this.userQuiz.currentQuestionIndex + 1 < this.userQuiz.quiz.questions.Count();
            QsessionVm.HasPrevious = this.userQuiz.currentQuestionIndex != 0;


            return(View("QuizSession", QsessionVm));
        }
Example #2
0
        private userquiz GetUserQuizBySkillId(int skillId)
        {
            skillId = 1;

            //get QuizId
            Task <string> task = ReadAsStringAsync("PIDEV/gestionQuiz/quiz/" + skillId);

            task.Wait();
            string      responseStr = task.Result;
            List <quiz> Quizzes     = JsonConvert.DeserializeObject <List <quiz> >(responseStr);

            //get userSkill
            task = ReadAsStringAsync("PIDEV/gestionQuiz/userSkill/" + skillId + "/" + userId);
            task.Wait();
            responseStr = task.Result;
            userskill userSkill = JsonConvert.DeserializeObject <userskill>(responseStr);

            // getQuizOfSkillWithLevel
            task = ReadAsStringAsync("PIDEV/gestionQuiz/quizBySkillAndLevel/" + skillId + "/" + userSkill.level + 1);
            task.Wait();
            responseStr = task.Result;


            quiz quiz = JsonConvert.DeserializeObject <quiz>(responseStr);

            if (quiz == null)
            {
                return(null);
            }

            long quizId = quiz.id;

            // Test on quizInfo nullability, because they might don't have a quiz with such level (like last level)

            //get relevant quiz
            // this.quizInfo = Quizzes.ElementAt(userSkill.level-1);



            //get userQuiz
            task = ReadAsStringAsync("PIDEV/gestionQuiz/quiz/" + quizId + "/" + userId);
            task.Wait();
            responseStr = task.Result;
            userquiz userQuiz = JsonConvert.DeserializeObject <userquiz>(responseStr);

            return(userQuiz);
        }
Example #3
0
        public ActionResult FinishQuiz(int skillId)
        {
            this.userQuiz = GetUserQuizBySkillId(skillId);

            Task <string> task;
            String        responseStr;

            QsessionVm.selectedQuiz = userQuiz;
            QsessionVm.skillId      = skillId;

            float correctQuestionsCount = 0;
            float questionsCount        = this.userQuiz.quiz.questions.Count();

            for (int qi = 0; qi < questionsCount; ++qi)
            {
                task = ReadAsStringAsync(
                    "PIDEV/gestionQuiz/getUserQuestionResponses/"
                    + this.userId + "/" + (int)this.userQuiz.quiz.questions.ElementAt(qi).id);
                task.Wait();
                responseStr = task.Result;
                List <userquizresponse> uqrs = JsonConvert.DeserializeObject <List <userquizresponse> >(responseStr);
                QsessionVm.userResponses = uqrs;

                bool isCorrect = true;

                for (int ri = 0; ri < uqrs.Count; ++ri)
                {
                    if (QsessionVm.selectedQuiz.quiz.questions.ElementAt(qi).responses.ElementAt(ri).isCorrect != uqrs[ri].isChecked)
                    {
                        isCorrect = false;
                        break;
                    }
                }

                if (isCorrect)
                {
                    ++correctQuestionsCount;
                }
            }

            float correctAnswersPercentage = (int)(correctQuestionsCount / questionsCount) * 100;

            int newScore = (int)correctAnswersPercentage;

            task = ReadAsStringAsync("PIDEV/gestionQuiz/updateScore/" + this.userQuiz.quiz.id + "/" + userId + "/" + newScore);
            task.Wait();
            responseStr = task.Result;

            //updateScore/{quizId}/{userId}/{score}

            // Check if this percentage is enough to pass the quiz.
            ViewBag.score         = 0.0f;
            ViewBag.requiredScore = this.minRequiredScore;

            if (newScore >= minRequiredScore)
            {
                // Now, depending on the user type, we update skill level...

                // Meaning an employee
                if (true)
                {
                    task = ReadAsStringAsync("PIDEV/gestionQuiz/levelUpUserSkill/" + userId + "/" + skillId);
                    task.Wait();
                    responseStr = task.Result;

                    ViewBag.score = newScore;

                    return(View(QsessionVm));
                    //
                }
                else // Else, a candidate
                {
                    // Use calendar to schedule an meet-up
                }
            }

            return(View(QsessionVm));
        }