fix: incorrect query filter when selecting primary customer adr (#50727)

(cherry picked from commit c2b8b97d7d)

# Conflicts:
#	erpnext/selling/doctype/customer/customer.json
This commit is contained in:
Mihir Kandoi
2025-11-25 10:18:04 +05:30
committed by Mergify
parent 188c633d6e
commit e8e09cf8ea
5 changed files with 46 additions and 23 deletions

View File

@@ -41,18 +41,20 @@ frappe.ui.form.on("Supplier", {
frm.set_query("supplier_primary_contact", function (doc) {
return {
query: "erpnext.buying.doctype.supplier.supplier.get_supplier_primary_contact",
query: "erpnext.buying.doctype.supplier.supplier.get_supplier_primary",
filters: {
supplier: doc.name,
type: "Contact",
},
};
});
frm.set_query("supplier_primary_address", function (doc) {
return {
query: "erpnext.buying.doctype.supplier.supplier.get_supplier_primary",
filters: {
link_doctype: "Supplier",
link_name: doc.name,
supplier: doc.name,
type: "Address",
},
};
});

View File

@@ -215,19 +215,25 @@ class Supplier(TransactionBase):
@frappe.whitelist()
@frappe.validate_and_sanitize_search_inputs
def get_supplier_primary_contact(doctype, txt, searchfield, start, page_len, filters):
def get_supplier_primary(doctype, txt, searchfield, start, page_len, filters):
supplier = filters.get("supplier")
contact = frappe.qb.DocType("Contact")
type = filters.get("type")
type_doctype = frappe.qb.DocType(type)
dynamic_link = frappe.qb.DocType("Dynamic Link")
return (
frappe.qb.from_(contact)
query = (
frappe.qb.from_(type_doctype)
.join(dynamic_link)
.on(contact.name == dynamic_link.parent)
.select(contact.name, contact.email_id)
.on(type_doctype.name == dynamic_link.parent)
.select(type_doctype.name)
.where(
(dynamic_link.link_name == supplier)
& (dynamic_link.link_doctype == "Supplier")
& (contact.name.like(f"%{txt}%"))
& (type_doctype.name.like(f"%{txt}%"))
)
).run(as_dict=False)
)
if type == "Contact":
query = query.select(type_doctype.email_id)
return query.run()

View File

@@ -55,17 +55,20 @@ frappe.ui.form.on("Customer", {
frm.set_query("customer_primary_contact", function (doc) {
return {
query: "erpnext.selling.doctype.customer.customer.get_customer_primary_contact",
query: "erpnext.selling.doctype.customer.customer.get_customer_primary",
filters: {
customer: doc.name,
type: "Contact",
},
};
});
frm.set_query("customer_primary_address", function (doc) {
return {
query: "erpnext.selling.doctype.customer.customer.get_customer_primary",
filters: {
link_doctype: "Customer",
link_name: doc.name,
customer: doc.name,
type: "Address",
},
};
});

View File

@@ -610,7 +610,11 @@
"link_fieldname": "party"
}
],
<<<<<<< HEAD
"modified": "2025-03-05 10:01:47.885574",
=======
"modified": "2025-11-25 09:35:56.772949",
>>>>>>> c2b8b97d7d (fix: incorrect query filter when selecting primary customer adr (#50727))
"modified_by": "Administrator",
"module": "Selling",
"name": "Customer",

View File

@@ -800,21 +800,29 @@ def make_address(args, is_primary_address=1, is_shipping_address=1):
@frappe.whitelist()
@frappe.validate_and_sanitize_search_inputs
def get_customer_primary_contact(doctype, txt, searchfield, start, page_len, filters):
def get_customer_primary(doctype, txt, searchfield, start, page_len, filters):
customer = filters.get("customer")
con = qb.DocType("Contact")
type = filters.get("type")
type_doctype = qb.DocType(type)
dlink = qb.DocType("Dynamic Link")
return (
qb.from_(con)
query = (
qb.from_(type_doctype)
.join(dlink)
.on(con.name == dlink.parent)
.select(con.name, con.email_id)
.where((dlink.link_name == customer) & (con.name.like(f"%{txt}%")))
.run()
.on(type_doctype.name == dlink.parent)
.select(type_doctype.name)
.where(
(dlink.link_name == customer)
& (type_doctype.name.like(f"%{txt}%"))
& (dlink.link_doctype == "Customer")
)
)
if type == "Contact":
query = query.select(type_doctype.email_id)
return query.run()
def parse_full_name(full_name: str) -> tuple[str, str | None, str | None]:
"""Parse full name into first name, middle name and last name"""