feat: timetable milestones

This commit is contained in:
Jannat Patel
2023-10-23 16:35:35 +05:30
parent 509b1365d9
commit d4f662f65e
8 changed files with 126 additions and 27 deletions

View File

@@ -52,6 +52,7 @@ const set_timetable = (frm) => {
"start_time",
"end_time",
"duration",
"milestone",
],
filters: {
parent: frm.doc.timetable_template,
@@ -82,6 +83,7 @@ const add_timetable_rows = (frm, timetable) => {
.format("HH:mm")
: null;
child.duration = row.duration;
child.milestone = row.milestone;
});
frm.refresh_field("timetable");

View File

@@ -12,9 +12,6 @@ from frappe.utils import (
cint,
format_date,
format_datetime,
add_to_date,
getdate,
get_datetime,
)
from lms.lms.utils import get_lessons, get_lesson_index, get_lesson_url
from lms.www.utils import get_quiz_details, get_assignment_details
@@ -325,7 +322,17 @@ def get_batch_timetable(batch):
timetable = frappe.get_all(
"LMS Batch Timetable",
filters={"parent": batch},
fields=["reference_doctype", "reference_docname", "date", "start_time", "end_time"],
fields=[
"reference_doctype",
"reference_docname",
"date",
"start_time",
"end_time",
"milestone",
"name",
"idx",
"parent",
],
order_by="date",
)
@@ -362,20 +369,26 @@ def get_timetable_details(timetable):
assessment = frappe._dict({"assessment_name": entry.reference_docname})
if entry.reference_doctype == "Course Lesson":
entry.icon = "icon-list"
course = frappe.db.get_value(
entry.reference_doctype, entry.reference_docname, "course"
)
entry.url = get_lesson_url(course, get_lesson_index(entry.reference_docname))
entry.completed = (
True
if frappe.db.exists(
"LMS Course Progress",
{"lesson": entry.reference_docname, "member": frappe.session.user},
)
else False
)
elif entry.reference_doctype == "LMS Quiz":
entry.icon = "icon-quiz"
entry.url = "/quizzes"
details = get_quiz_details(assessment, frappe.session.user)
entry.update(details)
elif entry.reference_doctype == "LMS Assignment":
entry.icon = "icon-quiz"
details = get_assignment_details(assessment, frappe.session.user)
entry.update(details)
@@ -390,3 +403,40 @@ def send_email_to_students(batch, subject, reply_to, message):
frappe.sendmail(
recipients=students, subject=subject, reply_to=reply_to, message=message
)
@frappe.whitelist()
def is_milestone_complete(idx, batch):
previous_rows = frappe.get_all(
"LMS Batch Timetable",
filters={"parent": batch, "idx": ["<", cint(idx)]},
fields=["reference_doctype", "reference_docname", "idx"],
order_by="idx",
)
for row in previous_rows:
if row.reference_doctype == "Course Lesson":
if not frappe.db.exists(
"LMS Course Progress",
{"member": frappe.session.user, "lesson": row.reference_docname},
):
return False
if row.reference_doctype == "LMS Quiz":
passing_percentage = frappe.db.get_value(
row.reference_doctype, row.reference_docname, "passing_percentage"
)
if not frappe.db.exists(
"LMS Quiz Submission",
{"quiz": row.reference_docname, "member": frappe.session.user},
):
return False
if row.reference_doctype == "LMS Assignment":
if not frappe.db.exists(
"LMS Assignment Submission",
{"assignment": row.reference_docname, "member": frappe.session.user},
):
return False
return True

View File

@@ -16,7 +16,8 @@
"column_break_merq",
"start_time",
"end_time",
"duration"
"duration",
"milestone"
],
"fields": [
{
@@ -69,12 +70,17 @@
"fieldname": "day",
"fieldtype": "Int",
"label": "Day"
},
{
"fieldname": "milestone",
"fieldtype": "Check",
"label": "Milestone"
}
],
"index_web_pages_for_search": 1,
"istable": 1,
"links": [],
"modified": "2023-10-03 17:40:31.530181",
"modified": "2023-10-20 11:58:01.782921",
"modified_by": "Administrator",
"module": "LMS",
"name": "LMS Batch Timetable",

View File

@@ -65,7 +65,6 @@ def quiz_summary(quiz, results):
correct = result["is_correct"][0]
for point in result["is_correct"]:
correct = correct and point
result["is_correct"] = correct
question_details = frappe.db.get_value(
@@ -100,6 +99,8 @@ def quiz_summary(quiz, results):
"score": score,
"score_out_of": score_out_of,
"member": frappe.session.user,
"percentage": percentage,
"passing_percentage": quiz_details.passing_percentage,
}
)
submission.save(ignore_permissions=True)

View File

@@ -15,6 +15,7 @@
"score_out_of",
"column_break_gkip",
"percentage",
"passing_percentage",
"section_break_6",
"result"
],
@@ -96,12 +97,20 @@
"non_negative": 1,
"read_only": 1,
"reqd": 1
},
{
"fieldname": "passing_percentage",
"fieldtype": "Int",
"label": "Passing Percentage",
"non_negative": 1,
"read_only": 1,
"reqd": 1
}
],
"in_create": 1,
"index_web_pages_for_search": 1,
"links": [],
"modified": "2023-10-17 13:07:27.979974",
"modified": "2023-10-17 13:07:27.979975",
"modified_by": "Administrator",
"module": "LMS",
"name": "LMS Quiz Submission",

View File

@@ -7,7 +7,8 @@ from frappe.model.document import Document
class LMSQuizSubmission(Document):
def before_insert(self):
self.set_percentage()
if not self.percentage:
self.set_percentage()
def set_percentage(self):
if self.score and self.score_out_of: