public ShowResultsPage(string request) { InitializeComponent(); myCtrl = new ShowResultsViewModel(request) { Navigation = this.Navigation }; BindingContext = myCtrl; Fill(); }
public async Task <IActionResult> ShowResults([FromQuery] long quizId) { var sourceQuiz = await _dbContext.Quizzes .Include(e => e.Creator) .FirstOrDefaultAsync(e => e.Id == quizId).ConfigureAwait(false); var quizResults = await _dbContext.UserQuizzes .Include(e => e.SourceQuiz) .Include(e => e.RespondentUser) .Include(e => e.UserAnswers) .ToListAsync().ConfigureAwait(false); var filteredQuizResults = quizResults.Where(e => e.SourceQuiz.Id == quizId); var result = new ShowResultsViewModel { SourceQuizId = sourceQuiz.Id, SourceQuizTitle = sourceQuiz.Title, CreatorUserName = sourceQuiz.Creator.Name }; foreach (var quizResult in filteredQuizResults) { var model = new GeneratedQuizInfoViewModel { GeneratedQuizId = quizResult.Id, Tag = quizResult.Tag, RespondentUserName = quizResult.RespondentUser.Name, StartTime = quizResult.StartTime }; result.Answers.Add(model); } return(View(result)); }
public async Task <IActionResult> ShowResults(ShowResultsViewModel model) { await UpdateQuizStatuses().ConfigureAwait(false); var generatedQuizIds = model.Answers.Where(e => e.IsSelected).Select(e => e.GeneratedQuizId).ToList(); var generatedQuizzes = await _dbContext.UserQuizzes .Where(e => generatedQuizIds.Contains(e.Id)) .Include(e => e.RespondentUser) .Include(e => e.SourceQuiz) .ThenInclude(e => e.QuizBlocks) .ThenInclude(e => e.Question) .Include(e => e.SourceQuiz) .ThenInclude(e => e.QuizBlocks) .ThenInclude(e => e.Answers) .Include(e => e.UserAnswers) .ToListAsync().ConfigureAwait(false); var resultSb = new StringBuilder(); resultSb.Append("Пользователь;").Append("Правильных ответов;").Append("Всего вопросов;").Append("% правильных;").AppendLine(); foreach (var generatedQuiz in generatedQuizzes) { var questionCount = generatedQuiz.SourceQuiz.MaxQuizBlocksCount > 0 && generatedQuiz.SourceQuiz.MaxQuizBlocksCount <= generatedQuiz.SourceQuiz.QuizBlocks.Count ? generatedQuiz.SourceQuiz.MaxQuizBlocksCount : generatedQuiz.SourceQuiz.QuizBlocks.Count; var correctAnswerCount = 0; foreach (var quizBlock in generatedQuiz.SourceQuiz.QuizBlocks) { var quizUserAnswer = generatedQuiz.UserAnswers.FirstOrDefault(e => e.QuizBlockId == quizBlock.Id); if (quizUserAnswer == null) { continue; } if (CommonHelpers.CheckQuizAnswer(quizBlock, quizUserAnswer)) { correctAnswerCount++; } } var correctPercent = correctAnswerCount * 100 / questionCount; resultSb .Append(generatedQuiz.RespondentUser.Name).Append(";") .Append(correctAnswerCount).Append(";") .Append(questionCount).Append(";") .Append(correctPercent).Append(";") .AppendLine(); } var fileName = $"QuizResults_{model.SourceQuizId}_{DateTimeOffset.Now.ToUnixTimeSeconds()}.csv"; var stream = new MemoryStream(); var csvWriter = new StreamWriter(stream, Encoding.UTF8) { AutoFlush = true }; await csvWriter.WriteAsync(resultSb.ToString()).ConfigureAwait(false); stream.Seek(0, SeekOrigin.Begin); return(File(stream, "text/csv", fileName)); }
public ShowResults() { _viewModel = new ShowResultsViewModel(); this.DataContext = _viewModel; InitializeComponent(); }