From 570161b9789792631fc19f9312769b5bbe777725 Mon Sep 17 00:00:00 2001 From: Shivam Mishra Date: Wed, 5 Jun 2019 13:08:53 +0530 Subject: [PATCH] feat: added course progress apis --- erpnext/education/utils.py | 36 +++++++++++++++++++++++++++++++---- erpnext/www/lms/course.html | 8 +++++++- erpnext/www/lms/program.html | 37 +++++++++++++++++++++++------------- erpnext/www/lms/program.py | 8 +++++++- 4 files changed, 70 insertions(+), 19 deletions(-) diff --git a/erpnext/education/utils.py b/erpnext/education/utils.py index 3abb840914..a35cedc8b0 100644 --- a/erpnext/education/utils.py +++ b/erpnext/education/utils.py @@ -249,14 +249,42 @@ def get_student_topic_details(topic, course_name, program): course_enrollment = get_or_create_course_enrollment(course_name, program) progress = student.get_topic_progress(course_enrollment.name, topic) if not progress: - return {'label':'Open', 'indicator': 'blue'} + return None count = sum([activity['is_complete'] for activity in progress]) if count == 0: - return {'label':'Open', 'indicator': 'blue'} + return {'completed': False, 'started': False} elif count == len(progress): - return {'label':'Completed', 'indicator': 'green'} + return {'completed': True, 'started': True} elif count < len(progress): - return {'label':'In Progress', 'indicator': 'orange'} + return {'completed': False, 'started': True} + +def get_student_course_details(course, program): + """ + Return the porgress of a course in a program as well as the content to continue from. + :param topic_name: + :param course_name: + """ + course_progress = [] + for course_topic in course.topics: + topic = frappe.get_doc("Topic", course_topic.topic) + progress = get_student_topic_details(topic, course.name, program) + if progress: + course_progress.append(progress) + + if course_progress: + number_of_completed_topics = sum([activity['completed'] for activity in course_progress]) + total_topics = len(course_progress) + print("course_progress", course_progress) + print("number_of_completed_topics", number_of_completed_topics) + print("total_topics", total_topics) + if number_of_completed_topics == 0: + return {'completed': False, 'started': False} + if number_of_completed_topics == total_topics: + return {'completed': True, 'started': True} + if number_of_completed_topics < total_topics: + return {'completed': False, 'started': True} + + return None def create_student_from_current_user(): user = frappe.get_doc("User", frappe.session.user) diff --git a/erpnext/www/lms/course.html b/erpnext/www/lms/course.html index 199fc169e5..34158c80fe 100644 --- a/erpnext/www/lms/course.html +++ b/erpnext/www/lms/course.html @@ -67,7 +67,13 @@ {% if has_access %} {% else %} diff --git a/erpnext/www/lms/program.html b/erpnext/www/lms/program.html index d364e5e1d9..0ea2dbb462 100644 --- a/erpnext/www/lms/program.html +++ b/erpnext/www/lms/program.html @@ -34,21 +34,32 @@ {% macro card(course, index, length) %}
+ +
{% endmacro %} @@ -57,8 +68,8 @@ {{ hero(program.program_name, program.description, has_access) }}
- {% for course in program.courses %} - {{ card(frappe.get_doc("Course", course.course), loop.index, program.courses|length) }} + {% for course in courses %} + {{ card(course, loop.index, courses|length) }} {% endfor %}
diff --git a/erpnext/www/lms/program.py b/erpnext/www/lms/program.py index 4c3a3fdf66..1242336688 100644 --- a/erpnext/www/lms/program.py +++ b/erpnext/www/lms/program.py @@ -7,10 +7,16 @@ no_cache = 1 def get_context(context): context.education_settings = frappe.get_single("Education Settings") context.program = get_program(frappe.form_dict['program']) + context.courses = [frappe.get_doc("Course", course.course) for course in context.program.courses] context.has_access = utils.allowed_program_access(frappe.form_dict['program']) + context.progress = get_course_progress(context.courses, context.program) def get_program(program_name): try: return frappe.get_doc('Program', program_name) except frappe.DoesNotExistError: - frappe.throw(_("Program {0} does not exist.".format(program_name))) \ No newline at end of file + frappe.throw(_("Program {0} does not exist.".format(program_name))) + +def get_course_progress(courses, program): + progress = {course.name: utils.get_student_course_details(course, program) for course in courses} + return progress \ No newline at end of file