public ActionResult AssessmentGradeDistribution(Guid? id) { List<CourseTermMember> students = dataRepository.GetStudentsInCourseTerm(courseTerm); if (id == null) { return View("AssessmentNotFound"); } Assessment a = dataRepository.GetAssessmentByID(courseTerm, id.Value); GradeDistribution dist = new GradeDistribution(); foreach (var student in students) { Grade g = new Grade(a, student.Profile); if (g.SubmissionRecord != null) { dist.AddGrade(g.Percentage,student.Profile); } else { dist.AddGrade(new Nullable<double>(),student.Profile); } } AssessmentGradeDistributionModel model = new AssessmentGradeDistributionModel(); model.GradeDistribution = dist; model.Assessment = a; return View(model); }
public GradeSection(AssessmentType assessmentType, Profile profile, AssessTrackDataRepository repo, bool includeExtraCredit, DateTime date) { AssessmentType = assessmentType; TotalPoints = MaxPoints = 0; Grades = new List<Grade>(); CourseTermMember member = repo.GetCourseTermMemberByMembershipID(assessmentType.CourseTerm, profile.MembershipID); List<Assessment> assessments = repo.GetAllNonTestBankAssessments(assessmentType.CourseTerm, includeExtraCredit, assessmentType, member).Where(test => test.DueDate.CompareTo(date) < 0).ToList(); foreach (Assessment assessment in assessments) { Grade grade = new Grade(assessment, profile); Grades.Add(grade); if ((grade.SubmissionRecord != null && grade.SubmissionRecord.GradedBy != null) || (DateTime.Now.CompareTo(assessment.DueDate) > 0 && grade.SubmissionRecord == null)) { MaxPoints += assessment.Weight; TotalPoints += grade.Points; } } //if (TotalPoints > 0 && MaxPoints == 0) //if everything is extra credit //{ // MaxPoints = 1; //to avoid division by zero //} if (MaxPoints == 0) { Percentage = 0; Weight = 0; } else { Percentage = (TotalPoints / MaxPoints) * 100; Weight = assessmentType.Weight; } }
public double Score(Profile profile) { Grade grade = new Grade(this.Assessment, profile); if (grade.SubmissionRecord == null) return 0.0; var responses = from response in grade.SubmissionRecord.Responses where response.Answer.QuestionID == this.QuestionID select response; double? score = responses.Sum(response => response.Score); return (score.HasValue) ? score.Value : 0.0; }
double ITaggable.Score(Profile profile) { Grade grade = new Grade(this, profile); return grade.Points; }
public ActionResult Submit(string courseTermShortName, string siteShortName, Guid id, FormCollection collection) { Assessment assessment = dataRepository.GetAssessmentByID(courseTerm, id); if (assessment == null || !assessment.IsVisible) return View("AssessmentNotFound"); if (!assessment.AllowMultipleSubmissions && dataRepository.HasUserSubmittedAssessment(assessment) && !AssessmentHelpers.StudentHasExtension(assessment, UserHelpers.GetCurrentUserID())) //Exceptions allow students to submit multiple times { return View("AlreadySubmitted"); } if (DateTime.Now.Subtract(assessment.DueDate).TotalSeconds > 0) { if (!AssessmentHelpers.StudentHasExtension(assessment, UserHelpers.GetCurrentUserID())) { return View("DueDatePassed"); } } if (!assessment.IsOpen) { return View("AssessmentClosed"); } //check prereq if (assessment.PreReq != null) { if (!dataRepository.HasUserSubmittedAssessment(assessment.PreReq)) { return View("PreReqNotSatisfied", assessment); } else { Grade g = new Grade(assessment.PreReq, dataRepository.GetLoggedInProfile()); if (assessment.PrereqMinScorePct != null && g.Percentage < assessment.PrereqMinScorePct.Value) { return View("PreReqNotSatisfied", assessment); } } } try { using (TransactionScope transaction = new TransactionScope()) { //Upload all attachments and store their IDs Dictionary<string, string> answerAttachments = new Dictionary<string, string>(); foreach (Answer answer in assessment.Answers) { if (answer.Type == "attachment") { AssessTrack.Models.File file = FileUploader.GetFile(answer.AnswerID.ToString(), Request); if (file != null) { dataRepository.SaveFile(file); dataRepository.Save(); string downloadUrl = Url.Action("Download", "File", new { id = file.FileID }); string link = string.Format("<a href=\"{0}\">Click here to download {1}.</a>", downloadUrl, file.Name); answerAttachments.Add(answer.AnswerID.ToString(), link); } } } SubmissionRecord record = new SubmissionRecord(); Guid studentID = dataRepository.GetLoggedInProfile().MembershipID; record.StudentID = studentID; record.SubmissionDate = DateTime.Now; foreach (Answer answer in assessment.Answers) { string responseText = collection[answer.AnswerID.ToString()]; //Put the download link in responseText if this is an attachment if (answer.Type == "attachment") { answerAttachments.TryGetValue(answer.AnswerID.ToString(), out responseText); } if (responseText != null) { Response response = new Response(); response.Answer = answer; response.ResponseText = responseText; record.Responses.Add(response); } } record.Assessment = assessment; //Run the autograder dataRepository.GradeSubmission(record); //Need to save the submission before compiling the code questions dataRepository.SaveSubmissionRecord(record); //Compile any code answers after record is saved and has an id record.CompileCodeQuestions(); string message = "Your answers were submitted successfully! " + "Your Comfirmation Number is \"" + record.SubmissionRecordID + "\". Keep this number for you records!"; FlashMessageHelper.AddMessage(message); transaction.Complete(); return RedirectToAction("Index", new { siteShortName = siteShortName, courseTermShortName = courseTermShortName }); } } catch (Exception e) { FlashMessageHelper.AddMessage("An error occurred while submitting your answers. <br/> Message: " + e.Message ); return View(assessment); } }
public ActionResult Submit(string courseTermShortName, string siteShortName, Guid id) { Assessment assessment = dataRepository.GetAssessmentByID(courseTerm, id); if (assessment == null || !assessment.IsVisible) return View("AssessmentNotFound"); if (!assessment.AllowMultipleSubmissions && dataRepository.HasUserSubmittedAssessment(assessment) && !AssessmentHelpers.StudentHasExtension(assessment, UserHelpers.GetCurrentUserID())) //Exceptions allow students to submit multiple times { return View("AlreadySubmitted"); } if (DateTime.Now.Subtract(assessment.DueDate).TotalSeconds > 0) { if (!AssessmentHelpers.StudentHasExtension(assessment, UserHelpers.GetCurrentUserID())) { return View("DueDatePassed"); } } if (!assessment.IsOpen) { return View("AssessmentClosed"); } //check prereq if (assessment.PreReq != null) { if (!dataRepository.HasUserSubmittedAssessment(assessment.PreReq)) { return View("PreReqNotSatisfied", assessment); } else { Grade g = new Grade(assessment.PreReq, dataRepository.GetLoggedInProfile()); if (assessment.PrereqMinScorePct != null && g.Percentage < assessment.PrereqMinScorePct.Value) { return View("PreReqNotSatisfied", assessment); } } } return View(assessment); }
public ActionResult GradeSheetOverview() { List<Assessment> assessments = dataRepository.GetAllNonTestBankAssessments(courseTerm,false); List<Profile> profiles = dataRepository.GetStudentProfiles(courseTerm); Func<Assessment, string> ylabel = (a => a.Name); Func<Assessment, string> ydetail = (a => dataRepository.GetWeightedPointValue(a).ToString("0.00")); Func<Assessment, double> yval = a => dataRepository.GetWeightedPointValue(a); Func<Profile,string> xlabel = p => p.FullName; Func<Profile,Assessment,double> cellval = (p,a) => { Grade g = new Grade(a,p); double wv = dataRepository.GetWeightedPointValue(a); return (a.IsExtraCredit)? g.Points : (g.Percentage/100.0) * wv; }; bool showcoltotals = true; bool showcolavgs = false; bool showcolpfmes = false; bool showcolgrade = true; bool showrowavgs = true; GridReport<Profile, Assessment> report = new GridReport<Profile, Assessment>(profiles, assessments, ylabel, ydetail, yval, xlabel, cellval, showcoltotals, showcolavgs, showcolpfmes, showcolgrade, showrowavgs); return View(report); }
public double Score(Profile profile) { Grade grade = new Grade(this.Assessment, profile); if (grade.SubmissionRecord == null || grade.SubmissionRecord.Responses.Count == 0) return 0.0; var response = (from resp in grade.SubmissionRecord.Responses where resp.AnswerID == this.AnswerID select resp).FirstOrDefault(); if (response == null) { return 0.0; } return (response.Score.HasValue)? response.Score.Value : 0.0; }