Esempio n. 1
0
 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();
 }
Esempio n. 9
0
 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;
             }
         }
     }
 }