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);
 }
示例#2
0
        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;
            }
        }
示例#3
0
        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;
        }
示例#4
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);
        }
示例#8
0
 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;
 }