fix: sanitised badge assignment api

This commit is contained in:
Jannat Patel
2026-02-19 12:24:47 +05:30
parent ba395fe982
commit cb3af6fa63
6 changed files with 37 additions and 15 deletions

View File

@@ -206,7 +206,7 @@ const referenceDoctypeOptions = computed(() => {
}) })
const eventOptions = computed(() => { const eventOptions = computed(() => {
let options = ['New', 'Value Change', 'Auto Assign'] let options = ['New', 'Value Change', 'Manual Assignment']
return options.map((event) => ({ label: __(event), value: event })) return options.map((event) => ({ label: __(event), value: event }))
}) })

View File

@@ -5,7 +5,7 @@ frappe.ui.form.on("LMS Badge", {
refresh: (frm) => { refresh: (frm) => {
frm.events.set_field_options(frm); frm.events.set_field_options(frm);
if (frm.doc.event == "Auto Assign") { if (frm.doc.event == "Manual Assignment" && frm.doc.enabled) {
add_assign_button(frm); add_assign_button(frm);
} }
}, },
@@ -49,11 +49,13 @@ const add_assign_button = (frm) => {
frappe.call({ frappe.call({
method: "lms.lms.doctype.lms_badge.lms_badge.assign_badge", method: "lms.lms.doctype.lms_badge.lms_badge.assign_badge",
args: { args: {
badge: frm.doc, badge_name: frm.doc.name,
}, },
callback: function (r) { callback: function (r) {
if (r.message) { if (r.message == "success") {
frappe.msgprint(r.message); frappe.toast(__("Badge assigned successfully"));
} else {
frappe.toast(__("Failed to assign badge"));
} }
}, },
}); });

View File

@@ -52,14 +52,14 @@
"fieldtype": "Select", "fieldtype": "Select",
"in_list_view": 1, "in_list_view": 1,
"label": "Event", "label": "Event",
"options": "New\nValue Change\nAuto Assign", "options": "New\nValue Change\nManual Assignment",
"reqd": 1 "reqd": 1
}, },
{ {
"fieldname": "condition", "fieldname": "condition",
"fieldtype": "Code", "fieldtype": "Code",
"label": "Condition", "label": "Condition",
"mandatory_depends_on": "eval:doc.event == \"Auto Assign\"" "mandatory_depends_on": "eval:doc.event == \"Manual Assignment\""
}, },
{ {
"depends_on": "eval:doc.event == 'Value Change'", "depends_on": "eval:doc.event == 'Value Change'",
@@ -100,7 +100,7 @@
"link_fieldname": "badge" "link_fieldname": "badge"
} }
], ],
"modified": "2026-02-03 10:52:37.122370", "modified": "2026-02-19 12:04:56.263316",
"modified_by": "sayali@frappe.io", "modified_by": "sayali@frappe.io",
"module": "LMS", "module": "LMS",
"name": "LMS Badge", "name": "LMS Badge",

View File

@@ -10,7 +10,7 @@ from frappe.model.document import Document
class LMSBadge(Document): class LMSBadge(Document):
def on_update(self): def on_update(self):
if self.event == "Auto Assign" and self.condition: if self.event == "Manual Assignment" and self.condition:
try: try:
json.loads(self.condition) json.loads(self.condition)
except ValueError: except ValueError:
@@ -54,6 +54,7 @@ def award(doc, member):
} }
) )
assignment.save() assignment.save()
return assignment.name
def eval_condition(doc, condition): def eval_condition(doc, condition):
@@ -61,16 +62,27 @@ def eval_condition(doc, condition):
@frappe.whitelist() @frappe.whitelist()
def assign_badge(badge: str, user: str): def assign_badge(badge_name: str):
badge = frappe._dict(json.loads(badge)) assignments = []
if not badge.event == "Auto Assign": badge = frappe.db.get_value(
"LMS Badge",
badge_name,
["name", "event", "reference_doctype", "condition", "user_field"],
as_dict=True,
)
if not badge.event == "Manual Assignment":
return return
fields = ["name"] fields = ["name"]
fields.append(badge.user_field) fields.append(badge.user_field)
list = frappe.get_all(badge.reference_doctype, filters=badge.condition, fields=fields) list = frappe.get_all(badge.reference_doctype, filters=json.loads(badge.condition), fields=fields)
for doc in list: for doc in list:
award(badge, doc.get(badge.user_field)) assignment_name = award(badge, doc.get(badge.user_field))
if assignment_name:
assignments.append(assignment_name)
return "success" if assignments else "failed"
def process_badges(doc, state): def process_badges(doc, state):

View File

@@ -117,4 +117,5 @@ lms.patches.v2_0.fix_job_application_resume_urls
lms.patches.v2_0.open_to_opportunities lms.patches.v2_0.open_to_opportunities
lms.patches.v2_0.open_to_work lms.patches.v2_0.open_to_work
lms.patches.v2_0.share_enrollment lms.patches.v2_0.share_enrollment
lms.patches.v2_0.give_user_list_permission #11-02-2026 lms.patches.v2_0.give_user_list_permission #11-02-2026
lms.patches.v2_0.rename_badge_assignment_event

View File

@@ -0,0 +1,7 @@
import frappe
def execute():
badge_with_auto_assign = frappe.get_all("LMS Badge", filters={"event": "Auto Assign"}, fields=["name"])
for badge in badge_with_auto_assign:
frappe.db.set_value("LMS Badge", badge.name, "event", "Manual Assignment")