From 7a7665d1d0b7c0767480b6f1c583837e336eb707 Mon Sep 17 00:00:00 2001 From: GangaManoj Date: Fri, 20 Aug 2021 02:16:49 +0530 Subject: [PATCH] fix: Return data as dict if the report is grouped by Invoice --- .../report/gross_profit/gross_profit.py | 62 ++++++++++++++++--- 1 file changed, 54 insertions(+), 8 deletions(-) diff --git a/erpnext/accounts/report/gross_profit/gross_profit.py b/erpnext/accounts/report/gross_profit/gross_profit.py index c949d9b74e5..308872c3405 100644 --- a/erpnext/accounts/report/gross_profit/gross_profit.py +++ b/erpnext/accounts/report/gross_profit/gross_profit.py @@ -41,15 +41,35 @@ def execute(filters=None): columns = get_columns(group_wise_columns, filters) - for idx, src in enumerate(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) - if idx == len(gross_profit_data.grouped_data)-1: - row[0] = frappe.bold("Total") - 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 idx, src in enumerate(gross_profit_data.grouped_data): + row = [] + for col in group_wise_columns.get(scrub(filters.group_by)): + row.append(src.get(col)) + + row.append(filters.currency) + if idx == len(gross_profit_data.grouped_data)-1: + row[0] = frappe.bold("Total") + data.append(row) return columns, data @@ -93,12 +113,38 @@ def get_columns(group_wise_columns, filters): 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()