// // GET: /twtTestResults/Search/CHPA/VZU-... public ActionResult TestResults(string prodT = "", string modelN = "", string filter = "") { var model = new AteDataTopViewModel(); //var model = new SearchModel(); var testsModel = new TestResultsModel(); ViewBag.getResetPath = "testsData/TestResults"; ViewBag.getProdType = prodT; ViewBag.getModName = modelN; ViewBag.getFilter = filter; //Do this if product type was selected if (prodT != "") { //limit model names related to product type only. //model.modelNames(prodT); model.searchModel.modelNames(prodT); if (modelN != "") { model.searchModel.getTubes(modelN); model.searchModel.parseFilter(filter); model.testResModel.generateTestsResults(prodT, modelN, model.searchModel.testName, model.searchModel.testType, model.searchModel.tubeName, model.searchModel.options); } } else { // get all product types and model names model.searchModel.allProdTypesModelNames(); } return(View(model)); }
public async Task <IActionResult> Results(int id, int?searchId) { ViewData["searchId"] = searchId; var user = await _userManager.GetUserAsync(HttpContext.User); var test = await _context.Tests.SingleOrDefaultAsync(t => t.Id == id); var testResults = _context.TestResults.Where(tr => tr.Test == test && tr.IsCompleted) .Include(tr => tr.Answers) .Include(tr => tr.CompletedByUser); if (searchId != null) { testResults = testResults.Where(tr => tr.CompletedByUserId == searchId).Include(tr => tr.Answers) .Include(tr => tr.CompletedByUser); } var model = new TestResultsModel { Results = await testResults .AsNoTracking() .ToListAsync(), Test = test }; return(View(model)); }
protected override void OnBindingContextChanged() { _results = (TestResultsModel)BindingContext; if (_results != null) { _answer.Text = $"{_results.Number}. {_results.QuestionTitle}"; if (_results.Points == 0) { _boxView.Color = Color.FromHex(Theme.Current.TestResultsNotCorrectAnswerColor); } else { _boxView.Color = Color.FromHex(Theme.Current.TestResultsCorrectAnswerColor); } } base.OnBindingContextChanged(); }
public async Task <IActionResult> Finish(string quizId, PresentExamModel formModel, [FromServices] IConfiguration configuration, [FromServices] IMessagingApi messaging, [FromServices] IDatabaseApi database) { var quiz = store.Quizzes.FirstOrDefault(f => f.Id.Equals(quizId, StringComparison.OrdinalIgnoreCase) || f.Title.Replace(" ", "-").Equals(quizId, StringComparison.OrdinalIgnoreCase)); if (quiz == null) { logger.LogWarning("Can't find exam with id " + quizId); return(View("Error", new ErrorViewModel { RequestId = Activity.Current?.Id ?? HttpContext.TraceIdentifier })); } if (!ModelState.IsValid) { return(BadRequest(ModelState)); } var numWrong = 0; var incorrect = new List <string>(); foreach (var question in quiz.Questions) { if (Request.Form.TryGetValue(question.Id + "[]", out StringValues postedAnswer)) { // user answered the question var expected = question.Answers.Where(f => f.Correct).Select(f => f.Id.ToLowerInvariant()).ToArray(); var actual = postedAnswer.Select(f => f.ToLowerInvariant()).ToArray(); if (expected.Length != actual.Length) { incorrect.Add(question.Text); numWrong++; continue; } for (int i = 0; i < expected.Length; i++) { if (expected[i] != actual[i]) { incorrect.Add(question.Text); numWrong++; continue; } } } else { incorrect.Add(question.Text); // user did not answer the question numWrong++; } } var model = new TestResultsModel { Id = new Guid(Request.Form["Id"].Single()), Name = User.FindFirst("name")?.Value ?? Request.Form["Name"], Email = User.FindFirst("email")?.Value ?? Request.Form["Email"], MemberId = User.FindFirst("memberId")?.Value, Title = quiz.Title, QuizId = quiz.Id, Score = quiz.Questions.Count - numWrong, Possible = quiz.Questions.Count, Completed = DateTimeOffset.Now, Incorrect = incorrect }; var passing = configuration.GetValue <float?>("passing_score") ?? 80; model.Percentage = model.Score / (float)model.Possible * 100.0f; model.Passed = model.Percentage >= passing; model.Duration = model.Completed - DateTimeOffset.Parse(Request.Form["Started"].Single()); if (model.Passed) { var cert = await certificateStore.AddCertificate(new CertificateEntity { RowKey = model.Id.ToString().ToLowerInvariant(), Completed = model.Completed, Name = model.Name, Title = model.Title }); // Send email to user string message = $"Full Name: {model.Name}<br/>Email: {model.Email}<br/><br/>Course: {model.Title}<br/>Results: {model.Score} out of {model.Possible}.<br/><br/>A certificate of completion is attached.<br/><br/><br/>--<br/>KCSARA Training Committee<br/>[email protected]"; await messaging.SendEmail(model.Email, "KCSARA Online Exam Results", message, new List <MessageAttachment> { new MessageAttachment { Base64 = Convert.ToBase64String(cert.Data), FileName = cert.FileName, MimeType = cert.MimeType } }); if (Guid.TryParse(quiz.RecordsId, out Guid courseId) && Guid.TryParse(model.MemberId, out Guid memberId)) { var record = await database.CreateTrainingRecord(new TrainingRecord { Completed = model.Completed, Course = new NameIdPair { Id = courseId }, Member = new NameIdPair { Id = memberId }, Comments = $"{configuration["siteRoot"]?.TrimEnd('/') ?? "https://exams.kcsara.org"}/certificate/{model.Id}" }); } } return(View(model)); }