feat: students and assessment tab in dashboard

This commit is contained in:
Jannat Patel
2024-01-10 21:36:02 +05:30
parent 09ae61492f
commit 1a6a119f35
51 changed files with 4084 additions and 2325 deletions
@@ -5,6 +5,7 @@ import frappe
from frappe import _
from frappe.model.document import Document
from lms.lms.utils import get_evaluator
from datetime import datetime
class CourseEvaluator(Document):
@@ -39,10 +40,14 @@ class CourseEvaluator(Document):
@frappe.whitelist()
def get_schedule(course, date, batch=None):
evaluator = get_evaluator(course, batch)
day = datetime.strptime(date, "%Y-%m-%d").strftime("%A")
all_slots = frappe.get_all(
"Evaluator Schedule",
filters={"parent": evaluator},
filters={
"parent": evaluator,
"day": day,
},
fields=["day", "start_time", "end_time"],
order_by="start_time",
)
+7 -2
View File
@@ -14,8 +14,13 @@ from frappe.utils import (
format_datetime,
get_time,
)
from lms.lms.utils import get_lessons, get_lesson_index, get_lesson_url
from lms.www.utils import get_quiz_details, get_assignment_details
from lms.lms.utils import (
get_lessons,
get_lesson_index,
get_lesson_url,
get_quiz_details,
get_assignment_details,
)
from frappe.email.doctype.email_template.email_template import get_email_template
@@ -109,7 +109,7 @@
],
"index_web_pages_for_search": 1,
"links": [],
"modified": "2023-11-29 15:00:30.617298",
"modified": "2024-01-09 10:05:13.918890",
"modified_by": "Administrator",
"module": "LMS",
"name": "LMS Certificate Request",
@@ -151,6 +151,16 @@
"role": "Moderator",
"share": 1,
"write": 1
},
{
"create": 1,
"email": 1,
"export": 1,
"print": 1,
"read": 1,
"report": 1,
"role": "LMS Student",
"share": 1
}
],
"sort_field": "modified",
@@ -126,7 +126,7 @@
],
"index_web_pages_for_search": 1,
"links": [],
"modified": "2023-09-20 11:29:20.899897",
"modified": "2024-01-09 11:22:33.272341",
"modified_by": "Administrator",
"module": "LMS",
"name": "LMS Live Class",
@@ -155,6 +155,15 @@
"role": "Moderator",
"share": 1,
"write": 1
},
{
"email": 1,
"export": 1,
"print": 1,
"read": 1,
"report": 1,
"role": "LMS Student",
"share": 1
}
],
"show_title_field_in_link": 1,
+69 -13
View File
@@ -27,6 +27,7 @@ from frappe.utils import (
pretty_date,
get_time_str,
nowtime,
format_datetime,
)
from frappe.utils.dateutils import get_period
from lms.lms.md import find_macros, markdown_to_html
@@ -886,6 +887,7 @@ def get_evaluator(course, batch=None):
return evaluator
@frappe.whitelist()
def get_upcoming_evals(student, courses):
upcoming_evals = frappe.get_all(
"LMS Certificate Request",
@@ -1378,27 +1380,19 @@ def get_batch_details(batch):
"amount",
"currency",
"paid_batch",
"evaluation_end_date",
],
as_dict=True,
)
batch_details.courses = frappe.get_all(
"Batch Course", {"parent": batch}, pluck="course"
"Batch Course", filters={"parent": batch}, fields=["course", "title"]
)
batch_details.students = frappe.get_all(
"Batch Student", {"parent": batch}, pluck="student"
)
batch_details.price = fmt_money(batch_details.amount, 0, batch_details.currency)
is_student = frappe.session.user in batch_details.students
if frappe.session.user != "Guest":
if is_student:
batch_details.upcoming_evals = get_upcoming_evals(
frappe.session.user, batch_details.courses
)
if is_student or has_course_moderator_role():
batch_details.assessments = get_assessments(batch, frappe.session.user)
if batch_details.seat_count:
students_enrolled = frappe.db.count(
"Batch Student",
@@ -1479,6 +1473,7 @@ def get_batch_courses(batch):
return courses
@frappe.whitelist()
def get_assessments(batch, member=None):
if not member:
member = frappe.session.user
@@ -1520,6 +1515,10 @@ def get_assignment_details(assessment, member):
as_dict=True,
)
assessment.completed = True
assessment.status = assessment.submission.status
else:
assessment.status = "Not Attempted"
assessment.color = "red"
assessment.edit_url = f"/assignments/{assessment.assessment_name}"
submission_name = existing_submission if existing_submission else "new-submission"
@@ -1548,10 +1547,12 @@ def get_quiz_details(assessment, member):
if len(existing_submission):
assessment.submission = existing_submission[0]
assessment.completed = False
if assessment.submission:
assessment.completed = True
assessment.status = assessment.submission.score
else:
assessment.status = "Not Attempted"
assessment.color = "red"
assessment.completed = False
assessment.edit_url = f"/quizzes/{assessment.assessment_name}"
submission_name = (
@@ -1560,3 +1561,58 @@ def get_quiz_details(assessment, member):
assessment.url = f"/quiz-submission/{assessment.assessment_name}/{submission_name}"
return assessment
@frappe.whitelist()
def get_batch_students(batch):
students = []
students_list = frappe.get_all(
"Batch Student", filters={"parent": batch}, fields=["student", "name"]
)
batch_courses = frappe.get_all("Batch Course", {"parent": batch}, pluck="course")
assessments = frappe.get_all(
"LMS Assessment",
filters={"parent": batch},
fields=["name", "assessment_type", "assessment_name"],
)
for student in students_list:
courses_completed = 0
assessments_completed = 0
detail = frappe.db.get_value(
"User",
student.student,
["full_name", "email", "username", "last_active", "user_image"],
as_dict=True,
)
detail.last_active = format_datetime(detail.last_active, "dd MMM YY")
detail.name = student.name
students.append(detail)
for course in batch_courses:
progress = frappe.db.get_value(
"LMS Enrollment", {"course": course, "member": student.student}, "progress"
)
if progress == 100:
courses_completed += 1
detail.courses_completed = courses_completed
for assessment in assessments:
if has_submitted_assessment(
assessment.assessment_name, assessment.assessment_type, student.student
):
assessments_completed += 1
detail.assessments_completed = assessments_completed
return students
@frappe.whitelist()
def get_users():
return frappe.get_all("User", {"enabled": 1}, pluck="name")