Пример #1
0
        private QuizItemResultsModel PopulateResultsForLawSectionAnswer(string userId, AnonymousUserService auService, ApplicationDbContext context, QuizItem questionItem)
        {
            // Populate general law data
            var item = new QuizItemResultsModel
            {
                LawId               = questionItem.LawSection.LawID,
                LawTitle            = questionItem.LawSection.Law.Title,
                SectionId           = questionItem.LawSection.LawSectionID,
                SectionTitle        = questionItem.LawSection.Title,
                QuestionDescription = questionItem.LawSection.Text,
                ImageRelativePath   = questionItem.LawSection.ImageRelativePath,
                QuestionType        = QuizItemType.LawSection
            };

            // This is copied from Law service. Look to make it generic with expression trees

            var sectionVotingResults = context.LawSectionVotes
                                       .Where(x => x.LawSectionID == questionItem.LawSection.LawSectionID)
                                       .GroupBy(x => x.Vote)
                                       .Select(g => new { Key = g.Key, Count = g.Count() })
                                       .ToList();

            var unsafeResult = sectionVotingResults.Where(x => x.Key.HasValue && x.Key.Value).FirstOrDefault();

            item.VotesUp = unsafeResult == null ? 0 : unsafeResult.Count;

            unsafeResult   = sectionVotingResults.Where(x => x.Key.HasValue && !x.Key.Value).FirstOrDefault();
            item.VotesDown = unsafeResult == null ? 0 : unsafeResult.Count;

            item.VotesDownPercentage = Infrastructure.Math.Percentage(item.VotesDown, item.VotesDown + item.VotesUp);
            item.VotesUpPercentage   = Infrastructure.Math.Percentage(item.VotesUp, item.VotesDown + item.VotesUp);

            if (userId != null)
            {
                var userVote = context.LawSectionVotes
                               .Include(x => x.LawSectionCustomVote)
                               .Where(x => x.ApplicationUserID == userId && x.LawSectionID == questionItem.LawSection.LawSectionID)
                               .FirstOrDefault();

                if (userVote != null)
                {
                    item.UserVote = userVote.Vote;
                    if (userVote.LawSectionCustomVote != null)
                    {
                        item.CustomUserVoteText = userVote.LawSectionCustomVote.Text;
                    }
                }
            }
            else
            {
                item.UserVote           = auService.GetUserLawSectionVoteBool(questionItem.LawSection.LawSectionID);
                item.CustomUserVoteText = auService.GetUserLawSectionVoteCustomText(questionItem.LawSection.LawSectionID);
            }

            return(item);
        }
Пример #2
0
        internal QuizResultsModel GetQuizResults(int id, string userId)
        {
            var auService = new AnonymousUserService();

            using (var context = ApplicationDbContext.Create())
            {
                var quiz = context
                           .Quizes
                           .Include(x => x.Items)
                           .Include("Items.Law")
                           .Include("Items.LawSection.Law")
                           .Where(x => x.QuizId == id)
                           .FirstOrDefault();

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

                var result = new QuizResultsModel
                {
                    QuizId            = quiz.QuizId,
                    TimeCreated       = quiz.TimeCreated,
                    Description       = quiz.Description,
                    Title             = quiz.Title,
                    ImageRelativePath = quiz.ImageRelativePath,
                    Items             = new List <QuizItemResultsModel>()
                };


                foreach (var questionItem in quiz.Items)
                {
                    QuizItemResultsModel item = null;
                    if (questionItem.Type == QuizItemType.Law)
                    {
                        item = PopulateResultsForLawAnswer(userId, auService, context, questionItem);
                    }
                    else if (questionItem.Type == QuizItemType.LawSection)
                    {
                        item = PopulateResultsForLawSectionAnswer(userId, auService, context, questionItem);
                    }
                    result.Items.Add(item);
                }

                return(result);
            }
        }