diff --git a/lms/lms/api.py b/lms/lms/api.py index 527914e0..e2801cc1 100644 --- a/lms/lms/api.py +++ b/lms/lms/api.py @@ -1429,23 +1429,45 @@ def save_role(user: str, role: str, value: int): if role not in LMS_ROLES: frappe.throw(_("You do not have permission to modify this role."), frappe.PermissionError) + if role == "Batch Evaluator": + return save_evaluator_role(user, value) + if cint(value): - doc = frappe.get_doc( - { - "doctype": "Has Role", - "parent": user, - "role": role, - "parenttype": "User", - "parentfield": "roles", - } - ) - doc.save(ignore_permissions=True) + if not frappe.db.exists("Has Role", {"parent": user, "role": role}): + doc = frappe.new_doc("Has Role") + doc.parent = user + doc.parenttype = "User" + doc.parentfield = "roles" + doc.role = role + doc.save(ignore_permissions=True) else: frappe.db.delete("Has Role", {"parent": user, "role": role}) frappe.clear_cache(user=user) return True +def save_evaluator_role(user: str, value: int): + frappe.only_for("Moderator") + if cint(value): + if not frappe.db.exists("Has Role", {"parent": user, "role": "Batch Evaluator"}): + doc = frappe.new_doc("Has Role") + doc.parent = user + doc.parenttype = "User" + doc.parentfield = "roles" + doc.role = "Batch Evaluator" + doc.save(ignore_permissions=True) + if not frappe.db.exists("Course Evaluator", {"evaluator": user}): + doc = frappe.new_doc("Course Evaluator") + doc.evaluator = user + doc.save(ignore_permissions=True) + else: + frappe.db.delete("Has Role", {"parent": user, "role": "Batch Evaluator"}) + if frappe.db.exists("Course Evaluator", {"evaluator": user}): + frappe.db.delete("Course Evaluator", {"evaluator": user}) + frappe.clear_cache(user=user) + return True + + @frappe.whitelist() def add_an_evaluator(email: str): frappe.only_for("Moderator") diff --git a/lms/lms/doctype/course_evaluator/course_evaluator.py b/lms/lms/doctype/course_evaluator/course_evaluator.py index fa127395..6bdabbe0 100644 --- a/lms/lms/doctype/course_evaluator/course_evaluator.py +++ b/lms/lms/doctype/course_evaluator/course_evaluator.py @@ -17,6 +17,11 @@ class CourseEvaluator(Document): self.validate_time_slots() self.validate_unavailability() + def on_trash(self): + roles = frappe.get_roles(self.evaluator) + if "Batch Evaluator" in roles: + frappe.get_doc("User", self.evaluator).remove_roles("Batch Evaluator") + def validate_evaluator_role(self): roles = frappe.get_roles(self.evaluator) if "Batch Evaluator" not in roles: