fix: Return data as dict if the report is grouped by Invoice
diff --git a/erpnext/accounts/report/gross_profit/gross_profit.py b/erpnext/accounts/report/gross_profit/gross_profit.py
index 6d8623c..b260279 100644
--- a/erpnext/accounts/report/gross_profit/gross_profit.py
+++ b/erpnext/accounts/report/gross_profit/gross_profit.py
@@ -41,14 +41,35 @@
columns = get_columns(group_wise_columns, filters)
- for src in gross_profit_data.grouped_data:
- row = []
- for col in group_wise_columns.get(scrub(filters.group_by)):
- row.append(src.get(col))
+ if filters.group_by == 'Invoice':
+ column_names = get_column_names()
- row.append(filters.currency)
- data.append(row)
+ for src in gross_profit_data.si_list:
+ row = frappe._dict()
+ row['currency'] = filters.currency
+ for col in group_wise_columns.get(scrub(filters.group_by)):
+ row[column_names[col]] = src.get(col)
+
+ if row.item_code:
+ row.indent = 1.0
+ row.parent_invoice = src.parent_invoice
+ else:
+ row.indent = 0.0
+ row.parent_invoice = ''
+
+ data.append(row)
+
+ else:
+ for src in gross_profit_data.grouped_data:
+ row = []
+ row.append(filters.currency)
+
+ for col in group_wise_columns.get(scrub(filters.group_by)):
+ row.append(src.get(col))
+
+ data.append(row)
+
return columns, data
def get_columns(group_wise_columns, filters):
@@ -91,12 +112,38 @@
return columns
+def get_column_names():
+ return frappe._dict({
+ 'parent': 'sales_invoice',
+ 'customer': 'customer',
+ 'customer_group': 'customer_group',
+ 'posting_date': 'posting_date',
+ 'item_code': 'item_code',
+ 'item_name': 'item_name',
+ 'item_group': 'item_group',
+ 'brand': 'brand',
+ 'description': 'description',
+ 'warehouse': 'warehouse',
+ 'qty': 'qty',
+ 'base_rate': 'avg._selling_rate',
+ 'buying_rate': 'valuation_rate',
+ 'base_amount': 'selling_amount',
+ 'buying_amount': 'buying_amount',
+ 'gross_profit': 'gross_profit',
+ 'gross_profit_percent': 'gross_profit_%',
+ 'project': 'project'
+ })
+
class GrossProfitGenerator(object):
def __init__(self, filters=None):
self.data = []
self.average_buying_rate = {}
self.filters = frappe._dict(filters)
self.load_invoice_items()
+
+ # if filters.group_by == 'Invoice':
+ # self.group_items_by_invoice()
+
self.load_stock_ledger_entries()
self.load_product_bundle()
self.load_non_stock_items()