Exemplo n.º 1
0
        /// <summary>
        /// Gets submission with fewest FailedTests and Newest SubmissionTime
        /// </summary>
        public TeacherSubmissionViewModel GetBestSubmissionFromSubmissionList(List <TeacherSubmissionViewModel> submissions)
        {
            var bestSubmission = new TeacherSubmissionViewModel();

            foreach (var submission in submissions)
            {
                if (submission.FailedTests < bestSubmission.FailedTests)
                {
                    bestSubmission = submission;
                }
                else if (bestSubmission.FailedTests == submission.FailedTests && bestSubmission.SubmissionTime < submission.SubmissionTime)
                {
                    bestSubmission = submission;
                }
            }
            return(bestSubmission);
        }
Exemplo n.º 2
0
        /// <summary>
        /// Get all assignment groups for a specific assignment
        /// </summary>
        public List <TeacherAssignmentGroupViewModel> GetAssignmentGroups(int assignmentId)
        {
            var groupQuery          = _db.AssignmentGroups.Where(x => x.AssignmentId == assignmentId);
            var groupNumberSet      = new HashSet <int>();
            var assignmentGroupList = new List <TeacherAssignmentGroupViewModel>();

            foreach (var student in groupQuery)
            {
                groupNumberSet.Add(student.GroupNumber);
            }
            foreach (var group in groupNumberSet)
            {
                var assignmentGroup = new TeacherAssignmentGroupViewModel {
                    GroupNumber = group,
                    Names       = new List <string>(),
                    Submissions = new List <TeacherSubmissionViewModel>(),
                    StudentIds  = new List <string>()
                };
                var studentsGroupQuery = _db.AssignmentGroups.Where(x => x.GroupNumber == group && x.AssignmentId == assignmentId);
                foreach (var student in studentsGroupQuery)
                {
                    assignmentGroup.StudentIds.Add(student.UserId);
                    assignmentGroup.Names.Add(student.AspNetUser.FullName);
                }

                foreach (var studentId in assignmentGroup.StudentIds)
                {
                    var submissions = _db.Submissions.Where(x => x.StudentId == studentId && x.AssignmentId == assignmentId).OrderByDescending(x => x.Time);

                    if (submissions.Any())
                    {
                        foreach (var submission in submissions)
                        {
                            var model = new TeacherSubmissionViewModel {
                                Id               = submission.Id,
                                SubmissionTime   = submission.Time,
                                OriginalFilename = submission.OriginalFileName
                            };

                            if (submission.FailedTests.HasValue)
                            {
                                model.FailedTests = submission.FailedTests.Value;
                            }

                            if (submission.SubmissionGrade != null)
                            {
                                model.SubmissionGrade = submission.SubmissionGrade.Grade;
                            }

                            assignmentGroup.Submissions.Add(model);
                        }
                    }
                }

                // Get best submission
                assignmentGroup.BestSubmission = GetBestSubmissionFromSubmissionList(assignmentGroup.Submissions);

                assignmentGroupList.Add(assignmentGroup);
            }
            return(assignmentGroupList);
        }