diff --git a/erpnext/controllers/accounts_controller.py b/erpnext/controllers/accounts_controller.py index 6679a9eae12b6cc52389bebe56d386a4fc4e5ee4..e2d97df8f67c52cfe02848bd7b0b80f7150c11ec 100644 --- a/erpnext/controllers/accounts_controller.py +++ b/erpnext/controllers/accounts_controller.py @@ -2,6 +2,7 @@ # License: GNU General Public License v3. See license.txt import json +from collections import defaultdict import frappe from frappe import _, bold, qb, throw @@ -2105,26 +2106,26 @@ class AccountsController(TransactionBase): ) def group_similar_items(self): - group_item_qty = {} - group_item_amount = {} - group_item_net_amount = {} + grouped_items = {} # to update serial number in print count = 0 + fields_to_group = frappe.get_hooks("fields_for_group_similar_items") + fields_to_group = set(fields_to_group) + for item in self.items: - group_item_qty[item.item_code] = group_item_qty.get(item.item_code, 0) + item.qty - group_item_amount[item.item_code] = group_item_amount.get(item.item_code, 0) + item.amount - group_item_net_amount[item.item_code] = ( - group_item_net_amount.get(item.item_code, 0) + item.net_amount - ) + item_values = grouped_items.setdefault(item.item_code, defaultdict(int)) + + for field in fields_to_group: + item_values[field] += item.get(field, 0) duplicate_list = [] for item in self.items: - if item.item_code in group_item_qty: + if item.item_code in grouped_items: count += 1 - item.qty = group_item_qty[item.item_code] - item.amount = group_item_amount[item.item_code] - item.net_amount = group_item_net_amount[item.item_code] + + for field in fields_to_group: + item.set(field, grouped_items[item.item_code][field]) if item.qty: item.rate = flt(flt(item.amount) / flt(item.qty), item.precision("rate")) @@ -2132,7 +2133,7 @@ class AccountsController(TransactionBase): item.rate = 0 item.idx = count - del group_item_qty[item.item_code] + del grouped_items[item.item_code] else: duplicate_list.append(item) for item in duplicate_list: diff --git a/erpnext/hooks.py b/erpnext/hooks.py index dd435c886693b964042db4991c318d3685fd0201..ad86eafab5b2200b8ce2dbac26ae4500e9130707 100644 --- a/erpnext/hooks.py +++ b/erpnext/hooks.py @@ -723,3 +723,5 @@ default_log_clearing_doctypes = { } export_python_type_annotations = True + +fields_for_group_similar_items = ["qty", "amount"]