From d91813c2779ae81f544d35c6925bb5580ebf4f95 Mon Sep 17 00:00:00 2001 From: Deepesh Garg Date: Mon, 15 Jan 2024 16:50:14 +0530 Subject: [PATCH] feat: Income account filter in item-wise reports --- .../item_wise_sales_register.js | 16 +++++++++++++- .../item_wise_sales_register.py | 21 ++++++++++++++++--- 2 files changed, 33 insertions(+), 4 deletions(-) diff --git a/erpnext/accounts/report/item_wise_sales_register/item_wise_sales_register.js b/erpnext/accounts/report/item_wise_sales_register/item_wise_sales_register.js index 39fb3ca5ee..06f426b71e 100644 --- a/erpnext/accounts/report/item_wise_sales_register/item_wise_sales_register.js +++ b/erpnext/accounts/report/item_wise_sales_register/item_wise_sales_register.js @@ -59,7 +59,21 @@ frappe.query_reports["Item-wise Sales Register"] = { "fieldname": "group_by", "fieldtype": "Select", "options": ["Customer Group", "Customer", "Item Group", "Item", "Territory", "Invoice"] - } + }, + { + "fieldname": "income_account", + "label": __("Income Account"), + "fieldtype": "Link", + "options": "Account", + get_query: () => { + let company = frappe.query_report.get_filter_value('company'); + return { + filters: { + 'company': company, + } + }; + } + }, ], "formatter": function(value, row, column, data, default_formatter) { value = default_formatter(value, row, column, data); diff --git a/erpnext/accounts/report/item_wise_sales_register/item_wise_sales_register.py b/erpnext/accounts/report/item_wise_sales_register/item_wise_sales_register.py index ce22d7566c..56ae41a5e1 100644 --- a/erpnext/accounts/report/item_wise_sales_register/item_wise_sales_register.py +++ b/erpnext/accounts/report/item_wise_sales_register/item_wise_sales_register.py @@ -83,9 +83,7 @@ def _execute(filters=None, additional_table_columns=None, additional_conditions= "company": d.company, "sales_order": d.sales_order, "delivery_note": d.delivery_note, - "income_account": d.unrealized_profit_loss_account - if d.is_internal_customer == 1 - else d.income_account, + "income_account": get_income_account(d), "cost_center": d.cost_center, "stock_qty": d.stock_qty, "stock_uom": d.stock_uom, @@ -150,6 +148,15 @@ def _execute(filters=None, additional_table_columns=None, additional_conditions= return columns, data, None, None, None, skip_total_row +def get_income_account(row): + if row.enable_deferred_revenue: + return row.deferred_revenue_account + elif row.is_internal_customer == 1: + return row.unrealized_profit_loss_account + else: + return row.income_account + + def get_columns(additional_table_columns, filters): columns = [] @@ -358,6 +365,13 @@ def get_conditions(filters, additional_conditions=None): if filters.get("item_group"): conditions += """and ifnull(`tabSales Invoice Item`.item_group, '') = %(item_group)s""" + if filters.get("income_account"): + conditions += """ + and (ifnull(`tabSales Invoice Item`.income_account, '') = %(income_account)s + or ifnull(`tabSales Invoice Item`.deferred_revenue_account, '') = %(income_account)s + or ifnull(`tabSales Invoice`.unrealized_profit_loss_account, '') = %(income_account)s) + """ + if not filters.get("group_by"): conditions += ( "ORDER BY `tabSales Invoice`.posting_date desc, `tabSales Invoice Item`.item_group desc" @@ -399,6 +413,7 @@ def get_items(filters, additional_query_columns, additional_conditions=None): `tabItem`.`item_name` as i_item_name, `tabItem`.`item_group` as i_item_group, `tabSales Invoice Item`.sales_order, `tabSales Invoice Item`.delivery_note, `tabSales Invoice Item`.income_account, `tabSales Invoice Item`.cost_center, + `tabSales Invoice Item`.enable_deferred_revenue, `tabSales Invoice Item`.deferred_revenue_account, `tabSales Invoice Item`.stock_qty, `tabSales Invoice Item`.stock_uom, `tabSales Invoice Item`.base_net_rate, `tabSales Invoice Item`.base_net_amount, `tabSales Invoice`.customer_name, `tabSales Invoice`.customer_group, `tabSales Invoice Item`.so_detail,