refactor: course list fetching and filters
This commit is contained in:
@@ -242,14 +242,14 @@
|
||||
{
|
||||
"default": "0",
|
||||
"fieldname": "enrollments",
|
||||
"fieldtype": "Data",
|
||||
"fieldtype": "Int",
|
||||
"label": "Enrollments",
|
||||
"read_only": 1
|
||||
},
|
||||
{
|
||||
"default": "0",
|
||||
"fieldname": "lessons",
|
||||
"fieldtype": "Data",
|
||||
"fieldtype": "Int",
|
||||
"label": "Lessons",
|
||||
"read_only": 1
|
||||
},
|
||||
@@ -298,7 +298,7 @@
|
||||
}
|
||||
],
|
||||
"make_attachments_public": 1,
|
||||
"modified": "2025-02-24 11:50:58.325804",
|
||||
"modified": "2025-03-04 15:43:25.151554",
|
||||
"modified_by": "Administrator",
|
||||
"module": "LMS",
|
||||
"name": "LMS Course",
|
||||
|
||||
121
lms/lms/utils.py
121
lms/lms/utils.py
@@ -985,17 +985,126 @@ def change_currency(amount, currency, country=None):
|
||||
|
||||
|
||||
@frappe.whitelist(allow_guest=True)
|
||||
def get_courses():
|
||||
def get_courses(filters=None, start=0, page_length=20):
|
||||
"""Returns the list of courses."""
|
||||
courses = []
|
||||
course_list = frappe.get_all("LMS Course", pluck="name")
|
||||
for course in course_list:
|
||||
courses.append(get_course_details(course))
|
||||
|
||||
courses = get_categorized_courses(courses)
|
||||
if not filters:
|
||||
filters = {}
|
||||
|
||||
filters, or_filters, show_featured = update_course_filters(filters)
|
||||
fields = get_course_fields()
|
||||
|
||||
courses = frappe.get_all(
|
||||
"LMS Course",
|
||||
filters=filters,
|
||||
fields=fields,
|
||||
or_filters=or_filters,
|
||||
order_by="enrollments desc",
|
||||
start=start,
|
||||
page_length=page_length,
|
||||
)
|
||||
if show_featured:
|
||||
courses = get_featured_courses(filters, or_filters, fields) + courses
|
||||
|
||||
courses = get_course_card_details(courses)
|
||||
return courses
|
||||
|
||||
|
||||
def get_course_card_details(courses):
|
||||
for course in courses:
|
||||
course.instructors = get_instructors(course.name)
|
||||
|
||||
if course.paid_course and course.published == 1:
|
||||
course.amount, course.currency = check_multicurrency(
|
||||
course.course_price, course.currency, None, course.amount_usd
|
||||
)
|
||||
course.price = fmt_money(course.amount, 0, course.currency)
|
||||
|
||||
return courses
|
||||
|
||||
|
||||
def get_course_or_filters(filters):
|
||||
or_filters = {}
|
||||
or_filters.update({"title": filters.get("title")})
|
||||
or_filters.update({"short_introduction": filters.get("title")})
|
||||
or_filters.update({"description": filters.get("title")})
|
||||
or_filters.update({"tags": filters.get("title")})
|
||||
return or_filters
|
||||
|
||||
|
||||
def update_course_filters(filters):
|
||||
or_filters = {}
|
||||
show_featured = False
|
||||
|
||||
if filters.get("title"):
|
||||
or_filters = get_course_or_filters(filters)
|
||||
del filters["title"]
|
||||
|
||||
if filters.get("enrolled"):
|
||||
enrolled_courses = frappe.get_all(
|
||||
"LMS Enrollment", {"member": frappe.session.user}, pluck="course"
|
||||
)
|
||||
filters.update({"name": ["in", enrolled_courses]})
|
||||
del filters["enrolled"]
|
||||
|
||||
if filters.get("created"):
|
||||
created_courses = frappe.get_all(
|
||||
"Course Instructor", {"instructor": frappe.session.user}, pluck="parent"
|
||||
)
|
||||
filters.update({"name": ["in", created_courses]})
|
||||
del filters["created"]
|
||||
|
||||
if filters.get("live"):
|
||||
filters.update({"featured": 0})
|
||||
show_featured = True
|
||||
del filters["live"]
|
||||
|
||||
if filters.get("certification"):
|
||||
or_filters.update({"enable_certification": 1})
|
||||
or_filters.update({"paid_certificate": 1})
|
||||
del filters["certification"]
|
||||
|
||||
return filters, or_filters, show_featured
|
||||
|
||||
|
||||
def get_featured_courses(filters, or_filters, fields):
|
||||
filters.update({"featured": 1})
|
||||
featured_courses = frappe.get_all(
|
||||
"LMS Course",
|
||||
filters=filters,
|
||||
fields=fields,
|
||||
or_filters=or_filters,
|
||||
order_by="enrollments desc",
|
||||
)
|
||||
return featured_courses
|
||||
|
||||
|
||||
def get_course_fields():
|
||||
return [
|
||||
"name",
|
||||
"title",
|
||||
"tags",
|
||||
"image",
|
||||
"short_introduction",
|
||||
"published",
|
||||
"upcoming",
|
||||
"featured",
|
||||
"disable_self_learning",
|
||||
"published_on",
|
||||
"category",
|
||||
"status",
|
||||
"paid_course",
|
||||
"paid_certificate",
|
||||
"course_price",
|
||||
"currency",
|
||||
"amount_usd",
|
||||
"enable_certification",
|
||||
"lessons",
|
||||
"enrollments",
|
||||
"rating",
|
||||
]
|
||||
|
||||
|
||||
@frappe.whitelist(allow_guest=True)
|
||||
def get_course_details(course):
|
||||
course_details = frappe.db.get_value(
|
||||
|
||||
Reference in New Issue
Block a user