public ActionResult StudentsStatisticsStudent(int id) { var currentUserId = User.Identity.GetUserId(); var selectedAssignmentId = id; var context = HttpContext.GetOwinContext().Get <ApplicationDbContext>(); //Get a list of submitted assignments from the SubmissionGrades Table based on the specific assignment var allSubmissionGradesOfAssignment = context.SubmissionGrades.Include(x => x.Assignment).Include(x => x.User).Include(x => x.User).Where(x => x.Assignment.AssignmentId == selectedAssignmentId).ToList(); double currentUserScore = 0.0; //user score if (allSubmissionGradesOfAssignment.Any(x => x.User.Id == currentUserId && x.Assignment.AssignmentId == selectedAssignmentId)) { currentUserScore = Convert.ToDouble(allSubmissionGradesOfAssignment.Where(x => x.User.Id == currentUserId && x.Assignment.AssignmentId == selectedAssignmentId).FirstOrDefault().Grade); } else { currentUserScore = Convert.ToDouble(0); } //average score double averageScore = Convert.ToDouble(allSubmissionGradesOfAssignment.Average(x => x.Grade)); //low score var lowScore = Convert.ToDouble(allSubmissionGradesOfAssignment.Min(x => x.Grade)); //high score var highScore = Convert.ToDouble(allSubmissionGradesOfAssignment.Max(x => x.Grade)); // save object for x and y values of chart/graph List <DataPoint> dataPoints = new List <DataPoint> { //(range, count of students within range) new DataPoint("Average", averageScore), new DataPoint("Low", lowScore), new DataPoint("High", highScore), new DataPoint("Your Grade", currentUserScore) }; // pass the data to canvasJS via Json ViewBag.DataPoints = JsonConvert.SerializeObject(dataPoints); //set ViewModel list to defined list above var gradeSubmittedAssignmentsViewModel = new gradeSubmittedAssignmentsViewModel() { SubmittedAssignments = allSubmissionGradesOfAssignment }; return(View(gradeSubmittedAssignmentsViewModel)); }
public ActionResult GradeAssignment(int id) { var selectedAssignmentId = id; var context = HttpContext.GetOwinContext().Get <ApplicationDbContext>(); //Select the specific assignment from assignments Table var selectedAssignment = context.Assignments.Where(x => x.AssignmentId == selectedAssignmentId).Include(x => x.Course).FirstOrDefault(); //Get a list of submitted assignments from the SubmissionGrades Table based on the specific assignment //List<SubmissionGrades> submittedAssignments = context.SubmissionGrades.Where(x => x.Assignment == selectedAssignment).Include(x => x.User.Id).ToList(); var allSubmissionGrades = context.SubmissionGrades.Include(x => x.Assignment).Include(x => x.User).Include(x => x.User).ToList(); var allSubmissionsOfSelected = allSubmissionGrades.Where(x => x.Assignment == selectedAssignment).ToList(); //set ViewModel list to defined list above var gradeSubmittedAssignmentsViewModel = new gradeSubmittedAssignmentsViewModel() { SubmittedAssignments = allSubmissionsOfSelected }; return(View(gradeSubmittedAssignmentsViewModel)); }
public ActionResult StudentsStatisticsInstructor(int id) { var selectedAssignmentId = id; var context = HttpContext.GetOwinContext().Get <ApplicationDbContext>(); //Select the specific assignment from assignments Table var selectedAssignment = context.Assignments.Where(x => x.AssignmentId == selectedAssignmentId).Include(x => x.Course).FirstOrDefault(); //Get a list of submitted assignments from the SubmissionGrades Table based on the specific assignment var allSubmissionGrades = context.SubmissionGrades.Include(x => x.Assignment).Include(x => x.User).Include(x => x.User).ToList(); var allSubmissionsOfSelected = allSubmissionGrades.Where(x => x.Assignment == selectedAssignment && x.Grade != null).ToList(); if (allSubmissionsOfSelected.Count() != 0) { // used for calculating percentages var assignmentPointTotal = allSubmissionsOfSelected.FirstOrDefault().Assignment.Points; var userIds = allSubmissionsOfSelected.Select(x => x.User).Select(y => y.Id).ToList(); // set percentages per user foreach (var userId in userIds) { // get user's grade based off userId var userGrade = allSubmissionsOfSelected.Where(x => x.User.Id == userId).FirstOrDefault().Grade; // set Percentage of user using usergrade allSubmissionsOfSelected.Where(x => x.User.Id == userId).FirstOrDefault().Percentage = Convert.ToDecimal(userGrade) / assignmentPointTotal; } // list of all scores using allSubmissionsOfSelected including count of student that received scored 0-59, 60-69, etc. var zeroToSixty = allSubmissionsOfSelected.Where(x => x.Percentage < Convert.ToDecimal(.6)).Count(); var sixtyToSeventy = allSubmissionsOfSelected.Where(x => x.Percentage >= Convert.ToDecimal(.6) && x.Percentage < Convert.ToDecimal(.7)).Count(); var seventyToEighty = allSubmissionsOfSelected.Where(x => x.Percentage >= Convert.ToDecimal(.7) && x.Percentage < Convert.ToDecimal(.8)).Count(); var eightyToNinety = allSubmissionsOfSelected.Where(x => x.Percentage >= Convert.ToDecimal(.8) && x.Percentage < Convert.ToDecimal(.9)).Count(); var ninetyToOneHundred = allSubmissionsOfSelected.Where(x => x.Percentage >= Convert.ToDecimal(.9)).Count(); // save object for x and y values of chart/graph List <DataPoint> dataPoints = new List <DataPoint> { //(range, count of students within range) new DataPoint("0-59%", zeroToSixty), new DataPoint("60-69%", sixtyToSeventy), new DataPoint("70-79%", seventyToEighty), new DataPoint("80-89%", eightyToNinety), new DataPoint("90-100%", ninetyToOneHundred) }; // pass the data to canvasJS via Json ViewBag.DataPoints = JsonConvert.SerializeObject(dataPoints); //set ViewModel list to defined list above var gradeSubmittedAssignmentsViewModel = new gradeSubmittedAssignmentsViewModel() { SubmittedAssignments = allSubmissionsOfSelected }; return(View(gradeSubmittedAssignmentsViewModel)); } else { TempData["ErrorMessage"] = "Error: Assignments not yet graded!"; return(RedirectToAction("GradeAssignment", new { id = selectedAssignmentId })); } }