diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index b4a48087..ceb19817 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -6,7 +6,7 @@ on: pull_request: {} jobs: tests: - runs-on: ubuntu-20.04 + runs-on: ubuntu-latest services: redis-cache: image: redis:alpine @@ -32,7 +32,7 @@ jobs: - name: setup python uses: actions/setup-python@v2 with: - python-version: 3.9 + python-version: '3.9' - name: setup node uses: actions/setup-node@v2 with: diff --git a/docker-compose.yml b/docker-compose.yml index 558cb815..c2525759 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -1,12 +1,6 @@ version: "3" services: - redis-cache: - image: redis:alpine - redis-queue: - image: redis:alpine - redis-socketio: - image: redis:alpine mariadb: image: mariadb volumes: @@ -15,18 +9,15 @@ services: - MYSQL_ROOT_PASSWORD=root command: --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci bench: - image: anandology/frappe-bench + image: anandology/frappe-bench:2021.10 volumes: - - .:/home/bench/frappe-bench/apps/school + - .:/opt/frappe-bench/apps/school environment: - FRAPPE_APPS=school - FRAPPE_ALLOW_TESTS=true - FRAPPE_SITE_NAME=frappe.localhost depends_on: - mariadb - - redis-cache - - redis-queue - - redis-socketio ports: - 8000:8000 - 9000:9000 diff --git a/school/lms/dashboard_chart/course_enrollments/course_enrollments.json b/school/lms/dashboard_chart/course_enrollments/course_enrollments.json new file mode 100644 index 00000000..6c8ed3e3 --- /dev/null +++ b/school/lms/dashboard_chart/course_enrollments/course_enrollments.json @@ -0,0 +1,30 @@ +{ + "based_on": "creation", + "chart_name": "Course Enrollments", + "chart_type": "Count", + "creation": "2021-09-30 12:23:09.414853", + "docstatus": 0, + "doctype": "Dashboard Chart", + "document_type": "LMS Batch Membership", + "dynamic_filters_json": "[]", + "filters_json": "[]", + "group_by_type": "Count", + "idx": 0, + "is_public": 1, + "is_standard": 1, + "last_synced_on": "2021-10-17 13:32:21.745498", + "modified": "2021-10-21 17:31:06.997133", + "modified_by": "Administrator", + "module": "LMS", + "name": "Course Enrollments", + "number_of_groups": 0, + "owner": "basawaraj@erpnext.com", + "source": "", + "time_interval": "Daily", + "timeseries": 1, + "timespan": "Last Quarter", + "type": "Line", + "use_report_chart": 0, + "value_based_on": "", + "y_axis": [] +} \ No newline at end of file diff --git a/school/lms/doctype/course_lesson/course_lesson.py b/school/lms/doctype/course_lesson/course_lesson.py index 25427c87..8fbfb0e9 100644 --- a/school/lms/doctype/course_lesson/course_lesson.py +++ b/school/lms/doctype/course_lesson/course_lesson.py @@ -65,11 +65,12 @@ class CourseLesson(Document): @frappe.whitelist() def save_progress(lesson, course, status): - if not frappe.db.exists("LMS Batch Membership", - { - "member": frappe.session.user, - "course": course - }): + membership = frappe.db.exists("LMS Batch Membership", + { + "member": frappe.session.user, + "course": course + }) + if not membership: return if frappe.db.exists("LMS Course Progress", @@ -92,5 +93,8 @@ def save_progress(lesson, course, status): "lesson": lesson, "status": status, }).save(ignore_permissions=True) + course_details = frappe.get_doc("LMS Course", course) - return course_details.get_course_progress() + progress = course_details.get_course_progress() + frappe.db.set_value("LMS Batch Membership", membership, "progress", progress) + return progress diff --git a/school/lms/doctype/lms_batch_membership/lms_batch_membership.json b/school/lms/doctype/lms_batch_membership/lms_batch_membership.json index 7a6a8497..69720d29 100644 --- a/school/lms/doctype/lms_batch_membership/lms_batch_membership.json +++ b/school/lms/doctype/lms_batch_membership/lms_batch_membership.json @@ -5,15 +5,16 @@ "editable_grid": 1, "engine": "InnoDB", "field_order": [ - "batch", + "course", "member", "member_name", "member_username", "column_break_3", - "course", + "batch", "member_type", - "role", - "current_lesson" + "progress", + "current_lesson", + "role" ], "fields": [ { @@ -65,6 +66,7 @@ "fieldname": "course", "fieldtype": "Link", "in_list_view": 1, + "in_standard_filter": 1, "label": "Course", "options": "LMS Course" }, @@ -80,11 +82,18 @@ "fieldtype": "Data", "label": "Memeber Username", "read_only": 1 + }, + { + "fieldname": "progress", + "fieldtype": "Data", + "label": "Progress", + "read_only": 1 } ], "index_web_pages_for_search": 1, "links": [], - "modified": "2021-09-29 15:27:58.765399", + "migration_hash": "fe10c462acf5e727d864305d7ce90e73", + "modified": "2021-10-20 15:10:33.767419", "modified_by": "Administrator", "module": "LMS", "name": "LMS Batch Membership", @@ -105,6 +114,5 @@ ], "quick_entry": 1, "sort_field": "modified", - "sort_order": "DESC", - "track_changes": 1 + "sort_order": "DESC" } \ No newline at end of file diff --git a/school/lms/doctype/lms_course/lms_course.py b/school/lms/doctype/lms_course/lms_course.py index c63b5664..e14bc38e 100644 --- a/school/lms/doctype/lms_course/lms_course.py +++ b/school/lms/doctype/lms_course/lms_course.py @@ -251,7 +251,7 @@ class LMSCourse(Document): membership = frappe.db.get_value("LMS Batch Membership", filters, - ["name", "batch", "current_lesson", "member_type"], + ["name", "batch", "current_lesson", "member_type", "progress"], as_dict=True) if membership and membership.batch: diff --git a/school/lms/report/course_progress_summary/course_progress_summary.py b/school/lms/report/course_progress_summary/course_progress_summary.py index efda989f..a54249e4 100644 --- a/school/lms/report/course_progress_summary/course_progress_summary.py +++ b/school/lms/report/course_progress_summary/course_progress_summary.py @@ -2,7 +2,7 @@ # License: MIT. See LICENSE import frappe -from frappe.utils import rounded +from frappe.utils import cint from frappe import _ def execute(filters=None): @@ -23,21 +23,16 @@ def get_data(filters=None): memberships = frappe.get_all( "LMS Batch Membership", query_filter, - ["name", "course", "member", "member_name"], + ["name", "course", "member", "member_name", "progress"], 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.name, - "course_name": course_details.title, + "course": membership.name, + "course_name": frappe.db.get_value("LMS Course", membership.course, "title"), "member": membership.member, "member_name": membership.member_name, - "progress": rounded(course_details.get_course_progress(membership.member)) + "progress": cint(membership.progress) })) return summary diff --git a/school/lms/web_template/courses_enrolled/__init__.py b/school/lms/web_template/courses_enrolled/__init__.py new file mode 100644 index 00000000..e69de29b diff --git a/school/lms/web_template/courses_enrolled/courses_enrolled.html b/school/lms/web_template/courses_enrolled/courses_enrolled.html new file mode 100644 index 00000000..9290582a --- /dev/null +++ b/school/lms/web_template/courses_enrolled/courses_enrolled.html @@ -0,0 +1,28 @@ +{% set member = frappe.get_doc("User", frappe.session.user) %} +