mirror of
https://github.com/frappe/lms.git
synced 2026-04-21 23:58:00 +03:00
fix: synched evaluator across roles and 'course evaluator' doctype
This commit is contained in:
@@ -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")
|
||||
|
||||
@@ -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:
|
||||
|
||||
Reference in New Issue
Block a user