fix: synched evaluator across roles and 'course evaluator' doctype

This commit is contained in:
raizasafeel
2026-03-12 14:50:19 +05:30
parent b8283860a7
commit ba394926c5
2 changed files with 37 additions and 10 deletions

View File

@@ -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")

View File

@@ -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: