feat: student dashboard

This commit is contained in:
Jannat Patel
2023-07-31 12:36:13 +05:30
parent cef3d21ab3
commit e7a2eb7373
10 changed files with 498 additions and 307 deletions

View File

@@ -1,13 +1,14 @@
from frappe import _
import frappe
from frappe.utils import getdate
from frappe.utils import getdate, cint
from lms.www.utils import get_assessments
from lms.lms.utils import (
has_course_moderator_role,
has_course_evaluator_role,
get_course_progress,
get_upcoming_evals,
has_submitted_assessment,
has_graded_assessment,
get_membership,
)
@@ -39,14 +40,10 @@ def get_context(context):
context.reference_doctype = "LMS Class"
context.reference_name = class_name
context.published_courses = frappe.get_all(
"LMS Course", {"published": 1}, ["name", "title"]
)
class_courses = frappe.get_all(
"Class Course",
{"parent": class_name},
["name", "course"],
["name", "course", "title"],
order_by="creation desc",
)
@@ -65,6 +62,7 @@ def get_context(context):
)
context.class_courses = get_class_course_details(class_courses)
context.course_list = [course.course for course in context.class_courses]
context.all_courses = frappe.get_list(
"LMS Course", fields=["name", "title"], limit_page_length=0
)
@@ -74,6 +72,10 @@ def get_context(context):
class_students, class_courses, context.assessments
)
context.is_student = is_student(class_students)
context.current_student = (
get_current_student_details(class_courses, class_name) if context.is_student else None
)
context.all_assignments = get_all_assignments(class_name)
context.all_quizzes = get_all_quizzes(class_name)
@@ -139,36 +141,47 @@ def get_class_student_details(class_students, class_courses, assessments):
)
)
student.update(frappe.db.get_value("User", student.student, "last_active", as_dict=1))
courses_completed = 0
for course in class_courses:
if get_course_progress(course.course, student.student) == 100:
courses_completed += 1
student["courses_completed"] = courses_completed
assessments_completed = 0
assessments_graded = 0
for assessment in assessments:
submission = has_submitted_assessment(
assessment.assessment_name, assessment.assessment_type, student.student
)
if submission:
assessments_completed += 1
if (
assessment.assessment_type == "LMS Assignment"
and has_graded_assessment(submission)
):
assessments_graded += 1
elif assessment.assessment_type == "LMS Quiz":
assessments_graded += 1
student["assessments_completed"] = assessments_completed
student["assessments_graded"] = assessments_graded
get_progress_info(student, class_courses)
get_assessment_info(student, assessments)
return sort_students(class_students)
def get_progress_info(student, class_courses):
courses_completed = 0
student["courses"] = frappe._dict()
for course in class_courses:
membership = get_membership(course.course, student.student)
if membership and membership.progress == 100:
courses_completed += 1
student["courses_completed"] = courses_completed
return student
def get_assessment_info(student, assessments):
assessments_completed = 0
assessments_graded = 0
for assessment in assessments:
submission = has_submitted_assessment(
assessment.assessment_name, assessment.assessment_type, student.student
)
if submission:
assessments_completed += 1
if (
assessment.assessment_type == "LMS Assignment" and has_graded_assessment(submission)
):
assessments_graded += 1
elif assessment.assessment_type == "LMS Quiz":
assessments_graded += 1
student["assessments_completed"] = assessments_completed
student["assessments_graded"] = assessments_graded
return student
def sort_students(class_students):
session_user = []
remaining_students = []
@@ -188,3 +201,25 @@ def sort_students(class_students):
def is_student(class_students):
students = [student.student for student in class_students]
return frappe.session.user in students
def get_current_student_details(class_courses, class_name):
student_details = frappe._dict()
student_details.courses = frappe._dict()
course_list = [course.course for course in class_courses]
get_course_progress(class_courses, student_details)
student_details.name = frappe.session.user
student_details.assessments = get_assessments(class_name, frappe.session.user)
student_details.upcoming_evals = get_upcoming_evals(frappe.session.user, course_list)
return student_details
def get_course_progress(class_courses, student_details):
for course in class_courses:
membership = get_membership(course.course, frappe.session.user)
if membership:
student_details.courses[course.course] = membership.progress
else:
student_details.courses[course.course] = 0