feat: course progress summary
This commit is contained in:
@@ -329,6 +329,8 @@ class LMSCourse(Document):
|
||||
def get_course_progress(self, member=None):
|
||||
""" Returns the course progress of the session user """
|
||||
lesson_count = len(self.get_lessons())
|
||||
if not lesson_count:
|
||||
return 0
|
||||
completed_lessons = frappe.db.count("LMS Course Progress",
|
||||
{
|
||||
"course": self.name,
|
||||
@@ -336,8 +338,6 @@ class LMSCourse(Document):
|
||||
"status": "Complete"
|
||||
})
|
||||
precision = cint(frappe.db.get_default("float_precision")) or 3
|
||||
if not lesson_count:
|
||||
return 0
|
||||
return flt(((completed_lessons/lesson_count) * 100), precision)
|
||||
|
||||
def get_neighbours(self, current, lessons):
|
||||
|
||||
0
community/lms/report/__init__.py
Normal file
0
community/lms/report/__init__.py
Normal file
@@ -0,0 +1,14 @@
|
||||
// Copyright (c) 2016, FOSS United and contributors
|
||||
// For license information, please see license.txt
|
||||
/* eslint-disable */
|
||||
|
||||
frappe.query_reports["Course Progress Summary"] = {
|
||||
"filters": [
|
||||
{
|
||||
"fieldname": "course",
|
||||
"label": __("Course"),
|
||||
"fieldtype": "Link",
|
||||
"options": "LMS Course"
|
||||
}
|
||||
]
|
||||
};
|
||||
@@ -0,0 +1,26 @@
|
||||
{
|
||||
"add_total_row": 0,
|
||||
"columns": [],
|
||||
"creation": "2021-09-28 15:31:27.205036",
|
||||
"disable_prepared_report": 0,
|
||||
"disabled": 0,
|
||||
"docstatus": 0,
|
||||
"doctype": "Report",
|
||||
"filters": [],
|
||||
"idx": 0,
|
||||
"is_standard": "Yes",
|
||||
"modified": "2021-09-28 17:09:40.761819",
|
||||
"modified_by": "Administrator",
|
||||
"module": "LMS",
|
||||
"name": "Course Progress Summary",
|
||||
"owner": "Administrator",
|
||||
"prepared_report": 0,
|
||||
"ref_doctype": "LMS Batch Membership",
|
||||
"report_name": "Course Progress Summary",
|
||||
"report_type": "Script Report",
|
||||
"roles": [
|
||||
{
|
||||
"role": "System Manager"
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,106 @@
|
||||
# Copyright (c) 2013, FOSS United and contributors
|
||||
# License: MIT. See LICENSE
|
||||
|
||||
import frappe
|
||||
from frappe.utils import rounded
|
||||
from frappe import _
|
||||
|
||||
def execute(filters=None):
|
||||
columns, data = [], []
|
||||
columns = get_columns()
|
||||
data = get_data(filters)
|
||||
charts = get_charts(data)
|
||||
return columns, data, [], charts
|
||||
|
||||
def get_data(filters=None):
|
||||
summary = []
|
||||
query_filter = {}
|
||||
if filters:
|
||||
query_filter = {
|
||||
"course": filters.course
|
||||
}
|
||||
|
||||
memberships = frappe.get_all(
|
||||
"LMS Batch Membership",
|
||||
query_filter,
|
||||
["name", "course", "member", "member_name"],
|
||||
order_by="course")
|
||||
|
||||
current_course = memberships[0].course
|
||||
for membership in memberships:
|
||||
if current_course != membership.course:
|
||||
current_course = membership.course
|
||||
|
||||
course_details = frappe.get_doc("LMS Course", current_course)
|
||||
summary.append(frappe._dict({
|
||||
"course": course_details.title,
|
||||
"member": membership.member_name,
|
||||
"progress": rounded(course_details.get_course_progress(membership.member))
|
||||
}))
|
||||
|
||||
return summary
|
||||
|
||||
def get_columns():
|
||||
return [
|
||||
{
|
||||
"fieldname": "course",
|
||||
"fieldtype": "Link",
|
||||
"label": _("Course"),
|
||||
"options": "LMS Course",
|
||||
"width": 300
|
||||
},
|
||||
{
|
||||
"fieldname": "member",
|
||||
"fieldtype": "Link",
|
||||
"label": _("Member"),
|
||||
"options": "User",
|
||||
"width": 150
|
||||
},
|
||||
{
|
||||
"fieldname": "progress",
|
||||
"fieldtype": "Data",
|
||||
"label": _("Progress (%)"),
|
||||
"width": 150
|
||||
}
|
||||
]
|
||||
|
||||
def get_charts(data):
|
||||
if not data:
|
||||
return None
|
||||
|
||||
labels = []
|
||||
completed = 0
|
||||
less_than_hundred = 0
|
||||
less_than_seventy = 0
|
||||
less_than_forty = 0
|
||||
less_than_ten = 0
|
||||
|
||||
|
||||
for row in data:
|
||||
if row.progress == 100:
|
||||
completed += 1
|
||||
elif row.progress < 100 and row.progress > 70:
|
||||
less_than_hundred += 1
|
||||
elif row.progress < 70 and row.progress > 40:
|
||||
less_than_seventy += 1
|
||||
elif row.progress < 40 and row.progress > 10:
|
||||
less_than_forty += 1
|
||||
elif row.progress < 10:
|
||||
less_than_ten += 1
|
||||
|
||||
|
||||
|
||||
charts = {
|
||||
"data": {
|
||||
"labels": ["0-10", "10-40", "40-70", "70-99", "100"],
|
||||
"datasets": [
|
||||
{
|
||||
"name": "Progress (%)",
|
||||
"values": [less_than_ten, less_than_forty, less_than_seventy, less_than_hundred, completed]
|
||||
}
|
||||
]
|
||||
},
|
||||
"type": "pie",
|
||||
"colors": ["#ff0e0e", "#ff9966", "#ffcc00", "#99cc33", "#339900"]
|
||||
}
|
||||
return charts
|
||||
Reference in New Issue
Block a user