feat: program self enrollment
This commit is contained in:
@@ -161,8 +161,8 @@
|
||||
"link_fieldname": "payment"
|
||||
}
|
||||
],
|
||||
"modified": "2025-03-13 15:31:38.019002",
|
||||
"modified_by": "Administrator",
|
||||
"modified": "2025-08-19 10:33:15.457678",
|
||||
"modified_by": "sayali@frappe.io",
|
||||
"module": "LMS",
|
||||
"name": "LMS Payment",
|
||||
"owner": "Administrator",
|
||||
@@ -180,9 +180,11 @@
|
||||
"write": 1
|
||||
}
|
||||
],
|
||||
"row_format": "Dynamic",
|
||||
"show_title_field_in_link": 1,
|
||||
"sort_field": "modified",
|
||||
"sort_order": "DESC",
|
||||
"states": [],
|
||||
"title_field": "billing_name"
|
||||
}
|
||||
"title_field": "billing_name",
|
||||
"track_changes": 1
|
||||
}
|
||||
|
||||
@@ -11,7 +11,6 @@
|
||||
"column_break_cwjx",
|
||||
"enforce_course_order",
|
||||
"column_break_mikl",
|
||||
"allow_self_enrollment",
|
||||
"section_break_vhhu",
|
||||
"program_courses",
|
||||
"program_members",
|
||||
@@ -61,12 +60,6 @@
|
||||
"fieldname": "column_break_cwjx",
|
||||
"fieldtype": "Column Break"
|
||||
},
|
||||
{
|
||||
"default": "0",
|
||||
"fieldname": "allow_self_enrollment",
|
||||
"fieldtype": "Check",
|
||||
"label": "Allow Self Enrollment"
|
||||
},
|
||||
{
|
||||
"fieldname": "section_break_pppe",
|
||||
"fieldtype": "Section Break"
|
||||
@@ -93,7 +86,7 @@
|
||||
"grid_page_length": 50,
|
||||
"index_web_pages_for_search": 1,
|
||||
"links": [],
|
||||
"modified": "2025-08-18 13:08:04.993241",
|
||||
"modified": "2025-08-19 17:31:23.516060",
|
||||
"modified_by": "sayali@frappe.io",
|
||||
"module": "LMS",
|
||||
"name": "LMS Program",
|
||||
|
||||
+50
-64
@@ -1118,6 +1118,7 @@ def get_course_details(course):
|
||||
"lessons",
|
||||
"enrollments",
|
||||
"rating",
|
||||
"card_gradient",
|
||||
],
|
||||
as_dict=1,
|
||||
)
|
||||
@@ -1270,7 +1271,6 @@ def get_lesson(course, chapter, lesson):
|
||||
progress = get_progress(course, lesson_details.name)
|
||||
|
||||
lesson_details.chapter_title = frappe.db.get_value("Course Chapter", chapter_name, "title")
|
||||
lesson_details.rendered_content = render_html(lesson_details)
|
||||
neighbours = get_neighbour_lesson(course, chapter, lesson)
|
||||
lesson_details.next = neighbours["next"]
|
||||
lesson_details.progress = progress
|
||||
@@ -1933,11 +1933,13 @@ def get_programs():
|
||||
"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]
|
||||
|
||||
for program in published_programs:
|
||||
if program.name in [p.name for p in enrolled_programs]:
|
||||
published_programs.remove(program)
|
||||
|
||||
return {
|
||||
"enrolled": enrolled_programs,
|
||||
@@ -1945,71 +1947,55 @@ def get_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"
|
||||
)
|
||||
program.courses = []
|
||||
previous_progress = 0
|
||||
for i, course in enumerate(program_courses):
|
||||
details = get_course_details(course.course)
|
||||
if i == 0:
|
||||
details.eligible = True
|
||||
elif previous_progress == 100:
|
||||
details.eligible = True
|
||||
else:
|
||||
details.eligible = False
|
||||
@frappe.whitelist()
|
||||
def get_program_details(program_name):
|
||||
program = frappe.db.get_value(
|
||||
"LMS Program",
|
||||
program_name,
|
||||
[
|
||||
"name",
|
||||
"member_count",
|
||||
"course_count",
|
||||
"published",
|
||||
"allow_self_enrollment",
|
||||
"enforce_course_order",
|
||||
],
|
||||
as_dict=1,
|
||||
)
|
||||
program_courses = frappe.get_all(
|
||||
"LMS Program Course", {"parent": program_name}, ["course"], order_by="idx"
|
||||
)
|
||||
program.courses = []
|
||||
previous_progress = 0
|
||||
for i, course in enumerate(program_courses):
|
||||
details = get_course_details(course.course)
|
||||
if i == 0:
|
||||
details.eligible = True
|
||||
elif previous_progress == 100:
|
||||
details.eligible = True
|
||||
else:
|
||||
details.eligible = False
|
||||
|
||||
previous_progress = details.membership.progress if details.membership else 0
|
||||
program.courses.append(details)
|
||||
"""
|
||||
previous_progress = details.membership.progress if details.membership else 0
|
||||
program.courses.append(details)
|
||||
return program
|
||||
|
||||
|
||||
@frappe.whitelist()
|
||||
def enroll_in_program_course(program, course):
|
||||
enrollment = frappe.db.exists("LMS Enrollment", {"member": frappe.session.user, "course": course})
|
||||
|
||||
if enrollment:
|
||||
enrollment = frappe.db.get_value("LMS Enrollment", enrollment, ["name", "current_lesson"], as_dict=1)
|
||||
enrollment.current_lesson = get_lesson_index(enrollment.current_lesson)
|
||||
return enrollment
|
||||
|
||||
program_courses = frappe.get_all(
|
||||
"LMS Program Course", {"parent": program}, ["course", "idx"], order_by="idx"
|
||||
)
|
||||
current_course_idx = [
|
||||
program_course.idx for program_course in program_courses if program_course.course == course
|
||||
][0]
|
||||
|
||||
for program_course in program_courses:
|
||||
if program_course.idx < current_course_idx:
|
||||
enrollment = frappe.db.get_value(
|
||||
"LMS Enrollment",
|
||||
{"member": frappe.session.user, "course": program_course.course},
|
||||
["name", "progress"],
|
||||
as_dict=1,
|
||||
)
|
||||
if enrollment and enrollment.progress != 100:
|
||||
frappe.throw(
|
||||
_("Please complete the previous courses in the program to enroll in this course.")
|
||||
)
|
||||
elif not enrollment:
|
||||
frappe.throw(
|
||||
_("Please complete the previous courses in the program to enroll in this course.")
|
||||
)
|
||||
else:
|
||||
continue
|
||||
|
||||
enrollment = frappe.new_doc("LMS Enrollment")
|
||||
enrollment.update(
|
||||
{
|
||||
"member": frappe.session.user,
|
||||
"course": course,
|
||||
}
|
||||
)
|
||||
enrollment.save()
|
||||
return enrollment
|
||||
def enroll_in_program(program):
|
||||
if frappe.session.user == "Guest":
|
||||
frappe.throw(_("Please login to enroll in the program."))
|
||||
if not frappe.db.exists("LMS Program Member", {"parent": program, "member": frappe.session.user}):
|
||||
program_member = frappe.new_doc("LMS Program Member")
|
||||
program_member.update(
|
||||
{
|
||||
"parent": program,
|
||||
"parenttype": "LMS Program",
|
||||
"parentfield": "members",
|
||||
"member": frappe.session.user,
|
||||
}
|
||||
)
|
||||
program_member.save(ignore_permissions=True)
|
||||
|
||||
|
||||
@frappe.whitelist(allow_guest=True)
|
||||
|
||||
Reference in New Issue
Block a user