public Grade(Assessment assessment, Profile profile) { IsLate = false; Assessment = assessment; Student = profile; SubmissionRecord record = (from s in assessment.SubmissionRecords where s.StudentID == profile.MembershipID orderby s.Score descending select s).FirstOrDefault(); if (record == null) { Points = 0; Percentage = 0; SubmissionRecord = null; } else { Points = record.Score; Percentage = (assessment.IsExtraCredit)? 100 : ((record.Score / assessment.Weight) * 100); SubmissionRecord = record; if (record.SubmissionDate.CompareTo(assessment.DueDate) > 0) { IsLate = true; } } }
public List<SubmissionRecord> GetOtherSubmissionRecords(SubmissionRecord record) { var subs = from sub in dc.SubmissionRecords where sub.SubmissionRecordID != record.SubmissionRecordID && sub.AssessmentID == record.AssessmentID && sub.StudentID == record.StudentID orderby sub.SubmissionDate descending select sub; return subs.ToList(); }
public ActionResult CreateSubmission(Guid AssessmentID, Guid MembershipID, double Score, DateTime SubmissionDate) { try { Assessment assessment = dataRepository.GetAssessmentByID(courseTerm, AssessmentID); if (assessment == null) { return View("AssessmentNotFound"); } SubmissionRecord record = new SubmissionRecord(); assessment.SubmissionRecords.Add(record); record.GradedBy = UserHelpers.GetCurrentUserID(); record.GradedOn = DateTime.Now; record.StudentID = MembershipID; record.SubmissionDate = SubmissionDate; foreach (var answer in assessment.Answers) { AssessTrack.Models.Response response = new Response(); response.Score = (Score / 100.0) * answer.Weight; response.AnswerID = answer.AnswerID; response.ResponseText = "n/a"; record.Responses.Add(response); } dataRepository.Save(); } catch (Exception) { ModelState.AddModelError("_FORM", "An error occurred while creating the submission."); List<Profile> students = dataRepository.GetStudentProfiles(courseTerm); List<Assessment> assessments = dataRepository.GetAllNonTestBankAssessments(courseTerm); CreateSubmissionViewModel model = new CreateSubmissionViewModel(students,assessments); return View(model); } FlashMessageHelper.AddMessage("Score added successfully!"); return RedirectToRoute(new { siteShortName = site.ShortName, courseTermShortName = courseTerm.ShortName, action = "Index", controller = "SubmissionRecord" }); }
public SingleSubmissionViewModel(SubmissionRecord record, List<SubmissionRecord> otherrecords) { OtherSubmissionRecords = otherrecords; SubmissionRecord = record; }
public static string RenderAssessmentViewForm(this HtmlHelper helper, SubmissionRecord submission) { NameValueCollection answers = new NameValueCollection(); NameValueCollection scores = new NameValueCollection(); NameValueCollection comments = new NameValueCollection(); foreach (Response response in submission.Responses) { answers.Add(response.AnswerID.ToString(), response.ResponseText); scores.Add("score-" + response.AnswerID.ToString(), (response.Score ?? 0.0).ToString()); comments.Add("comment-" + response.AnswerID.ToString(), response.Comment ?? ""); } return helper.RenderAssessmentForm(submission.Assessment, "~/Content/view.xsl", answers, scores, comments); }
public static string RenderAssessmentGradingForm(this HtmlHelper helper, SubmissionRecord submission) { NameValueCollection answers = new NameValueCollection(); foreach (Response response in submission.Responses) { answers.Add(response.AnswerID.ToString(), response.ResponseText); } NameValueCollection scores = new NameValueCollection(); if (helper.ViewContext.HttpContext.Request.Form.Count > 0) { foreach (string key in helper.ViewContext.HttpContext.Request.Form.AllKeys) { if (key.StartsWith("score-")) { scores.Add(key, helper.ViewContext.HttpContext.Request.Form[key]); } } } else { foreach (Response response in submission.Responses) { scores.Add("score-" + response.AnswerID.ToString(), (response.Score ?? 0.0).ToString()); } } NameValueCollection comments = new NameValueCollection(); if (helper.ViewContext.HttpContext.Request.Form.Count > 0) { foreach (string key in helper.ViewContext.HttpContext.Request.Form.AllKeys) { if (key.StartsWith("comment-")) { comments.Add(key, helper.ViewContext.HttpContext.Request.Form[key]); } } } else { foreach (Response response in submission.Responses) { comments.Add("comment-" + response.AnswerID.ToString(), response.Comment ?? ""); } } return helper.RenderAssessmentForm(submission.Assessment, "~/Content/grade.xsl", answers, scores, comments); }
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 void SaveSubmissionRecord(SubmissionRecord record) { dc.SubmissionRecords.InsertOnSubmit(record); dc.SubmitChanges(); }
public void GradeSubmission(SubmissionRecord record) { foreach (Models.Response response in record.Responses) { foreach (AnswerKey key in response.Answer.AnswerKeys) { if (key.Value.ToLower().Replace("\r", "") == response.ResponseText.ToLower().Replace("\r", "")) { response.Score = key.Weight; break; } } } }