mirror of
https://github.com/frappe/erpnext.git
synced 2026-08-14 07:01:56 +00:00
fix: party specific item doesnt work if there are 2 suppliers with same item
(cherry picked from commit 98f5116a09)
This commit is contained in:
@@ -216,11 +216,8 @@ def item_query(doctype, txt, searchfield, start, page_len, filters, as_dict=Fals
|
|||||||
group = "Customer Group" if filters.get("customer") else "Supplier Group"
|
group = "Customer Group" if filters.get("customer") else "Supplier Group"
|
||||||
item_rules_list = frappe.get_all(
|
item_rules_list = frappe.get_all(
|
||||||
"Party Specific Item",
|
"Party Specific Item",
|
||||||
filters={
|
filters={"party_type": party_type},
|
||||||
"party": ["!=", party],
|
fields=["party", "restrict_based_on", "based_on_value"],
|
||||||
"party_type": party_type,
|
|
||||||
},
|
|
||||||
fields=["restrict_based_on", "based_on_value"],
|
|
||||||
)
|
)
|
||||||
|
|
||||||
party_group_rules_list = frappe.get_all(
|
party_group_rules_list = frappe.get_all(
|
||||||
@@ -229,21 +226,30 @@ def item_query(doctype, txt, searchfield, start, page_len, filters, as_dict=Fals
|
|||||||
fields=["party as party_group", "restrict_based_on", "based_on_value"],
|
fields=["party as party_group", "restrict_based_on", "based_on_value"],
|
||||||
)
|
)
|
||||||
current_party_group = frappe.get_value(party_type, party, frappe.scrub(group))
|
current_party_group = frappe.get_value(party_type, party, frappe.scrub(group))
|
||||||
|
|
||||||
|
restricted_items = defaultdict(set)
|
||||||
|
allowed_items = defaultdict(set)
|
||||||
|
|
||||||
|
for rule in item_rules_list:
|
||||||
|
restrict_based_on = "name" if rule.restrict_based_on == "Item" else rule.restrict_based_on
|
||||||
|
|
||||||
|
if rule.party == party:
|
||||||
|
allowed_items[restrict_based_on].add(rule.based_on_value)
|
||||||
|
else:
|
||||||
|
restricted_items[restrict_based_on].add(rule.based_on_value)
|
||||||
|
|
||||||
for rule in party_group_rules_list:
|
for rule in party_group_rules_list:
|
||||||
if current_party_group != rule.party_group:
|
restrict_based_on = "name" if rule.restrict_based_on == "Item" else rule.restrict_based_on
|
||||||
item_rules_list.append(rule)
|
|
||||||
|
|
||||||
filters_dict = {}
|
if current_party_group == rule.party_group:
|
||||||
for rule in item_rules_list:
|
allowed_items[restrict_based_on].add(rule.based_on_value)
|
||||||
if rule["restrict_based_on"] == "Item":
|
else:
|
||||||
rule["restrict_based_on"] = "name"
|
restricted_items[restrict_based_on].add(rule.based_on_value)
|
||||||
filters_dict[rule.restrict_based_on] = []
|
|
||||||
|
|
||||||
for rule in item_rules_list:
|
for field, restricted_values in restricted_items.items():
|
||||||
filters_dict[rule.restrict_based_on].append(rule.based_on_value)
|
values_to_exclude = restricted_values - allowed_items[field]
|
||||||
|
if values_to_exclude:
|
||||||
for filter in filters_dict:
|
filters[scrub(field)] = ["not in", list(values_to_exclude)]
|
||||||
filters[scrub(filter)] = ["not in", filters_dict[filter]]
|
|
||||||
|
|
||||||
if filters.get("customer"):
|
if filters.get("customer"):
|
||||||
del filters["customer"]
|
del filters["customer"]
|
||||||
|
|||||||
Reference in New Issue
Block a user