From bab40d090dfc53575ded9eb02c21ea066b8e6142 Mon Sep 17 00:00:00 2001 From: root Date: Thu, 16 Jul 2026 17:42:13 +0000 Subject: [PATCH] chore: force-clear customer field at Awesomplete/DOM level to prevent auto-selection --- AGENTS.md | 2 +- .../engagement_card/engagement_card.js | 41 +++++++++++++++++-- 2 files changed, 39 insertions(+), 4 deletions(-) diff --git a/AGENTS.md b/AGENTS.md index d90df59..1014721 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -1,6 +1,6 @@ # Service Factory — ERPNext Custom App Project -> **Current Version: V0.1.0023** — Each completed prompt/step increments the patch number by 1 (V0.1.0000 → V0.1.0001 → V0.1.0002…). The agent automatically commits and pushes after every step. +> **Current Version: V0.1.0024** — Each completed prompt/step increments the patch number by 1 (V0.1.0000 → V0.1.0001 → V0.1.0002…). The agent automatically commits and pushes after every step. ## Project Overview diff --git a/service_factory/service_factory/doctype/engagement_card/engagement_card.js b/service_factory/service_factory/doctype/engagement_card/engagement_card.js index 335e16e..fa1ea01 100644 --- a/service_factory/service_factory/doctype/engagement_card/engagement_card.js +++ b/service_factory/service_factory/doctype/engagement_card/engagement_card.js @@ -5,7 +5,7 @@ frappe.ui.form.on("Engagement Card", { onload: function (frm) { // Ensure customer starts empty on new forms if (frm.is_new()) { - frm.set_value("customer", null); + clear_customer_field(frm); } load_select_options(frm); toggle_creation_fields(frm); @@ -21,8 +21,8 @@ frappe.ui.form.on("Engagement Card", { }, refresh: function (frm) { // Re-clear customer if awesomplete auto-selected on render - if (frm.is_new() && frm.doc.customer) { - frm.set_value("customer", null); + if (frm.is_new()) { + clear_customer_field(frm); } load_select_options(frm); toggle_creation_fields(frm); @@ -89,6 +89,8 @@ frappe.ui.form.on("Engagement Card", { }, // Re-filter opportunities when customer changes customer: function (frm) { + // Clear the "auto-selected" flag so we don't block legitimate user selections + frm._cust_user_selected = true; frm.set_query("opportunity", function () { let filters = {}; if (frm.doc.customer) { @@ -99,6 +101,39 @@ frappe.ui.form.on("Engagement Card", { }, }); +function clear_customer_field(frm) { + // Prevent Frappe from caching this field's value across sessions + if (frappe.boot && frappe.boot.user && frappe.boot.user.last_selected_values) { + delete frappe.boot.user.last_selected_values.Customer; + } + + // Model-level clear + frm.set_value("customer", null); + + // Force-clear at the DOM and Awesomplete level after render is complete + setTimeout(() => { + let field = frm.get_field("customer"); + if (!field) return; + + // Clear the input DOM value + if (field.$input) { + field.$input.val(""); + } + + // Reset Awesomplete's internal selection state + if (field.awesomplete) { + field.awesomplete.index = -1; + field.awesomplete.selected = false; + // Disable autoFirst to prevent highlight-latching on first item + field.awesomplete.autoFirst = false; + } + + // Reset field value tracking so blur handler sees no change + field.last_value = null; + field.value = null; + }, 200); +} + function load_select_options(frm) { frappe.call({ method: "frappe.client.get",