/// <summary>
        /// Returns the assignment results for the given set of submissions.
        /// </summary>
        public IList <SectionAssignmentResults> GetAssignmentGroupResultsSnapshot(
            IList <Assignment> assignments,
            IList <User> users,
            Section section,
            IList <UserQuestionSubmission> submissions,
            DateTime snapshotDate)
        {
            var sectionAssignments = _assignmentFilter.FilterAssignments
                                     (
                assignments,
                section,
                assignmentGroupName: null,
                maxDueDate: snapshotDate
                                     );

            var assignmentGroups = _assignmentFilter.GetAssignmentGroups
                                   (
                section,
                sectionAssignments
                                   );

            var sectionAssignmentSubmissions = _assignmentFilter.FilterSubmissions
                                               (
                sectionAssignments,
                submissions,
                null /*user*/,
                snapshotDate
                                               );

            var submissionsByGroup = sectionAssignmentSubmissions.GroupBy
                                     (
                submission => submission.UserQuestionData
                .AssignmentQuestion
                .Assignment
                .GroupName
                                     ).ToDictionary(g => g.Key, g => g.ToList());

            return(assignmentGroups.Select
                   (
                       assignmentGroup => _sectionAssignmentReportGenerator
                       .GetSectionAssignmentGroupResults
                       (
                           assignmentGroup.Key,
                           assignmentGroup.ToList(),
                           section,
                           users,
                           submissionsByGroup.GetValueOrNew(assignmentGroup.Key)
                       )
                   ).ToList());
        }
Exemplo n.º 2
0
        /// <summary>
        /// Returns the results for a single assignment group in a single section.
        /// </summary>
        public async Task <SectionAssignmentResults> GetSectionAssignmentResultsAsync(
            string classroomName,
            string sectionName,
            string assignmentGroupName)
        {
            var classroom = await LoadClassroomAsync(classroomName);

            var section = classroom.Sections.SingleOrDefault(s => s.Name == sectionName);

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

            var assignments = await GetAssignmentsAsync
                              (
                classroomName,
                sectionName,
                assignmentGroupName,
                admin : true
                              );

            var students = await _dbContext.SectionMemberships
                           .Where
                           (
                sm => sm.SectionId == section.Id &&
                sm.Role == SectionRole.Student
                           )
                           .Select(sm => sm.ClassroomMembership.User)
                           .ToListAsync();

            var submissions = await GetUserQuestionSubmissionsAsync
                              (
                classroom.Id,
                section.Id,
                assignmentGroupName,
                userId : null
                              );

            return(_sectionAssignmentReportGenerator.GetSectionAssignmentGroupResults
                   (
                       assignmentGroupName,
                       assignments,
                       section,
                       students,
                       submissions
                   ));
        }