From fc1c393f15e038eda5f68d70e9c44d9d25e91576 Mon Sep 17 00:00:00 2001 From: Anand Chitipothu Date: Tue, 22 Jun 2021 18:09:21 +0530 Subject: [PATCH] feat: allow a student to be mentor of another batch This is a requirement for mon.school. The students are of the first batch are now mentors of new batches. --- .../lms_batch_membership.py | 34 ++++++++++++------- 1 file changed, 21 insertions(+), 13 deletions(-) diff --git a/community/lms/doctype/lms_batch_membership/lms_batch_membership.py b/community/lms/doctype/lms_batch_membership/lms_batch_membership.py index 5dd33f09..5e975ce0 100644 --- a/community/lms/doctype/lms_batch_membership/lms_batch_membership.py +++ b/community/lms/doctype/lms_batch_membership/lms_batch_membership.py @@ -32,20 +32,28 @@ class LMSBatchMembership(Document): frappe.throw(_("{0} is already a {1} of the course {2}").format(member_name, previous_membership.member_type, course_title)) def validate_membership_in_different_batch_same_course(self): - course = frappe.db.get_value("LMS Batch", self.batch, "course") - previous_membership = frappe.get_all("LMS Batch Membership", - filters={ - "member": self.member, - "name": ["!=", self.name] - }, - fields=["batch", "member_type", "name"] - ) + """Ensures that a studnet is only part of one batch. + """ + # nothing to worry if the member is not a student + if self.member_type != "Student": + return - for membership in previous_membership: - batch_course = frappe.db.get_value("LMS Batch", membership.batch, "course") - if batch_course == course and (membership.member_type == "Student" or self.member_type == "Student"): - member_name = frappe.db.get_value("User", self.member, "full_name") - frappe.throw(_("{0} is already a {1} of {2} course through {3} batch").format(member_name, membership.member_type, course, membership.batch)) + course = frappe.db.get_value("LMS Batch", self.batch, "course") + memberships = frappe.get_all( + "LMS Batch Membership", + filters={ + "member": self.member, + "name": ["!=", self.name], + "member_type": "Student", + "course": self.course + }, + fields=["batch", "member_type", "name"] + ) + + if memberships: + membership = memberships[0] + member_name = frappe.db.get_value("User", self.member, "full_name") + frappe.throw(_("{0} is already a Student of {1} course through {2} batch").format(member_name, course, membership.batch)) @frappe.whitelist() def create_membership(course, batch=None, member=None, member_type="Student", role="Member"):