fix: Search field not working for customer, supplier (#32693)
* fix: searchfield not working for cuctsomer, supplier as per customize form (cherry picked from commit46d148defd) * test: added test case to validate seachfields for customer, supplier (cherry picked from commit5f84993bae) * fix: not able to select customer / supplier --------- Co-authored-by: Rohit Waghchaure <rohitw1991@gmail.com>
This commit is contained in:
@@ -3,6 +3,7 @@
|
|||||||
|
|
||||||
|
|
||||||
import frappe
|
import frappe
|
||||||
|
from frappe.custom.doctype.property_setter.property_setter import make_property_setter
|
||||||
from frappe.test_runner import make_test_records
|
from frappe.test_runner import make_test_records
|
||||||
from frappe.tests.utils import FrappeTestCase
|
from frappe.tests.utils import FrappeTestCase
|
||||||
|
|
||||||
@@ -151,6 +152,44 @@ class TestSupplier(FrappeTestCase):
|
|||||||
# Rollback
|
# Rollback
|
||||||
address.delete()
|
address.delete()
|
||||||
|
|
||||||
|
def test_serach_fields_for_supplier(self):
|
||||||
|
from erpnext.controllers.queries import supplier_query
|
||||||
|
|
||||||
|
frappe.db.set_value("Buying Settings", None, "supp_master_name", "Naming Series")
|
||||||
|
|
||||||
|
supplier_name = create_supplier(supplier_name="Test Supplier 1").name
|
||||||
|
|
||||||
|
make_property_setter(
|
||||||
|
"Supplier", None, "search_fields", "supplier_group", "Data", for_doctype="Doctype"
|
||||||
|
)
|
||||||
|
|
||||||
|
data = supplier_query(
|
||||||
|
"Supplier", supplier_name, "name", 0, 20, filters={"name": supplier_name}, as_dict=True
|
||||||
|
)
|
||||||
|
|
||||||
|
self.assertEqual(data[0].name, supplier_name)
|
||||||
|
self.assertEqual(data[0].supplier_group, "Services")
|
||||||
|
self.assertTrue("supplier_type" not in data[0])
|
||||||
|
|
||||||
|
make_property_setter(
|
||||||
|
"Supplier",
|
||||||
|
None,
|
||||||
|
"search_fields",
|
||||||
|
"supplier_group, supplier_type",
|
||||||
|
"Data",
|
||||||
|
for_doctype="Doctype",
|
||||||
|
)
|
||||||
|
data = supplier_query(
|
||||||
|
"Supplier", supplier_name, "name", 0, 20, filters={"name": supplier_name}, as_dict=True
|
||||||
|
)
|
||||||
|
|
||||||
|
self.assertEqual(data[0].name, supplier_name)
|
||||||
|
self.assertEqual(data[0].supplier_group, "Services")
|
||||||
|
self.assertEqual(data[0].supplier_type, "Company")
|
||||||
|
self.assertTrue("supplier_type" in data[0])
|
||||||
|
|
||||||
|
frappe.db.set_value("Buying Settings", None, "supp_master_name", "Supplier Name")
|
||||||
|
|
||||||
|
|
||||||
def create_supplier(**args):
|
def create_supplier(**args):
|
||||||
args = frappe._dict(args)
|
args = frappe._dict(args)
|
||||||
|
|||||||
@@ -78,18 +78,16 @@ def lead_query(doctype, txt, searchfield, start, page_len, filters):
|
|||||||
|
|
||||||
@frappe.whitelist()
|
@frappe.whitelist()
|
||||||
@frappe.validate_and_sanitize_search_inputs
|
@frappe.validate_and_sanitize_search_inputs
|
||||||
def customer_query(doctype, txt, searchfield, start, page_len, filters):
|
def customer_query(doctype, txt, searchfield, start, page_len, filters, as_dict=False):
|
||||||
doctype = "Customer"
|
doctype = "Customer"
|
||||||
conditions = []
|
conditions = []
|
||||||
cust_master_name = frappe.defaults.get_user_default("cust_master_name")
|
cust_master_name = frappe.defaults.get_user_default("cust_master_name")
|
||||||
|
|
||||||
if cust_master_name == "Customer Name":
|
fields = ["name"]
|
||||||
fields = ["name", "customer_group", "territory"]
|
if cust_master_name != "Customer Name":
|
||||||
else:
|
fields.append("customer_name")
|
||||||
fields = ["name", "customer_name", "customer_group", "territory"]
|
|
||||||
|
|
||||||
fields = get_fields(doctype, fields)
|
fields = get_fields(doctype, fields)
|
||||||
|
|
||||||
searchfields = frappe.get_meta(doctype).get_search_fields()
|
searchfields = frappe.get_meta(doctype).get_search_fields()
|
||||||
searchfields = " or ".join(field + " like %(txt)s" for field in searchfields)
|
searchfields = " or ".join(field + " like %(txt)s" for field in searchfields)
|
||||||
|
|
||||||
@@ -112,20 +110,20 @@ def customer_query(doctype, txt, searchfield, start, page_len, filters):
|
|||||||
}
|
}
|
||||||
),
|
),
|
||||||
{"txt": "%%%s%%" % txt, "_txt": txt.replace("%", ""), "start": start, "page_len": page_len},
|
{"txt": "%%%s%%" % txt, "_txt": txt.replace("%", ""), "start": start, "page_len": page_len},
|
||||||
|
as_dict=as_dict,
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
# searches for supplier
|
# searches for supplier
|
||||||
@frappe.whitelist()
|
@frappe.whitelist()
|
||||||
@frappe.validate_and_sanitize_search_inputs
|
@frappe.validate_and_sanitize_search_inputs
|
||||||
def supplier_query(doctype, txt, searchfield, start, page_len, filters):
|
def supplier_query(doctype, txt, searchfield, start, page_len, filters, as_dict=False):
|
||||||
doctype = "Supplier"
|
doctype = "Supplier"
|
||||||
supp_master_name = frappe.defaults.get_user_default("supp_master_name")
|
supp_master_name = frappe.defaults.get_user_default("supp_master_name")
|
||||||
|
|
||||||
if supp_master_name == "Supplier Name":
|
fields = ["name"]
|
||||||
fields = ["name", "supplier_group"]
|
if supp_master_name != "Supplier Name":
|
||||||
else:
|
fields.append("supplier_name")
|
||||||
fields = ["name", "supplier_name", "supplier_group"]
|
|
||||||
|
|
||||||
fields = get_fields(doctype, fields)
|
fields = get_fields(doctype, fields)
|
||||||
|
|
||||||
@@ -145,6 +143,7 @@ def supplier_query(doctype, txt, searchfield, start, page_len, filters):
|
|||||||
**{"field": ", ".join(fields), "key": searchfield, "mcond": get_match_cond(doctype)}
|
**{"field": ", ".join(fields), "key": searchfield, "mcond": get_match_cond(doctype)}
|
||||||
),
|
),
|
||||||
{"txt": "%%%s%%" % txt, "_txt": txt.replace("%", ""), "start": start, "page_len": page_len},
|
{"txt": "%%%s%%" % txt, "_txt": txt.replace("%", ""), "start": start, "page_len": page_len},
|
||||||
|
as_dict=as_dict,
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -3,6 +3,7 @@
|
|||||||
|
|
||||||
|
|
||||||
import frappe
|
import frappe
|
||||||
|
from frappe.custom.doctype.property_setter.property_setter import make_property_setter
|
||||||
from frappe.test_runner import make_test_records
|
from frappe.test_runner import make_test_records
|
||||||
from frappe.tests.utils import FrappeTestCase
|
from frappe.tests.utils import FrappeTestCase
|
||||||
from frappe.utils import flt
|
from frappe.utils import flt
|
||||||
@@ -343,6 +344,37 @@ class TestCustomer(FrappeTestCase):
|
|||||||
due_date = get_due_date("2017-01-22", "Customer", "_Test Customer")
|
due_date = get_due_date("2017-01-22", "Customer", "_Test Customer")
|
||||||
self.assertEqual(due_date, "2017-01-22")
|
self.assertEqual(due_date, "2017-01-22")
|
||||||
|
|
||||||
|
def test_serach_fields_for_customer(self):
|
||||||
|
from erpnext.controllers.queries import customer_query
|
||||||
|
|
||||||
|
frappe.db.set_value("Selling Settings", None, "cust_master_name", "Naming Series")
|
||||||
|
|
||||||
|
make_property_setter(
|
||||||
|
"Customer", None, "search_fields", "customer_group", "Data", for_doctype="Doctype"
|
||||||
|
)
|
||||||
|
|
||||||
|
data = customer_query(
|
||||||
|
"Customer", "_Test Customer", "", 0, 20, filters={"name": "_Test Customer"}, as_dict=True
|
||||||
|
)
|
||||||
|
|
||||||
|
self.assertEqual(data[0].name, "_Test Customer")
|
||||||
|
self.assertEqual(data[0].customer_group, "_Test Customer Group")
|
||||||
|
self.assertTrue("territory" not in data[0])
|
||||||
|
|
||||||
|
make_property_setter(
|
||||||
|
"Customer", None, "search_fields", "customer_group, territory", "Data", for_doctype="Doctype"
|
||||||
|
)
|
||||||
|
data = customer_query(
|
||||||
|
"Customer", "_Test Customer", "", 0, 20, filters={"name": "_Test Customer"}, as_dict=True
|
||||||
|
)
|
||||||
|
|
||||||
|
self.assertEqual(data[0].name, "_Test Customer")
|
||||||
|
self.assertEqual(data[0].customer_group, "_Test Customer Group")
|
||||||
|
self.assertEqual(data[0].territory, "_Test Territory")
|
||||||
|
self.assertTrue("territory" in data[0])
|
||||||
|
|
||||||
|
frappe.db.set_value("Selling Settings", None, "cust_master_name", "Customer Name")
|
||||||
|
|
||||||
|
|
||||||
def get_customer_dict(customer_name):
|
def get_customer_dict(customer_name):
|
||||||
return {
|
return {
|
||||||
|
|||||||
Reference in New Issue
Block a user