fix: sanitised badge assignment api
This commit is contained in:
@@ -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 }))
|
||||||
})
|
})
|
||||||
|
|
||||||
|
|||||||
@@ -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"));
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
});
|
});
|
||||||
|
|||||||
@@ -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",
|
||||||
|
|||||||
@@ -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):
|
||||||
|
|||||||
@@ -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
|
||||||
7
lms/patches/v2_0/rename_badge_assignment_event.py
Normal file
7
lms/patches/v2_0/rename_badge_assignment_event.py
Normal 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")
|
||||||
Reference in New Issue
Block a user