private List<QuestionDetails> GetQuestionDetailList(IList<TestHistory> historyList, TestResults testResult) { var questionsList= new List<QuestionDetails>(); foreach (var testHistory in historyList) { var question = testResult.Test.Questions.FirstOrDefault(n => n.Number == testHistory.Number); if (question != null) { if (question.TestType == DataConst.CheckedType || question.TestType == DataConst.RadioType) { var questionDetails = new CheckedQuestion { Type = question.TestType, QuestionText = question.Text, UserNumber = DataConst.UserCheckNumber + historyList.IndexOf(testHistory), RealNumber = DataConst.RealCheckNumber + historyList.IndexOf(testHistory), VariantsList = new List<CheckedVariant>() }; var listVariant = ((QuestionWithVariants)question).VariantAnswers.ToList(); foreach (var variantAnswer in listVariant) { var variant = new CheckedVariant { Text = variantAnswer.Text }; var index = listVariant.IndexOf(variantAnswer); variant.RealAnswer = question.Answer[index] == '1'; variant.UserAnswer = false; if (testHistory.UserAnswer != null) { if (testHistory.UserAnswer.Count() >= index) { variant.UserAnswer = testHistory.UserAnswer[index] == '1'; } } questionDetails.VariantsList.Add(variant); } questionsList.Add(questionDetails); } } } return questionsList; }
private void CalculateResult(int userId, Action action, UsersContext db) { var testResult = new TestResults { User = db.UserProfiles.FirstOrDefault(u => u.UserId == userId), Action = action, Test = action.Test, DatePassing = action.DatePassing }; double pointSum = 0; foreach (var test in action.TestsInProgres) { if (test.UserAnswer != null) { switch (test.Question.TestType) { case DataConst.CheckedType: { pointSum += (CalculateChecked(test)); break; } case DataConst.RadioType: { pointSum += (CalculateRadio(test)); break; } } } } testResult.PercentTaken = Convert.ToInt32((pointSum/action.TestsInProgres.Count)*100); testResult.Passed = testResult.PercentTaken >= DataConst.PercentLimit; db.TestsResults.Add(testResult); db.SaveChanges(); }