From 71371b0ba5468a55aac234fa6c002c69b77026c7 Mon Sep 17 00:00:00 2001 From: Mihir Kandoi Date: Tue, 27 Jan 2026 15:39:37 +0530 Subject: [PATCH 1/2] fix: show everything else besides other party specific item --- erpnext/controllers/queries.py | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/erpnext/controllers/queries.py b/erpnext/controllers/queries.py index aae0fd4e9e5..e96d155701e 100644 --- a/erpnext/controllers/queries.py +++ b/erpnext/controllers/queries.py @@ -212,7 +212,10 @@ def item_query(doctype, txt, searchfield, start, page_len, filters, as_dict=Fals party = filters.get("customer") or filters.get("supplier") item_rules_list = frappe.get_all( "Party Specific Item", - filters={"party": party}, + filters={ + "party": ["!=", party], + "party_type": "Customer" if filters.get("customer") else "Supplier", + }, fields=["restrict_based_on", "based_on_value"], ) @@ -226,7 +229,7 @@ def item_query(doctype, txt, searchfield, start, page_len, filters, as_dict=Fals filters_dict[rule.restrict_based_on].append(rule.based_on_value) for filter in filters_dict: - filters[scrub(filter)] = ["in", filters_dict[filter]] + filters[scrub(filter)] = ["not in", filters_dict[filter]] if filters.get("customer"): del filters["customer"] From 5eeebbde7f0120f81106889bdffe306e8f574754 Mon Sep 17 00:00:00 2001 From: Mihir Kandoi Date: Tue, 27 Jan 2026 16:10:44 +0530 Subject: [PATCH 2/2] test: fix tests --- .../test_party_specific_item.py | 16 ++++++++++++---- 1 file changed, 12 insertions(+), 4 deletions(-) diff --git a/erpnext/selling/doctype/party_specific_item/test_party_specific_item.py b/erpnext/selling/doctype/party_specific_item/test_party_specific_item.py index 89426ca1f65..218a3e7c696 100644 --- a/erpnext/selling/doctype/party_specific_item/test_party_specific_item.py +++ b/erpnext/selling/doctype/party_specific_item/test_party_specific_item.py @@ -35,8 +35,7 @@ class TestPartySpecificItem(IntegrationTestCase): items = item_query( doctype="Item", txt="", searchfield="name", start=0, page_len=20, filters=filters, as_dict=False ) - for item in items: - self.assertEqual(item[0], self.item.name) + self.assertTrue(self.item.name in flatten(items)) def test_item_query_for_supplier(self): create_party_specific_item( @@ -49,5 +48,14 @@ class TestPartySpecificItem(IntegrationTestCase): items = item_query( doctype="Item", txt="", searchfield="name", start=0, page_len=20, filters=filters, as_dict=False ) - for item in items: - self.assertEqual(item[2], self.item.item_group) + self.assertTrue(self.item.item_group in flatten(items)) + + +def flatten(lst): + result = [] + for item in lst: + if isinstance(item, tuple): + result.extend(flatten(item)) + else: + result.append(item) + return result