refactor: program list for students

This commit is contained in:
Jannat Patel
2025-08-18 15:51:07 +05:30
parent 625ddac65a
commit acd003814a
8 changed files with 235 additions and 47 deletions
+10 -1
View File
@@ -93,7 +93,7 @@
"grid_page_length": 50,
"index_web_pages_for_search": 1,
"links": [],
"modified": "2025-08-13 14:36:59.168945",
"modified": "2025-08-18 13:08:04.993241",
"modified_by": "sayali@frappe.io",
"module": "LMS",
"name": "LMS Program",
@@ -135,6 +135,15 @@
"role": "Course Creator",
"share": 1,
"write": 1
},
{
"email": 1,
"export": 1,
"print": 1,
"read": 1,
"report": 1,
"role": "LMS Student",
"share": 1
}
],
"row_format": "Dynamic",
@@ -10,6 +10,7 @@ class LMSProgram(Document):
def validate(self):
self.validate_program_courses()
self.validate_program_members()
self.update_count()
def validate_program_courses(self):
courses = [row.course for row in self.program_courses]
@@ -30,3 +31,13 @@ class LMSProgram(Document):
frappe.bold(next(iter(duplicates)))
)
)
def update_count(self):
course_count = len(self.program_courses)
member_count = len(self.program_members)
if self.course_count != course_count:
self.course_count = course_count
if self.member_count != member_count:
self.member_count = member_count
+27 -6
View File
@@ -1919,9 +1919,33 @@ def update_certificate_purchase(course, payment_name):
@frappe.whitelist()
def get_programs():
if has_course_moderator_role() or has_course_instructor_role() or has_course_evaluator_role():
programs = frappe.get_all("LMS Program", fields=["name"])
enrolled_programs = frappe.get_all(
"LMS Program Member", {"member": frappe.session.user}, ["parent as name", "progress"]
)
for program in enrolled_programs:
program.update(
frappe.db.get_value(
"LMS Program", program.name, ["name", "course_count", "member_count"], as_dict=True
)
)
published_programs = frappe.get_all(
"LMS Program",
{
"published": 1,
"allow_self_enrollment": 1,
},
["name", "course_count", "member_count"],
)
published_programs = [program for program in published_programs if program not in enrolled_programs]
return {
"enrolled": enrolled_programs,
"published": published_programs,
}
""" def set_program_details(programs):
for program in programs:
program_courses = frappe.get_all(
"LMS Program Course", {"parent": program.name}, ["course"], order_by="idx"
@@ -1939,10 +1963,7 @@ def get_programs():
previous_progress = details.membership.progress if details.membership else 0
program.courses.append(details)
program.members = frappe.db.count("LMS Program Member", {"parent": program.name})
return programs
"""
@frappe.whitelist()
+2 -1
View File
@@ -109,4 +109,5 @@ lms.patches.v2_0.link_zoom_account_to_live_class
lms.patches.v2_0.link_zoom_account_to_batch
lms.patches.v2_0.sidebar_for_certified_members
lms.patches.v2_0.move_batch_instructors_to_evaluators
lms.patches.v2_0.enable_programming_exercises_in_sidebar
lms.patches.v2_0.enable_programming_exercises_in_sidebar
lms.patches.v2_0.count_in_program
+18
View File
@@ -0,0 +1,18 @@
import frappe
def execute():
programs = frappe.get_all("LMS Program", pluck="name")
for program in programs:
course_count = frappe.db.count(
"LMS Program Course",
{"parent": program, "parenttype": "LMS Program", "parentfield": "program_courses"},
)
frappe.db.set_value("LMS Program", program, "course_count", course_count)
member_count = frappe.db.count(
"LMS Program Member",
{"parent": program, "parenttype": "LMS Program", "parentfield": "program_members"},
)
frappe.db.set_value("LMS Program", program, "member_count", member_count)