Exemplo n.º 1
0
 public ShowResultsPage(string request)
 {
     InitializeComponent();
     myCtrl = new ShowResultsViewModel(request)
     {
         Navigation = this.Navigation
     };
     BindingContext = myCtrl;
     Fill();
 }
Exemplo n.º 2
0
        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));
        }
Exemplo n.º 3
0
        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();
 }