diff --git a/frontend/src/components/Settings/BadgeForm.vue b/frontend/src/components/Settings/BadgeForm.vue index 75d2cc8b..4a3a48bd 100644 --- a/frontend/src/components/Settings/BadgeForm.vue +++ b/frontend/src/components/Settings/BadgeForm.vue @@ -206,7 +206,7 @@ const referenceDoctypeOptions = 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 })) }) diff --git a/lms/lms/doctype/lms_badge/lms_badge.js b/lms/lms/doctype/lms_badge/lms_badge.js index e157d38e..b59321f4 100644 --- a/lms/lms/doctype/lms_badge/lms_badge.js +++ b/lms/lms/doctype/lms_badge/lms_badge.js @@ -5,7 +5,7 @@ frappe.ui.form.on("LMS Badge", { refresh: (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); } }, @@ -49,11 +49,13 @@ const add_assign_button = (frm) => { frappe.call({ method: "lms.lms.doctype.lms_badge.lms_badge.assign_badge", args: { - badge: frm.doc, + badge_name: frm.doc.name, }, callback: function (r) { - if (r.message) { - frappe.msgprint(r.message); + if (r.message == "success") { + frappe.toast(__("Badge assigned successfully")); + } else { + frappe.toast(__("Failed to assign badge")); } }, }); diff --git a/lms/lms/doctype/lms_badge/lms_badge.json b/lms/lms/doctype/lms_badge/lms_badge.json index 633106a0..70e257d6 100644 --- a/lms/lms/doctype/lms_badge/lms_badge.json +++ b/lms/lms/doctype/lms_badge/lms_badge.json @@ -52,14 +52,14 @@ "fieldtype": "Select", "in_list_view": 1, "label": "Event", - "options": "New\nValue Change\nAuto Assign", + "options": "New\nValue Change\nManual Assignment", "reqd": 1 }, { "fieldname": "condition", "fieldtype": "Code", "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'", @@ -100,7 +100,7 @@ "link_fieldname": "badge" } ], - "modified": "2026-02-03 10:52:37.122370", + "modified": "2026-02-19 12:04:56.263316", "modified_by": "sayali@frappe.io", "module": "LMS", "name": "LMS Badge", diff --git a/lms/lms/doctype/lms_badge/lms_badge.py b/lms/lms/doctype/lms_badge/lms_badge.py index 4ca727f7..4e4f981d 100644 --- a/lms/lms/doctype/lms_badge/lms_badge.py +++ b/lms/lms/doctype/lms_badge/lms_badge.py @@ -10,7 +10,7 @@ from frappe.model.document import Document class LMSBadge(Document): def on_update(self): - if self.event == "Auto Assign" and self.condition: + if self.event == "Manual Assignment" and self.condition: try: json.loads(self.condition) except ValueError: @@ -54,6 +54,7 @@ def award(doc, member): } ) assignment.save() + return assignment.name def eval_condition(doc, condition): @@ -61,16 +62,27 @@ def eval_condition(doc, condition): @frappe.whitelist() -def assign_badge(badge: str, user: str): - badge = frappe._dict(json.loads(badge)) - if not badge.event == "Auto Assign": +def assign_badge(badge_name: str): + assignments = [] + 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 fields = ["name"] 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: - 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): diff --git a/lms/patches.txt b/lms/patches.txt index e6a6e90d..9de69d3e 100644 --- a/lms/patches.txt +++ b/lms/patches.txt @@ -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_work lms.patches.v2_0.share_enrollment -lms.patches.v2_0.give_user_list_permission #11-02-2026 \ No newline at end of file +lms.patches.v2_0.give_user_list_permission #11-02-2026 +lms.patches.v2_0.rename_badge_assignment_event \ No newline at end of file diff --git a/lms/patches/v2_0/rename_badge_assignment_event.py b/lms/patches/v2_0/rename_badge_assignment_event.py new file mode 100644 index 00000000..7612e789 --- /dev/null +++ b/lms/patches/v2_0/rename_badge_assignment_event.py @@ -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")