diff --git a/lms/lms/api.py b/lms/lms/api.py index d58fc09d..480809bc 100644 --- a/lms/lms/api.py +++ b/lms/lms/api.py @@ -32,13 +32,13 @@ def submit_solution(exercise, code): def save_current_lesson(course_name, lesson_name): """Saves the current lesson for a student/mentor.""" name = frappe.get_value( - doctype="LMS Batch Membership", + doctype="LMS Enrollment", filters={"course": course_name, "member": frappe.session.user}, fieldname="name", ) if not name: return - doc = frappe.get_doc("LMS Batch Membership", name) + doc = frappe.get_doc("LMS Enrollment", name) doc.current_lesson = lesson_name doc.save(ignore_permissions=True) return {"current_lesson": doc.current_lesson} diff --git a/lms/lms/dashboard_chart/course_enrollments/course_enrollments.json b/lms/lms/dashboard_chart/course_enrollments/course_enrollments.json index b084b91e..37fa661e 100644 --- a/lms/lms/dashboard_chart/course_enrollments/course_enrollments.json +++ b/lms/lms/dashboard_chart/course_enrollments/course_enrollments.json @@ -7,7 +7,7 @@ "custom_options": "{\"type\": \"line\", \"axisOptions\": {\"xIsSeries\": 1}, \"lineOptions\": {\"regionFill\": 1}}", "docstatus": 0, "doctype": "Dashboard Chart", - "document_type": "LMS Batch Membership", + "document_type": "LMS Enrollment", "dynamic_filters_json": "[]", "filters_json": "[]", "group_by_type": "Count", @@ -15,7 +15,7 @@ "is_public": 1, "is_standard": 1, "last_synced_on": "2022-10-20 10:46:56.859520", - "modified": "2022-10-20 11:30:26.863008", + "modified": "2022-10-20 11:30:26.863009", "modified_by": "Administrator", "module": "LMS", "name": "Course Enrollments", diff --git a/lms/lms/doctype/cohort/cohort.py b/lms/lms/doctype/cohort/cohort.py index eccc2391..195b32d0 100644 --- a/lms/lms/doctype/cohort/cohort.py +++ b/lms/lms/doctype/cohort/cohort.py @@ -16,7 +16,7 @@ class Cohort(Document): if include_counts: mentors = self._get_subgroup_counts("Cohort Mentor") - students = self._get_subgroup_counts("LMS Batch Membership") + students = self._get_subgroup_counts("LMS Enrollment") join_requests = self._get_subgroup_counts("Cohort Join Request", status="Pending") for s in subgroups: s.num_mentors = mentors.get(s.name, 0) @@ -56,7 +56,7 @@ class Cohort(Document): return { "subgroups": self._get_count("Cohort Subgroup"), "mentors": self._get_count("Cohort Mentor"), - "students": self._get_count("LMS Batch Membership"), + "students": self._get_count("LMS Enrollment"), "join_requests": self._get_count("Cohort Join Request", status="Pending"), } diff --git a/lms/lms/doctype/cohort_join_request/cohort_join_request.py b/lms/lms/doctype/cohort_join_request/cohort_join_request.py index b0f214ac..de53e06e 100644 --- a/lms/lms/doctype/cohort_join_request/cohort_join_request.py +++ b/lms/lms/doctype/cohort_join_request/cohort_join_request.py @@ -13,7 +13,7 @@ class CohortJoinRequest(Document): def ensure_student(self): # case 1 - user is already a member q = { - "doctype": "LMS Batch Membership", + "doctype": "LMS Enrollment", "cohort": self.cohort, "subgroup": self.subgroup, "member": self.email, @@ -26,21 +26,21 @@ class CohortJoinRequest(Document): cohort = frappe.get_doc("Cohort", self.cohort) q = { - "doctype": "LMS Batch Membership", + "doctype": "LMS Enrollment", "course": cohort.course, "member": self.email, "member_type": "Student", } name = frappe.db.exists(q) if name: - doc = frappe.get_doc("LMS Batch Membership", name) + doc = frappe.get_doc("LMS Enrollment", name) doc.cohort = self.cohort doc.subgroup = self.subgroup doc.save(ignore_permissions=True) else: # case 3 - user has not signed up for this course yet data = { - "doctype": "LMS Batch Membership", + "doctype": "LMS Enrollment", "course": cohort.course, "cohort": self.cohort, "subgroup": self.subgroup, diff --git a/lms/lms/doctype/cohort_subgroup/cohort_subgroup.py b/lms/lms/doctype/cohort_subgroup/cohort_subgroup.py index ebc8a452..f85db086 100644 --- a/lms/lms/doctype/cohort_subgroup/cohort_subgroup.py +++ b/lms/lms/doctype/cohort_subgroup/cohort_subgroup.py @@ -23,7 +23,7 @@ class CohortSubgroup(Document): def has_student(self, email): """Check if given user is a student of this subgroup.""" - q = {"doctype": "LMS Batch Membership", "subgroup": self.name, "member": email} + q = {"doctype": "LMS Enrollment", "subgroup": self.name, "member": email} return frappe.db.exists(q) def has_join_request(self, email): @@ -45,7 +45,7 @@ class CohortSubgroup(Document): def get_students(self): emails = frappe.get_all( - "LMS Batch Membership", + "LMS Enrollment", filters={"subgroup": self.name}, fields=["member"], pluck="member", diff --git a/lms/lms/doctype/course_lesson/course_lesson.py b/lms/lms/doctype/course_lesson/course_lesson.py index 9ff38e84..b2f2475f 100644 --- a/lms/lms/doctype/course_lesson/course_lesson.py +++ b/lms/lms/doctype/course_lesson/course_lesson.py @@ -89,7 +89,7 @@ class CourseLesson(Document): @frappe.whitelist() def save_progress(lesson, course, status): membership = frappe.db.exists( - "LMS Batch Membership", {"member": frappe.session.user, "course": course} + "LMS Enrollment", {"member": frappe.session.user, "course": course} ) if not membership: return 0 @@ -120,7 +120,7 @@ def save_progress(lesson, course, status): ).save(ignore_permissions=True) progress = get_course_progress(course) - frappe.db.set_value("LMS Batch Membership", membership, "progress", progress) + frappe.db.set_value("LMS Enrollment", membership, "progress", progress) return progress diff --git a/lms/lms/doctype/exercise_latest_submission/exercise_latest_submission.json b/lms/lms/doctype/exercise_latest_submission/exercise_latest_submission.json index b92bc3e1..e8c3e61d 100644 --- a/lms/lms/doctype/exercise_latest_submission/exercise_latest_submission.json +++ b/lms/lms/doctype/exercise_latest_submission/exercise_latest_submission.json @@ -40,10 +40,10 @@ "options": "Correct\nIncorrect" }, { - "fieldname": "batch", + "fieldname": "batch_old", "fieldtype": "Link", - "label": "Batch", - "options": "LMS Batch" + "label": "Batch Old", + "options": "LMS Batch Old" }, { "fieldname": "column_break_4", @@ -110,7 +110,7 @@ "fieldname": "member", "fieldtype": "Link", "label": "Member", - "options": "LMS Batch Membership" + "options": "LMS Enrollment" }, { "fetch_from": "member.member", @@ -141,7 +141,7 @@ ], "index_web_pages_for_search": 1, "links": [], - "modified": "2021-12-08 22:58:46.312861", + "modified": "2021-12-08 22:58:46.312863", "modified_by": "Administrator", "module": "LMS", "name": "Exercise Latest Submission", diff --git a/lms/lms/doctype/exercise_submission/exercise_submission.json b/lms/lms/doctype/exercise_submission/exercise_submission.json index f34d3f1a..6fb5102b 100644 --- a/lms/lms/doctype/exercise_submission/exercise_submission.json +++ b/lms/lms/doctype/exercise_submission/exercise_submission.json @@ -44,10 +44,10 @@ "read_only": 1 }, { - "fieldname": "batch", + "fieldname": "batch_old", "fieldtype": "Link", - "label": "Batch", - "options": "LMS Batch" + "label": "Batch Old", + "options": "LMS Batch Old" }, { "fetch_from": "exercise.lesson", @@ -96,12 +96,12 @@ "fieldname": "member", "fieldtype": "Link", "label": "Member", - "options": "LMS Batch Membership" + "options": "LMS Enrollment" } ], "index_web_pages_for_search": 1, "links": [], - "modified": "2021-12-08 22:25:05.809376", + "modified": "2021-12-08 22:25:05.809377", "modified_by": "Administrator", "module": "LMS", "name": "Exercise Submission", diff --git a/lms/lms/doctype/lms_batch/__init__.py b/lms/lms/doctype/lms_batch_old/__init__.py similarity index 100% rename from lms/lms/doctype/lms_batch/__init__.py rename to lms/lms/doctype/lms_batch_old/__init__.py diff --git a/lms/lms/doctype/lms_batch/lms_batch.js b/lms/lms/doctype/lms_batch_old/lms_batch_old.js similarity index 79% rename from lms/lms/doctype/lms_batch/lms_batch.js rename to lms/lms/doctype/lms_batch_old/lms_batch_old.js index 25dbb60a..8c9c7d89 100644 --- a/lms/lms/doctype/lms_batch/lms_batch.js +++ b/lms/lms/doctype/lms_batch_old/lms_batch_old.js @@ -1,7 +1,7 @@ // Copyright (c) 2021, FOSS United and contributors // For license information, please see license.txt -frappe.ui.form.on("LMS Batch", { +frappe.ui.form.on("LMS Batch Old", { // refresh: function(frm) { // } }); diff --git a/lms/lms/doctype/lms_batch/lms_batch.json b/lms/lms/doctype/lms_batch_old/lms_batch_old.json similarity index 97% rename from lms/lms/doctype/lms_batch/lms_batch.json rename to lms/lms/doctype/lms_batch_old/lms_batch_old.json index 8d165435..dbe24d1c 100644 --- a/lms/lms/doctype/lms_batch/lms_batch.json +++ b/lms/lms/doctype/lms_batch_old/lms_batch_old.json @@ -118,14 +118,14 @@ "links": [ { "group": "Members", - "link_doctype": "LMS Batch Membership", + "link_doctype": "LMS Enrollment", "link_fieldname": "batch" } ], "modified": "2022-09-28 18:43:22.955907", "modified_by": "Administrator", "module": "LMS", - "name": "LMS Batch", + "name": "LMS Batch Old", "naming_rule": "Expression", "owner": "Administrator", "permissions": [ diff --git a/lms/lms/doctype/lms_batch/lms_batch.py b/lms/lms/doctype/lms_batch_old/lms_batch_old.py similarity index 84% rename from lms/lms/doctype/lms_batch/lms_batch.py rename to lms/lms/doctype/lms_batch_old/lms_batch_old.py index 6e005024..71dfb0ce 100644 --- a/lms/lms/doctype/lms_batch/lms_batch.py +++ b/lms/lms/doctype/lms_batch_old/lms_batch_old.py @@ -5,7 +5,7 @@ import frappe from frappe import _ from frappe.model.document import Document -from lms.lms.doctype.lms_batch_membership.lms_batch_membership import create_membership +from lms.lms.doctype.lms_enrollment.lms_enrollment import create_membership from lms.lms.utils import is_mentor @@ -31,16 +31,16 @@ class LMSBatch(Document): filters = {"batch": self.name, "member": email} if member_type: filters["member_type"] = member_type - return frappe.db.exists("LMS Batch Membership", filters) + return frappe.db.exists("LMS Enrollment", filters) def get_membership(self, email): """Returns the membership document of given user.""" name = frappe.get_value( - doctype="LMS Batch Membership", + doctype="LMS Enrollment", filters={"batch": self.name, "member": email}, fieldname="name", ) - return frappe.get_doc("LMS Batch Membership", name) + return frappe.get_doc("LMS Enrollment", name) def get_current_lesson(self, user): """Returns the name of the current lesson for the given user.""" @@ -64,10 +64,10 @@ def save_message(message, batch): def switch_batch(course_name, email, batch_name): """Switches the user from the current batch of the course to a new batch.""" membership = frappe.get_last_doc( - "LMS Batch Membership", filters={"course": course_name, "member": email} + "LMS Enrollment", filters={"course": course_name, "member": email} ) - batch = frappe.get_doc("LMS Batch", batch_name) + batch = frappe.get_doc("LMS Batch Old", batch_name) if not batch: raise ValueError(f"Invalid Batch: {batch_name}") @@ -78,7 +78,7 @@ def switch_batch(course_name, email, batch_name): print(f"{email} is already a member of {batch.title}") return - old_batch = frappe.get_doc("LMS Batch", membership.batch) + old_batch = frappe.get_doc("LMS Batch Old", membership.batch) membership.batch = batch_name membership.save() diff --git a/lms/lms/doctype/lms_batch/test_lms_batch.py b/lms/lms/doctype/lms_batch_old/test_lms_batch_old.py similarity index 72% rename from lms/lms/doctype/lms_batch/test_lms_batch.py rename to lms/lms/doctype/lms_batch_old/test_lms_batch_old.py index 00083448..e3dd1283 100644 --- a/lms/lms/doctype/lms_batch/test_lms_batch.py +++ b/lms/lms/doctype/lms_batch_old/test_lms_batch_old.py @@ -5,5 +5,5 @@ import unittest -class TestLMSBatch(unittest.TestCase): +class TestLMSBatchOld(unittest.TestCase): pass diff --git a/lms/lms/doctype/lms_certificate_request/lms_certificate_request.py b/lms/lms/doctype/lms_certificate_request/lms_certificate_request.py index 180d173b..f976596c 100644 --- a/lms/lms/doctype/lms_certificate_request/lms_certificate_request.py +++ b/lms/lms/doctype/lms_certificate_request/lms_certificate_request.py @@ -108,7 +108,7 @@ def create_certificate_request( course, date, day, start_time, end_time, class_name=None ): is_member = frappe.db.exists( - {"doctype": "LMS Batch Membership", "course": course, "member": frappe.session.user} + {"doctype": "LMS Enrollment", "course": course, "member": frappe.session.user} ) if not is_member: diff --git a/lms/lms/doctype/lms_class/lms_class.py b/lms/lms/doctype/lms_class/lms_class.py index b625d01b..29e0c414 100644 --- a/lms/lms/doctype/lms_class/lms_class.py +++ b/lms/lms/doctype/lms_class/lms_class.py @@ -57,7 +57,7 @@ class LMSClass(Document): for course in self.courses: for student in self.students: filters = { - "doctype": "LMS Batch Membership", + "doctype": "LMS Enrollment", "member": student.student, "course": course.course, } diff --git a/lms/lms/doctype/lms_course/lms_course.json b/lms/lms/doctype/lms_course/lms_course.json index 69deefc3..5e981b10 100644 --- a/lms/lms/doctype/lms_course/lms_course.json +++ b/lms/lms/doctype/lms_course/lms_course.json @@ -239,7 +239,7 @@ }, { "group": "Batches", - "link_doctype": "LMS Batch", + "link_doctype": "LMS Batch Old", "link_fieldname": "course" }, { @@ -254,7 +254,7 @@ } ], "make_attachments_public": 1, - "modified": "2023-08-02 12:07:26.354110", + "modified": "2023-08-02 12:07:26.354111", "modified_by": "Administrator", "module": "LMS", "name": "LMS Course", diff --git a/lms/lms/doctype/lms_course/lms_course.py b/lms/lms/doctype/lms_course/lms_course.py index d4144e0a..6fc6b169 100644 --- a/lms/lms/doctype/lms_course/lms_course.py +++ b/lms/lms/doctype/lms_course/lms_course.py @@ -119,19 +119,17 @@ class LMSCourse(Document): return batch_name = frappe.get_value( - doctype="LMS Batch Membership", + doctype="LMS Enrollment", filters={"course": self.name, "member_type": "Student", "member": email}, fieldname="batch", ) - return batch_name and frappe.get_doc("LMS Batch", batch_name) + return batch_name and frappe.get_doc("LMS Batch Old", batch_name) def get_batches(self, mentor=None): - batches = frappe.get_all("LMS Batch", {"course": self.name}) + batches = frappe.get_all("LMS Batch Old", {"course": self.name}) if mentor: # TODO: optimize this - memberships = frappe.db.get_all( - "LMS Batch Membership", {"member": mentor}, ["batch"] - ) + memberships = frappe.db.get_all("LMS Enrollment", {"member": mentor}, ["batch"]) batch_names = {m.batch for m in memberships} return [b for b in batches if b.name in batch_names] @@ -162,10 +160,12 @@ class LMSCourse(Document): def get_all_memberships(self, member): all_memberships = frappe.get_all( - "LMS Batch Membership", {"member": member, "course": self.name}, ["batch"] + "LMS Enrollment", {"member": member, "course": self.name}, ["batch"] ) for membership in all_memberships: - membership.batch_title = frappe.db.get_value("LMS Batch", membership.batch, "title") + membership.batch_title = frappe.db.get_value( + "LMS Batch Old", membership.batch, "title" + ) return all_memberships @@ -452,7 +452,7 @@ def verify_payment(response, course, address, order_id): def create_membership(address, response, course, client): try: address_name = save_address(address) - membership = frappe.new_doc("LMS Batch Membership") + membership = frappe.new_doc("LMS Enrollment") payment = client.payment.fetch(response["razorpay_payment_id"]) membership.update( diff --git a/lms/lms/doctype/lms_course/test_lms_course.py b/lms/lms/doctype/lms_course/test_lms_course.py index 7ad6f20a..c2345ce8 100644 --- a/lms/lms/doctype/lms_course/test_lms_course.py +++ b/lms/lms/doctype/lms_course/test_lms_course.py @@ -36,8 +36,8 @@ class TestLMSCourse(unittest.TestCase): frappe.db.delete("Exercise Submission", {"course": "test-course"}) frappe.db.delete("Exercise Latest Submission", {"course": "test-course"}) frappe.db.delete("LMS Exercise", {"course": "test-course"}) - frappe.db.delete("LMS Batch Membership", {"course": "test-course"}) - frappe.db.delete("LMS Batch", {"course": "test-course"}) + frappe.db.delete("LMS Enrollment", {"course": "test-course"}) + frappe.db.delete("LMS Batch Old", {"course": "test-course"}) frappe.db.delete("LMS Course Mentor Mapping", {"course": "test-course"}) frappe.db.delete("Course Instructor", {"parent": "test-course"}) frappe.db.sql("delete from `tabCourse Instructor`") diff --git a/lms/lms/doctype/lms_batch_membership/__init__.py b/lms/lms/doctype/lms_enrollment/__init__.py similarity index 100% rename from lms/lms/doctype/lms_batch_membership/__init__.py rename to lms/lms/doctype/lms_enrollment/__init__.py diff --git a/lms/lms/doctype/lms_batch_membership/lms_batch_membership.js b/lms/lms/doctype/lms_enrollment/lms_enrollment.js similarity index 85% rename from lms/lms/doctype/lms_batch_membership/lms_batch_membership.js rename to lms/lms/doctype/lms_enrollment/lms_enrollment.js index b977eded..7fb59434 100644 --- a/lms/lms/doctype/lms_batch_membership/lms_batch_membership.js +++ b/lms/lms/doctype/lms_enrollment/lms_enrollment.js @@ -1,7 +1,7 @@ // Copyright (c) 2021, FOSS United and contributors // For license information, please see license.txt -frappe.ui.form.on("LMS Batch Membership", { +frappe.ui.form.on("LMS Enrollment", { onload: function (frm) { frm.set_query("member", function (doc) { return { diff --git a/lms/lms/doctype/lms_batch_membership/lms_batch_membership.json b/lms/lms/doctype/lms_enrollment/lms_enrollment.json similarity index 95% rename from lms/lms/doctype/lms_batch_membership/lms_batch_membership.json rename to lms/lms/doctype/lms_enrollment/lms_enrollment.json index 10a8e93d..ead266f2 100644 --- a/lms/lms/doctype/lms_batch_membership/lms_batch_membership.json +++ b/lms/lms/doctype/lms_enrollment/lms_enrollment.json @@ -30,10 +30,10 @@ ], "fields": [ { - "fieldname": "batch", + "fieldname": "batch_old", "fieldtype": "Link", - "label": "Batch", - "options": "LMS Batch" + "label": "Batch Old", + "options": "LMS Batch Old" }, { "fieldname": "member", @@ -167,10 +167,10 @@ ], "index_web_pages_for_search": 1, "links": [], - "modified": "2023-08-17 13:52:49.450499", + "modified": "2023-08-17 13:52:49.450491", "modified_by": "Administrator", "module": "LMS", - "name": "LMS Batch Membership", + "name": "LMS Enrollment", "owner": "Administrator", "permissions": [ { diff --git a/lms/lms/doctype/lms_batch_membership/lms_batch_membership.py b/lms/lms/doctype/lms_enrollment/lms_enrollment.py similarity index 79% rename from lms/lms/doctype/lms_batch_membership/lms_batch_membership.py rename to lms/lms/doctype/lms_enrollment/lms_enrollment.py index 6f8e303c..2c004db3 100644 --- a/lms/lms/doctype/lms_batch_membership/lms_batch_membership.py +++ b/lms/lms/doctype/lms_enrollment/lms_enrollment.py @@ -6,7 +6,7 @@ from frappe import _ from frappe.model.document import Document -class LMSBatchMembership(Document): +class LMSEnrollment(Document): def validate(self): self.validate_membership_in_same_batch() self.validate_membership_in_different_batch_same_course() @@ -16,7 +16,7 @@ class LMSBatchMembership(Document): if self.batch: filters["batch"] = self.batch previous_membership = frappe.db.get_value( - "LMS Batch Membership", filters, fieldname=["member_type", "member"], as_dict=1 + "LMS Enrollment", filters, fieldname=["member_type", "member"], as_dict=1 ) if previous_membership: @@ -34,9 +34,9 @@ class LMSBatchMembership(Document): if self.member_type != "Student": return - course = frappe.db.get_value("LMS Batch", self.batch, "course") + course = frappe.db.get_value("LMS Batch Old", self.batch, "course") memberships = frappe.get_all( - "LMS Batch Membership", + "LMS Enrollment", filters={ "member": self.member, "name": ["!=", self.name], @@ -62,7 +62,7 @@ def create_membership( ): frappe.get_doc( { - "doctype": "LMS Batch Membership", + "doctype": "LMS Enrollment", "batch": batch, "course": course, "role": role, @@ -76,15 +76,13 @@ def create_membership( @frappe.whitelist() def update_current_membership(batch, course, member): all_memberships = frappe.get_all( - "LMS Batch Membership", {"member": member, "course": course} + "LMS Enrollment", {"member": member, "course": course} ) for membership in all_memberships: - frappe.db.set_value("LMS Batch Membership", membership.name, "is_current", 0) + frappe.db.set_value("LMS Enrollment", membership.name, "is_current", 0) current_membership = frappe.get_all( - "LMS Batch Membership", {"batch": batch, "member": member} + "LMS Enrollment", {"batch": batch, "member": member} ) if len(current_membership): - frappe.db.set_value( - "LMS Batch Membership", current_membership[0].name, "is_current", 1 - ) + frappe.db.set_value("LMS Enrollment", current_membership[0].name, "is_current", 1) diff --git a/lms/lms/doctype/lms_batch_membership/test_lms_batch_membership.py b/lms/lms/doctype/lms_enrollment/test_lms_enrollment.py similarity index 93% rename from lms/lms/doctype/lms_batch_membership/test_lms_batch_membership.py rename to lms/lms/doctype/lms_enrollment/test_lms_enrollment.py index 71e0f5eb..2bef30d7 100644 --- a/lms/lms/doctype/lms_batch_membership/test_lms_batch_membership.py +++ b/lms/lms/doctype/lms_enrollment/test_lms_enrollment.py @@ -8,7 +8,7 @@ import frappe from lms.lms.doctype.lms_course.test_lms_course import new_course, new_user -class TestLMSBatchMembership(unittest.TestCase): +class TestLMSEnrollment(unittest.TestCase): def setUp(self): frappe.db.sql("DELETE FROM `tabLMS Batch Membership`") frappe.db.sql("DELETE FROM `tabLMS Batch`") @@ -26,7 +26,7 @@ class TestLMSBatchMembership(unittest.TestCase): batch = frappe.get_doc( { - "doctype": "LMS Batch", + "doctype": "LMS Batch Old", "name": "test-batch", "title": "Test Batch", "course": course.name, @@ -40,7 +40,7 @@ class TestLMSBatchMembership(unittest.TestCase): def add_membership(self, batch_name, member_name, member_type="Student"): doc = frappe.get_doc( { - "doctype": "LMS Batch Membership", + "doctype": "LMS Enrollment", "batch": batch_name, "member": member_name, "member_type": member_type, diff --git a/lms/lms/doctype/lms_exercise/test_lms_exercise.py b/lms/lms/doctype/lms_exercise/test_lms_exercise.py index 02560d37..fc1f50bb 100644 --- a/lms/lms/doctype/lms_exercise/test_lms_exercise.py +++ b/lms/lms/doctype/lms_exercise/test_lms_exercise.py @@ -13,7 +13,7 @@ class TestLMSExercise(unittest.TestCase): course = new_course("Test Course") member = frappe.get_doc( { - "doctype": "LMS Batch Membership", + "doctype": "LMS Enrollment", "course": course.name, "member": frappe.session.user, } diff --git a/lms/lms/models.py b/lms/lms/models.py index ec2cd230..f75e934e 100644 --- a/lms/lms/models.py +++ b/lms/lms/models.py @@ -1,6 +1,6 @@ """Handy module to make access to all doctypes from a single place. """ -from .doctype.lms_batch_membership.lms_batch_membership import ( +from .doctype.lms_enrollment.lms_enrollment import ( LMSBatchMembership as Membership, ) from .doctype.lms_course.lms_course import LMSCourse as Course diff --git a/lms/lms/report/course_progress_summary/course_progress_summary.json b/lms/lms/report/course_progress_summary/course_progress_summary.json index c3e85f54..7b1ecefe 100644 --- a/lms/lms/report/course_progress_summary/course_progress_summary.json +++ b/lms/lms/report/course_progress_summary/course_progress_summary.json @@ -9,13 +9,13 @@ "filters": [], "idx": 0, "is_standard": "Yes", - "modified": "2021-09-28 17:09:40.761819", + "modified": "2021-09-28 17:09:40.761810", "modified_by": "Administrator", "module": "LMS", "name": "Course Progress Summary", "owner": "Administrator", "prepared_report": 0, - "ref_doctype": "LMS Batch Membership", + "ref_doctype": "LMS Enrollment", "report_name": "Course Progress Summary", "report_type": "Script Report", "roles": [ diff --git a/lms/lms/report/course_progress_summary/course_progress_summary.py b/lms/lms/report/course_progress_summary/course_progress_summary.py index 9a54738e..cb39e924 100644 --- a/lms/lms/report/course_progress_summary/course_progress_summary.py +++ b/lms/lms/report/course_progress_summary/course_progress_summary.py @@ -21,7 +21,7 @@ def get_data(filters=None): query_filter = {"course": filters.course} memberships = frappe.get_all( - "LMS Batch Membership", + "LMS Enrollment", query_filter, ["name", "course", "member", "member_name", "progress"], order_by="course", diff --git a/lms/lms/utils.py b/lms/lms/utils.py index 96da419c..3a0ef2d7 100644 --- a/lms/lms/utils.py +++ b/lms/lms/utils.py @@ -65,17 +65,19 @@ def get_membership(course, member=None, batch=None): if batch: filters["batch"] = batch - is_member = frappe.db.exists("LMS Batch Membership", filters) + is_member = frappe.db.exists("LMS Enrollment", filters) if is_member: membership = frappe.db.get_value( - "LMS Batch Membership", + "LMS Enrollment", filters, ["name", "batch", "current_lesson", "member_type", "progress"], as_dict=True, ) if membership and membership.batch: - membership.batch_title = frappe.db.get_value("LMS Batch", membership.batch, "title") + membership.batch_title = frappe.db.get_value( + "LMS Batch Old", membership.batch, "title" + ) return membership return False @@ -196,7 +198,7 @@ def get_students(course, batch=None): if batch: filters["batch"] = batch - return frappe.get_all("LMS Batch Membership", filters, ["member"]) + return frappe.get_all("LMS Enrollment", filters, ["member"]) def get_average_rating(course): @@ -275,7 +277,7 @@ def get_lesson_url(course, lesson_number): def get_batch(course, batch_name): - return frappe.get_all("LMS Batch", {"name": batch_name, "course": course}) + return frappe.get_all("LMS Batch Old", {"name": batch_name, "course": course}) def get_slugified_chapter_title(chapter): @@ -337,7 +339,7 @@ def get_mentors(course): "User", mentor.mentor, ["name", "username", "full_name", "user_image"] ) member.batch_count = frappe.db.count( - "LMS Batch Membership", {"member": member.name, "member_type": "Mentor"} + "LMS Enrollment", {"member": member.name, "member_type": "Mentor"} ) course_mentors.append(member) return course_mentors @@ -368,9 +370,7 @@ def get_course_progress(course, member=None): def get_initial_members(course): - members = frappe.get_all( - "LMS Batch Membership", {"course": course}, ["member"], limit=3 - ) + members = frappe.get_all("LMS Enrollment", {"course": course}, ["member"], limit=3) member_details = [] for member in members: @@ -423,7 +423,7 @@ def get_popular_courses(): course_membership.append( { "course": course.name, - "members": cint(frappe.db.count("LMS Batch Membership", {"course": course.name})), + "members": cint(frappe.db.count("LMS Enrollment", {"course": course.name})), } ) @@ -648,7 +648,7 @@ def get_restriction_details(): def get_all_memberships(member): return frappe.get_all( - "LMS Batch Membership", + "LMS Enrollment", {"member": member}, ["name", "course", "batch", "current_lesson", "member_type", "progress"], ) @@ -724,8 +724,8 @@ def get_chart_data(chart_name, timespan, timegrain, from_date, to_date): @frappe.whitelist() def get_course_completion_data(): - all_membership = frappe.db.count("LMS Batch Membership") - completed = frappe.db.count("LMS Batch Membership", {"progress": ["like", "%100%"]}) + all_membership = frappe.db.count("LMS Enrollment") + completed = frappe.db.count("LMS Enrollment", {"progress": ["like", "%100%"]}) return { "labels": ["Completed", "In Progress"], diff --git a/lms/lms/web_form/add_a_new_batch/add_a_new_batch.json b/lms/lms/web_form/add_a_new_batch/add_a_new_batch.json index e792272c..92614d9c 100644 --- a/lms/lms/web_form/add_a_new_batch/add_a_new_batch.json +++ b/lms/lms/web_form/add_a_new_batch/add_a_new_batch.json @@ -12,14 +12,14 @@ "button_label": "Save", "creation": "2021-04-20 11:37:49.135114", "custom_css": ".datepicker.active {\n background-color: white;\n}\n\n[data-doctype=\"Web Form\"] {\n max-width: 720px;\n margin: 6rem auto;\n}", - "doc_type": "LMS Batch", + "doc_type": "LMS Batch Old", "docstatus": 0, "doctype": "Web Form", "idx": 0, "is_standard": 1, "login_required": 1, "max_attachment_size": 0, - "modified": "2021-06-15 18:49:50.530001", + "modified": "2021-06-15 18:49:50.530002", "modified_by": "Administrator", "module": "LMS", "name": "add-a-new-batch", diff --git a/lms/lms/widgets/CourseCard.html b/lms/lms/widgets/CourseCard.html index edda4130..e2289342 100644 --- a/lms/lms/widgets/CourseCard.html +++ b/lms/lms/widgets/CourseCard.html @@ -1,5 +1,5 @@ {% if frappe.session.user != "Guest" %} -{% set membership = frappe.db.get_value("LMS Batch Membership", +{% set membership = frappe.db.get_value("LMS Enrollment", {"member": frappe.session.user, "course": course.name}, ["name", "course", "batch", "current_lesson", "member_type", "progress"], as_dict=1) %} {% set progress = frappe.utils.cint(membership.progress) %} diff --git a/lms/lms/workspace/lms/lms.json b/lms/lms/workspace/lms/lms.json index 474c3a1a..d3d51300 100644 --- a/lms/lms/workspace/lms/lms.json +++ b/lms/lms/workspace/lms/lms.json @@ -144,7 +144,7 @@ "type": "Link" } ], - "modified": "2023-05-11 15:41:25.514442", + "modified": "2023-05-11 15:41:25.514443", "modified_by": "Administrator", "module": "LMS", "name": "LMS", @@ -161,7 +161,7 @@ "doc_view": "List", "format": "{} Enrolled", "label": "Enrollments", - "link_to": "LMS Batch Membership", + "link_to": "LMS Enrollment", "stats_filter": "{\"member_type\":[\"=\",\"Student\"]}", "type": "DocType" }, @@ -170,7 +170,7 @@ "doc_view": "List", "format": "{} Completed", "label": "Course Completed", - "link_to": "LMS Batch Membership", + "link_to": "LMS Enrollment", "stats_filter": "{\"progress\":[\"like\",\"%100%\"]}", "type": "DocType" }, diff --git a/lms/overrides/user.py b/lms/overrides/user.py index db49b2c3..a02db99e 100644 --- a/lms/overrides/user.py +++ b/lms/overrides/user.py @@ -54,7 +54,7 @@ class CustomUser(User): def get_batch_count(self) -> int: """Returns the number of batches authored by this user.""" return frappe.db.count( - "LMS Batch Membership", {"member": self.name, "member_type": "Mentor"} + "LMS Enrollment", {"member": self.name, "member_type": "Mentor"} ) def get_user_reviews(self): @@ -112,7 +112,7 @@ def get_enrolled_courses(): if not course.published: continue course.enrollment_count = frappe.db.count( - "LMS Batch Membership", {"course": course.name, "member_type": "Student"} + "LMS Enrollment", {"course": course.name, "member_type": "Student"} ) course.avg_rating = get_average_rating(course.name) or 0 progress = cint(membership.progress) @@ -134,7 +134,7 @@ def get_course_membership(member=None, member_type=None): if member_type: filters["member_type"] = member_type - return frappe.get_all("LMS Batch Membership", filters, ["name", "course", "progress"]) + return frappe.get_all("LMS Enrollment", filters, ["name", "course", "progress"]) def get_authored_courses(member=None, only_published=True): @@ -167,7 +167,7 @@ def get_authored_courses(member=None, only_published=True): if only_published and detail and not detail.published: continue detail.enrollment_count = frappe.db.count( - "LMS Batch Membership", {"course": detail.name, "member_type": "Student"} + "LMS Enrollment", {"course": detail.name, "member_type": "Student"} ) detail.avg_rating = get_average_rating(detail.name) or 0 course_details.append(detail) diff --git a/lms/patches.txt b/lms/patches.txt index 9c3cda5c..d2f8efef 100644 --- a/lms/patches.txt +++ b/lms/patches.txt @@ -62,4 +62,6 @@ execute:frappe.permissions.reset_perms("Course Evaluator") execute:frappe.permissions.reset_perms("LMS Certificate Request") execute:frappe.permissions.reset_perms("LMS Certificate Evaluation") lms.patches.v1_0.paid_certificate_to_paid_course #18-08-2023 -lms.patches.v1_0.revert_class_registration #18-08-2023 \ No newline at end of file +lms.patches.v1_0.revert_class_registration #18-08-2023 +lms.patches.v1_0.rename_lms_batch_doctype +lms.patches.v1_0.rename_lms_batch_membership_doctype \ No newline at end of file diff --git a/lms/patches/replace_member_with_user_in_batch_membership.py b/lms/patches/replace_member_with_user_in_batch_membership.py index 56811a16..b055778a 100644 --- a/lms/patches/replace_member_with_user_in_batch_membership.py +++ b/lms/patches/replace_member_with_user_in_batch_membership.py @@ -3,7 +3,7 @@ import frappe def execute(): frappe.reload_doc("lms", "doctype", "lms_batch_membership") - memberships = frappe.get_all("LMS Batch Membership", ["member", "name"]) + memberships = frappe.get_all("LMS Enrollment", ["member", "name"]) for membership in memberships: email = frappe.db.get_value("Community Member", membership.member, "email") - frappe.db.set_value("LMS Batch Membership", membership.name, "member", email) + frappe.db.set_value("LMS Enrollment", membership.name, "member", email) diff --git a/lms/patches/v0_0/add_progress_to_membership.py b/lms/patches/v0_0/add_progress_to_membership.py index d79c238d..610f4b50 100644 --- a/lms/patches/v0_0/add_progress_to_membership.py +++ b/lms/patches/v0_0/add_progress_to_membership.py @@ -7,7 +7,7 @@ from lms.lms.utils import get_course_progress def execute(): frappe.reload_doc("lms", "doctype", "lms_batch_membership") memberships = frappe.get_all( - "LMS Batch Membership", ["name", "course", "member"], order_by="course" + "LMS Enrollment", ["name", "course", "member"], order_by="course" ) if len(memberships): @@ -17,7 +17,7 @@ def execute(): current_course = membership.course progress = rounded(get_course_progress(current_course, membership.member)) - frappe.db.set_value("LMS Batch Membership", membership.name, "progress", progress) + frappe.db.set_value("LMS Enrollment", membership.name, "progress", progress) frappe.db.delete("Prepared Report", {"ref_report_doctype": "Course Progress Summary"}) frappe.db.set_value("Report", "Course Progress Summary", "prepared_report", 0) diff --git a/lms/patches/v0_0/convert_progress_to_float.py b/lms/patches/v0_0/convert_progress_to_float.py index 28ba459a..4fb0b513 100644 --- a/lms/patches/v0_0/convert_progress_to_float.py +++ b/lms/patches/v0_0/convert_progress_to_float.py @@ -4,8 +4,8 @@ from frappe.utils import flt def execute(): frappe.reload_doc("lms", "doctype", "lms_course_progress") - progress_records = frappe.get_all("LMS Batch Membership", fields=["name", "progress"]) + progress_records = frappe.get_all("LMS Enrollment", fields=["name", "progress"]) for progress in progress_records: frappe.db.set_value( - "LMS Batch Membership", progress.name, "progress", flt(progress.progress) + "LMS Enrollment", progress.name, "progress", flt(progress.progress) ) diff --git a/lms/patches/v1_0/rename_lms_batch_doctype.py b/lms/patches/v1_0/rename_lms_batch_doctype.py new file mode 100644 index 00000000..3133f892 --- /dev/null +++ b/lms/patches/v1_0/rename_lms_batch_doctype.py @@ -0,0 +1,13 @@ +import frappe +from frappe.model.rename_doc import rename_doc + + +def execute(): + if frappe.db.exists("DocType", "LMS Batch Old"): + return + + frappe.flags.ignore_route_conflict_validation = True + rename_doc("DocType", "LMS Batch", "LMS Batch Old") + frappe.flags.ignore_route_conflict_validation = False + + frappe.reload_doctype("LMS Batch Old", force=True) diff --git a/lms/patches/v1_0/rename_lms_batch_membership_doctype.py b/lms/patches/v1_0/rename_lms_batch_membership_doctype.py new file mode 100644 index 00000000..2a0d71c2 --- /dev/null +++ b/lms/patches/v1_0/rename_lms_batch_membership_doctype.py @@ -0,0 +1,13 @@ +import frappe +from frappe.model.rename_doc import rename_doc + + +def execute(): + if frappe.db.exists("DocType", "LMS Enrollment"): + return + + frappe.flags.ignore_route_conflict_validation = True + rename_doc("DocType", "LMS Batch Membership", "LMS Enrollment") + frappe.flags.ignore_route_conflict_validation = False + + frappe.reload_doctype("LMS Enrollment", force=True) diff --git a/lms/subscription_utils.py b/lms/subscription_utils.py index 808bcf32..35971180 100644 --- a/lms/subscription_utils.py +++ b/lms/subscription_utils.py @@ -47,4 +47,4 @@ def get_add_on_members(plan: str) -> int: def get_members() -> int: - return frappe.db.count("LMS Batch Membership") + return frappe.db.count("LMS Enrollment") diff --git a/lms/templates/statistics.html b/lms/templates/statistics.html index 347107c4..c33d6d1e 100644 --- a/lms/templates/statistics.html +++ b/lms/templates/statistics.html @@ -1,75 +1,42 @@
- - {% if published_courses %} -
-
- {{ _("Published Courses") }} -
-
- {{ frappe.utils.fmt_money( - frappe.db.count("LMS Course", { - "published": 1, - "upcoming": 0 - }) - , 0) }} -
-
- {% endif %} - - - {% if total_signups %} -
-
- {{ _("Total Signups") }} -
-
- {{ frappe.utils.fmt_money( - frappe.db.count("User", { - "enabled": 1 - }) - , 0) }} -
-
- {% endif %} - - - {% if enrollment_count %} + {% if published_courses %}
-
- {{ _("Enrollment Count") }} -
+
{{ _("Published Courses") }}
- {{ frappe.utils.fmt_money( - frappe.db.count("LMS Batch Membership") - , 0) }} + {{ frappe.utils.fmt_money( frappe.db.count("LMS Course", { + "published": 1, "upcoming": 0 }) , 0) }}
- {% endif %} - - {% if course_completion %} - {% set course_completion_count = frappe.db.count("LMS Batch Membership", { - "progress":["like","%100%"] - }) %} + {% endif %} {% if total_signups %}
-
- {{ _("Courses Completed") }} +
{{ _("Total Signups") }}
+
+ {{ frappe.utils.fmt_money( frappe.db.count("User", { "enabled": 1 }) + , 0) }}
+
+ {% endif %} {% if enrollment_count %} +
+
{{ _("Enrollment Count") }}
+
+ {{ frappe.utils.fmt_money( frappe.db.count("LMS Enrollment") , 0) }} +
+
+ {% endif %} {% if course_completion %} {% set course_completion_count = + frappe.db.count("LMS Enrollment", { "progress":["like","%100%"] }) %} +
+
{{ _("Courses Completed") }}
{{ frappe.utils.fmt_money(course_completion_count, 0) }}
- {% endif %} - - {% if lesson_completion %} - {% set lesson_completion_count = frappe.db.count("LMS Course Progress") %} + {% endif %} {% if lesson_completion %} {% set lesson_completion_count = + frappe.db.count("LMS Course Progress") %}
-
- {{ _("Lessons Completed") }} -
+
{{ _("Lessons Completed") }}
{{ frappe.utils.fmt_money(lesson_completion_count, 0) }}
{% endif %} -
diff --git a/lms/www/batch/join.py b/lms/www/batch/join.py index 888e1402..3cc95284 100644 --- a/lms/www/batch/join.py +++ b/lms/www/batch/join.py @@ -4,7 +4,7 @@ import frappe def get_context(context): context.no_cache = 1 batch_name = frappe.form_dict["batch"] - context.batch = frappe.get_doc("LMS Batch", batch_name) + context.batch = frappe.get_doc("LMS Batch Old", batch_name) context.already_a_member = context.batch.is_member(frappe.session.user) context.batch.course_title = frappe.db.get_value( "LMS Course", context.batch.course, "title" diff --git a/lms/www/billing/billing.py b/lms/www/billing/billing.py index 562e6969..f1c0f871 100644 --- a/lms/www/billing/billing.py +++ b/lms/www/billing/billing.py @@ -12,7 +12,7 @@ def get_context(context): raise frappe.PermissionError(_("You are not allowed to access this page.")) membership = frappe.db.exists( - "LMS Batch Membership", {"member": frappe.session.user, "course": course_name} + "LMS Enrollment", {"member": frappe.session.user, "course": course_name} ) if membership: diff --git a/lms/www/cohorts/cohort.html b/lms/www/cohorts/cohort.html index 83e2f227..7e1672a1 100644 --- a/lms/www/cohorts/cohort.html +++ b/lms/www/cohorts/cohort.html @@ -1,78 +1,69 @@ -{% extends "www/cohorts/base.html" %} -{% block title %} -{{ _("Manage") }} {{ course.title }} -{% endblock %} - -{% block page_content %} -
- {{ cohort.title }} -
+{% extends "www/cohorts/base.html" %} {% block title %} {{ _("Manage") }} {{ +course.title }} {% endblock %} {% block page_content %} +
{{ cohort.title }}

- {{ frappe.db.count("Cohort Subgroup", {"cohort": cohort.name}) }} {{ _("Subgroups") }} - | {{ frappe.db.count("Cohort Mentor", {"cohort": cohort.name}) }} {{ _("Mentors") }} - | {{ frappe.db.count("LMS Batch Membership", {"cohort": cohort.name}) }} {{ _("Students") }} - | {{ frappe.db.count("Cohort Join Request", {"cohort": cohort.name}) }} {{ _("Join Requests") }} + {{ frappe.db.count("Cohort Subgroup", {"cohort": cohort.name}) }} {{ + _("Subgroups") }} | {{ frappe.db.count("Cohort Mentor", {"cohort": + cohort.name}) }} {{ _("Mentors") }} | {{ frappe.db.count("LMS Enrollment", + {"cohort": cohort.name}) }} {{ _("Students") }} | {{ frappe.db.count("Cohort + Join Request", {"cohort": cohort.name}) }} {{ _("Join Requests") }}

-{% if is_mentor %} -{% set sg = mentor.get_subgroup() %} +{% if is_mentor %} {% set sg = mentor.get_subgroup() %}
- - {{ _("You are a mentor of {0} subgroup.").format(frappe.bold(sg.title)) }} - + + {{ _("You are a mentor of {0} subgroup.").format(frappe.bold(sg.title)) + }} +
{% endif %}
- {% if not page %} - {{ render_subgroups() }} - {% else %} - {{ render_page(page) }} - {% endif %} + {% if not page %} {{ render_subgroups() }} {% else %} {{ render_page(page) + }} {% endif %}
-{% endblock %} - -{% macro render_subgroups() %} - -{% endmacro %} - -{% macro render_navitem(title, link, page, count=-1) %} - +{% endblock %} {% macro render_subgroups() %} + +{% endmacro %} {% macro render_navitem(title, link, page, count=-1) %} + {% endmacro %} diff --git a/lms/www/cohorts/index.html b/lms/www/cohorts/index.html index db0add8d..55c3233f 100644 --- a/lms/www/cohorts/index.html +++ b/lms/www/cohorts/index.html @@ -1,53 +1,40 @@ -{% extends "www/cohorts/base.html" %} -{% block title %} - _("Manage") {{ course.title }} -{% endblock %} - -{% block page_content %} - {% if cohorts %} -

- {{ _("Cohorts") }} -

-
- {% for cohort in cohorts %} -
- {{ render_cohort(course, cohort) }} -
- {% endfor %} -
- {% else %} -

- {{ _("Permission Denied") }} -

-

- {{ _("You don't have permission to manage this course.") }} -

- {% endif %} -{% endblock %} - -{% macro render_cohort(course, cohort) %} +{% extends "www/cohorts/base.html" %} {% block title %} _("Manage") {{ +course.title }} {% endblock %} {% block page_content %} {% if cohorts %} +

{{ _("Cohorts") }}

+
+ {% for cohort in cohorts %} +
{{ render_cohort(course, cohort) }}
+ {% endfor %} +
+{% else %} +

{{ _("Permission Denied") }}

+

{{ _("You don't have permission to manage this course.") }}

+{% endif %} {% endblock %} {% macro render_cohort(course, cohort) %}
-
-
- {{ cohort.title }} -
+
+
{{ cohort.title }}
- {% if cohort.begin_date %} -
- {{ frappe.utils.format_date(cohort.begin_date, "medium") }} - {{ frappe.utils.format_date(cohort.end_date, "medium") }} -
- {% endif %} + {% if cohort.begin_date %} +
+ {{ frappe.utils.format_date(cohort.begin_date, "medium") }} - {{ + frappe.utils.format_date(cohort.end_date, "medium") }} +
+ {% endif %} -

- {{ frappe.db.count("Cohort Subgroup", {"cohort": cohort.name}) }} {{ _("Subgroups") }} - | {{ frappe.db.count("Cohort Mentor", {"cohort": cohort.name}) }} {{ _("Mentors") }} - | {{ frappe.db.count("LMS Batch Membership", {"cohort": cohort.name}) }} {{ _("Students") }} - | {{ frappe.db.count("Cohort Join Request", {"cohort": cohort.name}) }} {{ _("Join Requests") }} -

+

+ {{ frappe.db.count("Cohort Subgroup", {"cohort": cohort.name}) }} {{ + _("Subgroups") }} | {{ frappe.db.count("Cohort Mentor", {"cohort": + cohort.name}) }} {{ _("Mentors") }} | {{ frappe.db.count("LMS + Enrollment", {"cohort": cohort.name}) }} {{ _("Students") }} | {{ + frappe.db.count("Cohort Join Request", {"cohort": cohort.name}) }} + {{ _("Join Requests") }} +

- - -
+ +
{% endmacro %} diff --git a/lms/www/courses/index.py b/lms/www/courses/index.py index fae14436..407d58e3 100644 --- a/lms/www/courses/index.py +++ b/lms/www/courses/index.py @@ -56,7 +56,7 @@ def get_courses(): live_courses, upcoming_courses = [], [] for course in courses: course.enrollment_count = frappe.db.count( - "LMS Batch Membership", {"course": course.name, "member_type": "Student"} + "LMS Enrollment", {"course": course.name, "member_type": "Student"} ) course.avg_rating = get_average_rating(course.name) or 0 if course.upcoming: