refactor: sidebar visibility of programs

This commit is contained in:
Jannat Patel
2025-08-20 13:11:22 +05:30
parent 5ec809e3dd
commit 5e607c3b8e
8 changed files with 80 additions and 28 deletions

View File

@@ -4,6 +4,7 @@
import frappe
from frappe.model.document import Document
from lms.lms.doctype.lms_enrollment.lms_enrollment import update_program_progress
from lms.lms.utils import get_course_progress
@@ -19,3 +20,4 @@ class LMSCourseProgress(Document):
"name",
)
frappe.db.set_value("LMS Enrollment", membership, "progress", progress)
update_program_progress(self.member)

View File

@@ -13,7 +13,7 @@ class LMSEnrollment(Document):
self.validate_membership_in_different_batch_same_course()
def on_update(self):
self.update_program_progress()
update_program_progress(self.member)
def validate_membership_in_same_batch(self):
filters = {"member": self.member, "course": self.course, "name": ["!=", self.name]}
@@ -59,21 +59,20 @@ class LMSEnrollment(Document):
)
)
def update_program_progress(self):
programs = frappe.get_all("LMS Program Member", {"member": self.member}, ["parent", "name"])
for program in programs:
total_progress = 0
courses = frappe.get_all("LMS Program Course", {"parent": program.parent}, pluck="course")
for course in courses:
progress = frappe.db.get_value(
"LMS Enrollment", {"course": course, "member": self.member}, "progress"
)
progress = progress or 0
total_progress += progress
def update_program_progress(member):
programs = frappe.get_all("LMS Program Member", {"member": member}, ["parent", "name"])
average_progress = ceil(total_progress / len(courses))
frappe.db.set_value("LMS Program Member", program.name, "progress", average_progress)
for program in programs:
total_progress = 0
courses = frappe.get_all("LMS Program Course", {"parent": program.parent}, pluck="course")
for course in courses:
progress = frappe.db.get_value("LMS Enrollment", {"course": course, "member": member}, "progress")
progress = progress or 0
total_progress += progress
average_progress = ceil(total_progress / len(courses))
frappe.db.set_value("LMS Program Member", program.name, "progress", average_progress)
@frappe.whitelist()

View File

@@ -6,8 +6,8 @@
"doctype": "DocType",
"engine": "InnoDB",
"field_order": [
"published",
"title",
"published",
"column_break_cwjx",
"enforce_course_order",
"column_break_mikl",
@@ -44,12 +44,16 @@
"default": "0",
"fieldname": "published",
"fieldtype": "Check",
"in_list_view": 1,
"in_standard_filter": 1,
"label": "Published"
},
{
"default": "0",
"fieldname": "enforce_course_order",
"fieldtype": "Check",
"in_list_view": 1,
"in_standard_filter": 1,
"label": "Enforce Course Order"
},
{
@@ -67,6 +71,7 @@
{
"fieldname": "course_count",
"fieldtype": "Int",
"in_list_view": 1,
"label": "Course Count"
},
{
@@ -76,6 +81,7 @@
{
"fieldname": "member_count",
"fieldtype": "Int",
"in_list_view": 1,
"label": "Member Count"
},
{
@@ -86,7 +92,7 @@
"grid_page_length": 50,
"index_web_pages_for_search": 1,
"links": [],
"modified": "2025-08-19 17:31:23.516060",
"modified": "2025-08-20 12:28:57.238902",
"modified_by": "sayali@frappe.io",
"module": "LMS",
"name": "LMS Program",
@@ -143,5 +149,6 @@
"sort_field": "creation",
"sort_order": "DESC",
"states": [],
"title_field": "title",
"track_changes": 1
}

View File

@@ -1937,9 +1937,11 @@ def get_programs():
["name", "course_count", "member_count"],
)
programs_to_remove = []
for program in published_programs:
if program.name in [p.name for p in enrolled_programs]:
published_programs.remove(program)
programs_to_remove.append(program)
published_programs = [program for program in published_programs if program not in programs_to_remove]
return {
"enrolled": enrolled_programs,