fix: link cash flow rows and fix summary linking

(cherry picked from commit b94af28587)

# Conflicts:
#	erpnext/public/js/financial_statements.js
This commit is contained in:
David
2024-07-29 20:01:22 +02:00
committed by Mergify
parent 651d7e4cfc
commit 633be8d06b
4 changed files with 57 additions and 36 deletions

View File

@@ -1,7 +1,10 @@
// Copyright (c) 2013, Frappe Technologies Pvt. Ltd. and contributors // Copyright (c) 2013, Frappe Technologies Pvt. Ltd. and contributors
// For license information, please see license.txt // For license information, please see license.txt
frappe.query_reports["Cash Flow"] = $.extend({}, erpnext.financial_statements); frappe.query_reports["Cash Flow"] = $.extend(erpnext.financial_statements, {
name_field: "section",
parent_field: "parent_section",
});
erpnext.utils.add_dimensions("Cash Flow", 10); erpnext.utils.add_dimensions("Cash Flow", 10);

View File

@@ -30,7 +30,7 @@ def execute(filters=None):
company=filters.company, company=filters.company,
) )
cash_flow_accounts = get_cash_flow_accounts() cash_flow_sections = get_cash_flow_accounts()
# compute net profit / loss # compute net profit / loss
income = get_data( income = get_data(
@@ -60,14 +60,14 @@ def execute(filters=None):
summary_data = {} summary_data = {}
company_currency = frappe.get_cached_value("Company", filters.company, "default_currency") company_currency = frappe.get_cached_value("Company", filters.company, "default_currency")
for cash_flow_account in cash_flow_accounts: for cash_flow_section in cash_flow_sections:
section_data = [] section_data = []
data.append( data.append(
{ {
"account_name": cash_flow_account["section_header"], "section_name": "'" + cash_flow_section["section_header"] + "'",
"parent_account": None, "parent_section": None,
"indent": 0.0, "indent": 0.0,
"account": cash_flow_account["section_header"], "section": cash_flow_section["section_header"],
} }
) )
@@ -75,31 +75,40 @@ def execute(filters=None):
# add first net income in operations section # add first net income in operations section
if net_profit_loss: if net_profit_loss:
net_profit_loss.update( net_profit_loss.update(
{"indent": 1, "parent_account": cash_flow_accounts[0]["section_header"]} {"indent": 1, "parent_section": cash_flow_sections[0]["section_header"]}
) )
data.append(net_profit_loss) data.append(net_profit_loss)
section_data.append(net_profit_loss) section_data.append(net_profit_loss)
for account in cash_flow_account["account_types"]: for row in cash_flow_section["account_types"]:
account_data = get_account_type_based_data( row_data = get_account_type_based_data(
filters.company, account["account_type"], period_list, filters.accumulated_values, filters filters.company, row["account_type"], period_list, filters.accumulated_values, filters
) )
account_data.update( accounts = frappe.get_all(
"Account",
filters={
"account_type": row["account_type"],
"is_group": 0,
},
pluck="name",
)
row_data.update(
{ {
"account_name": account["label"], "section_name": row["label"],
"account": account["label"], "section": row["label"],
"indent": 1, "indent": 1,
"parent_account": cash_flow_account["section_header"], "accounts": accounts,
"parent_section": cash_flow_section["section_header"],
"currency": company_currency, "currency": company_currency,
} }
) )
data.append(account_data) data.append(row_data)
section_data.append(account_data) section_data.append(row_data)
add_total_row_account( add_total_row_account(
data, data,
section_data, section_data,
cash_flow_account["section_footer"], cash_flow_section["section_footer"],
period_list, period_list,
company_currency, company_currency,
summary_data, summary_data,
@@ -109,7 +118,7 @@ def execute(filters=None):
add_total_row_account( add_total_row_account(
data, data, _("Net Change in Cash"), period_list, company_currency, summary_data, filters data, data, _("Net Change in Cash"), period_list, company_currency, summary_data, filters
) )
columns = get_columns(filters.periodicity, period_list, filters.accumulated_values, filters.company) columns = get_columns(filters.periodicity, period_list, filters.accumulated_values, filters.company, True)
chart = get_chart_data(columns, data, company_currency) chart = get_chart_data(columns, data, company_currency)
@@ -217,8 +226,8 @@ def get_start_date(period, accumulated_values, company):
def add_total_row_account(out, data, label, period_list, currency, summary_data, filters, consolidated=False): def add_total_row_account(out, data, label, period_list, currency, summary_data, filters, consolidated=False):
total_row = { total_row = {
"account_name": "'" + _("{0}").format(label) + "'", "section_name": "'" + _("{0}").format(label) + "'",
"account": "'" + _("{0}").format(label) + "'", "section": "'" + _("{0}").format(label) + "'",
"currency": currency, "currency": currency,
} }
@@ -229,7 +238,7 @@ def add_total_row_account(out, data, label, period_list, currency, summary_data,
period_list = get_filtered_list_for_consolidated_report(filters, period_list) period_list = get_filtered_list_for_consolidated_report(filters, period_list)
for row in data: for row in data:
if row.get("parent_account"): if row.get("parent_section"):
for period in period_list: for period in period_list:
key = period if consolidated else period["key"] key = period if consolidated else period["key"]
total_row.setdefault(key, 0.0) total_row.setdefault(key, 0.0)
@@ -254,13 +263,14 @@ def get_report_summary(summary_data, currency):
def get_chart_data(columns, data, currency): def get_chart_data(columns, data, currency):
labels = [d.get("label") for d in columns[2:]] labels = [d.get("label") for d in columns[2:]]
print(data)
datasets = [ datasets = [
{ {
"name": account.get("account").replace("'", ""), "name": section.get("section").replace("'", ""),
"values": [account.get(d.get("fieldname")) for d in columns[2:]], "values": [section.get(d.get("fieldname")) for d in columns[2:]],
} }
for account in data for section in data
if account.get("parent_account") is None and account.get("currency") if section.get("parent_section") is None and section.get("currency")
] ]
datasets = datasets[:-1] datasets = datasets[:-1]

View File

@@ -335,8 +335,8 @@ def filter_out_zero_value_rows(data, parent_children_map, show_zero_values=False
def add_total_row(out, root_type, balance_must_be, period_list, company_currency): def add_total_row(out, root_type, balance_must_be, period_list, company_currency):
total_row = { total_row = {
"account_name": _("Total {0} ({1})").format(_(root_type), _(balance_must_be)), "account_name": "'" + _("Total {0} ({1})").format(_(root_type), _(balance_must_be)) + "'",
"account": _("Total {0} ({1})").format(_(root_type), _(balance_must_be)), "account": "'" + _("Total {0} ({1})").format(_(root_type), _(balance_must_be)) + "'",
"currency": company_currency, "currency": company_currency,
"opening_balance": 0.0, "opening_balance": 0.0,
} }
@@ -617,11 +617,11 @@ def get_cost_centers_with_children(cost_centers):
return list(set(all_cost_centers)) return list(set(all_cost_centers))
def get_columns(periodicity, period_list, accumulated_values=1, company=None): def get_columns(periodicity, period_list, accumulated_values=1, company=None, cash_flow=False):
columns = [ columns = [
{ {
"fieldname": "account", "fieldname": "stub",
"label": _("Account"), "label": _("Account") if not cash_flow else _("Section"),
"fieldtype": "Link", "fieldtype": "Link",
"options": "Account", "options": "Account",
"width": 300, "width": 300,

View File

@@ -28,6 +28,13 @@ erpnext.financial_statements = {
return value; return value;
} else if (frappe.query_report.get_filter_value("selected_view") == "Margin" && data) { } else if (frappe.query_report.get_filter_value("selected_view") == "Margin" && data) {
<<<<<<< HEAD
=======
if (column.fieldname == "stub" && data.account_name == __("Income")) {
//Taking the total income from each column (for all the financial years) as the base (100%)
this.baseData = row;
}
>>>>>>> b94af28587 (fix: link cash flow rows and fix summary linking)
if (column.colIndex >= 2) { if (column.colIndex >= 2) {
const marginPercent = data[column.fieldname]; const marginPercent = data[column.fieldname];
@@ -41,8 +48,9 @@ erpnext.financial_statements = {
} }
} }
if (data && column.fieldname == "account") { if (data && column.fieldname == "stub") {
value = data.account_name || value; // first column
value = data.section_name || data.account_name || value;
if (filter && filter?.text && filter?.type == "contains") { if (filter && filter?.text && filter?.type == "contains") {
if (!value.toLowerCase().includes(filter.text)) { if (!value.toLowerCase().includes(filter.text)) {
@@ -50,7 +58,7 @@ erpnext.financial_statements = {
} }
} }
if (data.account) { if (data.account || data.accounts) {
column.link_onclick = column.link_onclick =
"erpnext.financial_statements.open_general_ledger(" + JSON.stringify(data) + ")"; "erpnext.financial_statements.open_general_ledger(" + JSON.stringify(data) + ")";
} }
@@ -59,7 +67,7 @@ erpnext.financial_statements = {
value = default_formatter(value, row, column, data); value = default_formatter(value, row, column, data);
if (data && !data.parent_account) { if (data && !data.parent_account && !data.parent_section) {
value = $(`<span>${value}</span>`); value = $(`<span>${value}</span>`);
var $value = $(value).css("font-weight", "bold"); var $value = $(value).css("font-weight", "bold");
@@ -73,13 +81,13 @@ erpnext.financial_statements = {
return value; return value;
}, },
open_general_ledger: function (data) { open_general_ledger: function (data) {
if (!data.account) return; if (!data.account && !data.accounts) return;
let project = $.grep(frappe.query_report.filters, function (e) { let project = $.grep(frappe.query_report.filters, function (e) {
return e.df.fieldname == "project"; return e.df.fieldname == "project";
}); });
frappe.route_options = { frappe.route_options = {
account: data.account, account: data.account || data.accounts,
company: frappe.query_report.get_filter_value("company"), company: frappe.query_report.get_filter_value("company"),
from_date: data.from_date || data.year_start_date, from_date: data.from_date || data.year_start_date,
to_date: data.to_date || data.year_end_date, to_date: data.to_date || data.year_end_date,