Compare commits
6 Commits
learning-m
...
switch-bat
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
94b3ccd3d9 | ||
|
|
4c3645f0d4 | ||
|
|
20b3ae7d76 | ||
|
|
f303be4db5 | ||
|
|
fc1c393f15 | ||
|
|
5abfa35095 |
@@ -71,3 +71,38 @@ def save_message(message, batch):
|
||||
"message": message
|
||||
})
|
||||
doc.save(ignore_permissions=True)
|
||||
|
||||
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})
|
||||
|
||||
batch = frappe.get_doc("LMS Batch", batch_name)
|
||||
if not batch:
|
||||
raise ValueError(f"Invalid Batch: {batch_name}")
|
||||
|
||||
if batch.course != course_name:
|
||||
raise ValueError("Can not switch batches across courses")
|
||||
|
||||
if batch.is_member(email):
|
||||
print(f"{email} is already a member of {batch.title}")
|
||||
return
|
||||
|
||||
old_batch = frappe.get_doc("LMS Batch", membership.batch)
|
||||
|
||||
print("updating membership", membership.name)
|
||||
membership.batch = batch_name
|
||||
membership.save()
|
||||
|
||||
# update exercise submissions
|
||||
filters = {
|
||||
"owner": email,
|
||||
"batch": old_batch.name
|
||||
}
|
||||
for name in frappe.db.get_all("Exercise Submission", filters=filters, pluck='name'):
|
||||
doc = frappe.get_doc("Exercise Submission", name)
|
||||
print("updating exercise submission", name)
|
||||
doc.batch = batch_name
|
||||
doc.save()
|
||||
|
||||
@@ -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):
|
||||
"""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
|
||||
|
||||
course = frappe.db.get_value("LMS Batch", self.batch, "course")
|
||||
previous_membership = frappe.get_all("LMS Batch Membership",
|
||||
memberships = frappe.get_all(
|
||||
"LMS Batch Membership",
|
||||
filters={
|
||||
"member": self.member,
|
||||
"name": ["!=", self.name]
|
||||
"name": ["!=", self.name],
|
||||
"member_type": "Student",
|
||||
"course": self.course
|
||||
},
|
||||
fields=["batch", "member_type", "name"]
|
||||
)
|
||||
|
||||
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"):
|
||||
if memberships:
|
||||
membership = memberships[0]
|
||||
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))
|
||||
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"):
|
||||
|
||||
@@ -36,6 +36,8 @@ def find_macros(text):
|
||||
('Exercise', 'four-circles')
|
||||
]
|
||||
"""
|
||||
if not text:
|
||||
return []
|
||||
macros = re.findall(MACRO_RE, text)
|
||||
# remove the quotes around the argument
|
||||
return [(name, _remove_quotes(arg)) for name, arg in macros]
|
||||
|
||||
@@ -16,6 +16,7 @@ def get_context(context):
|
||||
raise frappe.Redirect
|
||||
|
||||
context.course = course
|
||||
context.course.query_parameter = ""
|
||||
if not course.is_mentor(frappe.session.user):
|
||||
batch = course.get_membership(frappe.session.user)
|
||||
if batch:
|
||||
|
||||
Reference in New Issue
Block a user