From 68b8ba7235a13a0bbbbcf59cc02f8c1ecd068791 Mon Sep 17 00:00:00 2001 From: Antoine Maas Date: Wed, 3 Jun 2026 09:35:13 +0200 Subject: [PATCH 1/7] regional(setup): add 0% and 6% VAT rates for Belgium (#54719) --- erpnext/setup/setup_wizard/data/country_wise_tax.json | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/erpnext/setup/setup_wizard/data/country_wise_tax.json b/erpnext/setup/setup_wizard/data/country_wise_tax.json index 87cb7a0c871..469b5c7baed 100644 --- a/erpnext/setup/setup_wizard/data/country_wise_tax.json +++ b/erpnext/setup/setup_wizard/data/country_wise_tax.json @@ -262,7 +262,15 @@ }, "Belgium VAT 12%": { "account_name": "VAT 12%", - "tax_rate": 12 + "tax_rate": 12.00 + }, + "Belgium VAT 6%": { + "account_name": "VAT 6%", + "tax_rate": 6.00 + }, + "Belgium VAT 0%": { + "account_name": "VAT 0%", + "tax_rate": 0.00 } }, From 6c46692cc4b90652b0db4b7d8de9218545aa3b8a Mon Sep 17 00:00:00 2001 From: Abdeali Chharchhodawala <99460106+Abdeali099@users.noreply.github.com> Date: Wed, 3 Jun 2026 13:08:45 +0530 Subject: [PATCH 2/7] fix: add custom dimensions filters in Gross and Net profit report (#55110) --- .../gross_and_net_profit_report.js | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/erpnext/accounts/report/gross_and_net_profit_report/gross_and_net_profit_report.js b/erpnext/accounts/report/gross_and_net_profit_report/gross_and_net_profit_report.js index 2448eef9072..78eb8e624fc 100644 --- a/erpnext/accounts/report/gross_and_net_profit_report/gross_and_net_profit_report.js +++ b/erpnext/accounts/report/gross_and_net_profit_report/gross_and_net_profit_report.js @@ -1,9 +1,13 @@ // Copyright (c) 2016, Frappe Technologies Pvt. Ltd. and contributors // For license information, please see license.txt -frappe.query_reports["Gross and Net Profit Report"] = $.extend({}, erpnext.financial_statements); +const GNP_REPORT = "Gross and Net Profit Report"; -frappe.query_reports["Gross and Net Profit Report"]["filters"].push({ +frappe.query_reports[GNP_REPORT] = $.extend({}, erpnext.financial_statements); + +erpnext.utils.add_dimensions(GNP_REPORT, 10); + +frappe.query_reports[GNP_REPORT]["filters"].push({ fieldname: "accumulated_values", label: __("Accumulated Values"), fieldtype: "Check", From c4d28a261271c69853efb51ecd481b9aa94fd961 Mon Sep 17 00:00:00 2001 From: Pandiyan P Date: Wed, 3 Jun 2026 13:10:26 +0530 Subject: [PATCH 3/7] fix(stock): set stock received but not billed account for purchase (#55149) --- erpnext/stock/get_item_details.py | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/erpnext/stock/get_item_details.py b/erpnext/stock/get_item_details.py index 38cb8b2eb1b..b6c57865d4a 100644 --- a/erpnext/stock/get_item_details.py +++ b/erpnext/stock/get_item_details.py @@ -558,10 +558,21 @@ def get_basic_details(ctx: ItemDetailsCtx, item, overwrite_warehouse=True) -> It ctx.name, ctx.conversion_rate, item.name, out.conversion_factor ) + expense_account_field = "default_expense_account" + if ( + item.is_stock_item + and erpnext.is_perpetual_inventory_enabled(ctx.company) + and ( + ctx.doctype == "Purchase Receipt" + or (ctx.doctype == "Purchase Invoice" and ctx.get("update_stock")) + ) + ): + expense_account_field = "stock_received_but_not_billed" + # if default specified in item is for another company, fetch from company for d in [ ["Account", "income_account", "default_income_account"], - ["Account", "expense_account", "default_expense_account"], + ["Account", "expense_account", expense_account_field], ["Cost Center", "cost_center", "cost_center"], ["Warehouse", "warehouse", ""], ]: From d0d9411700a44027667f6a036c7d2f986fe3e343 Mon Sep 17 00:00:00 2001 From: Pandiyan P Date: Wed, 3 Jun 2026 13:11:50 +0530 Subject: [PATCH 4/7] fix(accounts): include asset items in purchase receipt validation (#55150) --- .../accounts/doctype/purchase_invoice/purchase_invoice.py | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/erpnext/accounts/doctype/purchase_invoice/purchase_invoice.py b/erpnext/accounts/doctype/purchase_invoice/purchase_invoice.py index b313f9d32ab..e262cdbc03f 100644 --- a/erpnext/accounts/doctype/purchase_invoice/purchase_invoice.py +++ b/erpnext/accounts/doctype/purchase_invoice/purchase_invoice.py @@ -629,15 +629,16 @@ class PurchaseInvoice(BuyingController): throw(msg, title=_("Mandatory Purchase Order")) def pr_required(self): - stock_items = self.get_stock_items() if frappe.db.get_single_value("Buying Settings", "pr_required") == "Yes": + stock_and_asset_items = self.get_stock_items() + stock_and_asset_items.extend(self.get_asset_items()) if frappe.get_value( "Supplier", self.supplier, "allow_purchase_invoice_creation_without_purchase_receipt" ): return for d in self.get("items"): - if not d.purchase_receipt and d.item_code in stock_items: + if not d.purchase_receipt and d.item_code in stock_and_asset_items: msg = _("Purchase Receipt Required for item {}").format(frappe.bold(d.item_code)) msg += "

" msg += _( From a75693a81fbfd70cfcec75aae99198f61a8153e7 Mon Sep 17 00:00:00 2001 From: Shllokkk <140623894+Shllokkk@users.noreply.github.com> Date: Wed, 3 Jun 2026 13:13:04 +0530 Subject: [PATCH 5/7] fix: minor fixes in report print formats (#55151) --- .../accounts_payable_standard.json | 4 +- .../accounts_payable_summary_standard.json | 4 +- .../accounts_receivable_standard.json | 4 +- .../accounts_receivable_summary_standard.json | 4 +- .../balance_sheet_standard.json | 4 +- .../cash_flow_statement_standard.json | 4 +- .../general_ledger_standard.json | 4 +- .../p&l_statement_standard.json | 4 +- .../trial_balance_standard.json | 4 +- .../accounts_payable/accounts_payable.json | 47 ++++++++++--------- .../accounts_payable_summary.json | 47 ++++++++++--------- .../accounts_receivable.json | 43 +++++++++-------- .../accounts_receivable_summary.json | 43 +++++++++-------- .../report/balance_sheet/balance_sheet.json | 45 ++++++++++-------- .../accounts/report/cash_flow/cash_flow.json | 45 ++++++++++-------- .../report/general_ledger/general_ledger.json | 6 +-- .../profit_and_loss_statement.json | 45 ++++++++++-------- .../report/trial_balance/trial_balance.json | 39 ++++++++------- 18 files changed, 218 insertions(+), 178 deletions(-) diff --git a/erpnext/accounts/print_format/accounts_payable_standard/accounts_payable_standard.json b/erpnext/accounts/print_format/accounts_payable_standard/accounts_payable_standard.json index ac895ba2b33..fdc49328eda 100644 --- a/erpnext/accounts/print_format/accounts_payable_standard/accounts_payable_standard.json +++ b/erpnext/accounts/print_format/accounts_payable_standard/accounts_payable_standard.json @@ -8,14 +8,14 @@ "docstatus": 0, "doctype": "Print Format", "font_size": 14, - "html": "\n\n
\n\n
\n\n \n
\n
\n {%= __(report.report_name) %}\n
\n
\n\n \n
\n
\n
\n {%= __(\"Supplier\") %}:\n {%= (filters.party.length && filters.party.join(\", \")) || __(\"All Parties\") %}\n
\n
\n\n
\n
\n {%= __(\"Report Date\") %}:\n {%= frappe.datetime.str_to_user(filters.report_date) %}\n
\n
\n
\n\n \n
\n \n \n \n \n \n\n {% if(filters.show_remarks) { %}\n \n {% } %}\n\n \n \n \n \n \n\n \n {% for(var i=0, l=data.length; i\n \n\n \n\n {% if(filters.show_remarks) { %}\n \n {% } %}\n\n \n \n \n \n {% } %}\n \n
{%= __(\"Date\") %}{%= __(\"Reference\") %}{%= __(\"Remarks\") %}{%= __(\"Age (Days)\") %}{%= __(\"Invoiced Amount\") %}{%= __(\"Outstanding Amount\") %}
{%= frappe.datetime.str_to_user(data[i][\"posting_date\"]) %}\n {% if(i == data.length - 1) { %}\n {%= __(\"Total\") %}\n {% } else { %}\n {%= data[i][\"voucher_no\"] %}\n {% } %}\n \n {% if(data[i][\"remarks\"] && data[i][\"remarks\"] != \"No Remarks\") { %}\n {%= data[i][\"remarks\"] %}\n {% } %}\n {%= data[i][\"age\"] %}{%= format_currency(data[i][\"invoiced\"], data[i][\"currency\"]) %}{%= format_currency(data[i][\"outstanding\"], data[i][\"currency\"]) %}
\n
\n\n  \n\n {% if(filters.show_future_payments) { %}\n {%\n var balance_row = data.slice(-1).pop();\n var start = report.columns.findIndex(e => e.fieldname == 'age');\n var currency = data[data.length - 1][\"currency\"];\n\n var ranges = [\n report.columns[start].label,\n report.columns[start+1].label,\n report.columns[start+2].label,\n report.columns[start+3].label,\n report.columns[start+4].label,\n report.columns[start+5].label\n ];\n %}\n\n {% if(balance_row) { %}\n
\n \n \n \n \n {% for(var i = 0; i < ranges.length; i++) { %}\n \n {% } %}\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
{%= __(ranges[i]) %}{%= __(\"Total\") %}
{%= __(\"Total Outstanding\") %}{%= format_number(balance_row[\"age\"], null, 2) %}{%= format_currency(balance_row[\"range1\"], currency) %}{%= format_currency(balance_row[\"range2\"], currency) %}{%= format_currency(balance_row[\"range3\"], currency) %}{%= format_currency(balance_row[\"range4\"], currency) %}{%= format_currency(balance_row[\"range5\"], currency) %}{%= format_currency(flt(balance_row[\"outstanding\"]), currency) %}
\n
\n {% } %}\n {% } %}\n\n

\n {%= __(\"Printed on {0}\", [\n frappe.datetime.str_to_user(frappe.datetime.get_datetime_as_string())\n ]) %}\n

\n\n
", + "html": "\n\n
\n\n
\n\n \n
\n
\n {%= __(report.report_name) %}\n
\n
\n\n \n
\n
\n
\n {%= __(\"Supplier\") %}:\n {%= (filters.party.length && filters.party.join(\", \")) || __(\"All Parties\") %}\n
\n
\n\n
\n
\n {%= __(\"Report Date\") %}:\n {%= frappe.datetime.str_to_user(filters.report_date) %}\n
\n
\n
\n\n \n
\n \n \n \n \n \n\n {% if(filters.show_remarks) { %}\n \n {% } %}\n\n \n \n \n \n \n\n \n {% for(var i=0, l=data.length; i\n \n\n \n\n {% if(filters.show_remarks) { %}\n \n {% } %}\n\n \n \n \n \n {% } %}\n \n
{%= __(\"Date\") %}{%= __(\"Reference\") %}{%= __(\"Remarks\") %}{%= __(\"Age (Days)\") %}{%= __(\"Invoiced Amount\") %}{%= __(\"Outstanding Amount\") %}
{%= frappe.datetime.str_to_user(data[i][\"posting_date\"]) %}\n {% if(i == data.length - 1) { %}\n {%= __(\"Total\") %}\n {% } else { %}\n {%= data[i][\"voucher_no\"] %}\n {% } %}\n \n {% if(data[i][\"remarks\"] && data[i][\"remarks\"] != \"No Remarks\") { %}\n {%= data[i][\"remarks\"] %}\n {% } %}\n {%= data[i][\"age\"] %}{%= format_currency(data[i][\"invoiced\"], data[i][\"currency\"]) %}{%= format_currency(data[i][\"outstanding\"], data[i][\"currency\"]) %}
\n
\n\n  \n\n {% if(filters.show_future_payments) { %}\n {%\n var balance_row = data.slice(-1).pop();\n var start = report.columns.findIndex(e => e.fieldname == 'age');\n var currency = data[data.length - 1][\"currency\"];\n\n var ranges = [\n report.columns[start].label,\n report.columns[start+1].label,\n report.columns[start+2].label,\n report.columns[start+3].label,\n report.columns[start+4].label,\n report.columns[start+5].label\n ];\n %}\n\n {% if(balance_row) { %}\n
\n \n \n \n \n {% for(var i = 0; i < ranges.length; i++) { %}\n \n {% } %}\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
{%= __(ranges[i]) %}{%= __(\"Total\") %}
{%= __(\"Total Outstanding\") %}{%= format_number(balance_row[\"age\"], null, 2) %}{%= format_currency(balance_row[\"range1\"], currency) %}{%= format_currency(balance_row[\"range2\"], currency) %}{%= format_currency(balance_row[\"range3\"], currency) %}{%= format_currency(balance_row[\"range4\"], currency) %}{%= format_currency(balance_row[\"range5\"], currency) %}{%= format_currency(flt(balance_row[\"outstanding\"]), currency) %}
\n
\n {% } %}\n {% } %}\n\n

\n {%= __(\"Printed on {0}\", [\n frappe.datetime.str_to_user(frappe.datetime.get_datetime_as_string())\n ]) %}\n

\n\n
", "idx": 0, "line_breaks": 0, "margin_bottom": 15.0, "margin_left": 15.0, "margin_right": 15.0, "margin_top": 15.0, - "modified": "2026-03-27 16:02:44.654828", + "modified": "2026-05-20 20:07:04.855362", "modified_by": "Administrator", "module": "Accounts", "name": "Accounts Payable Standard", diff --git a/erpnext/accounts/print_format/accounts_payable_summary_standard/accounts_payable_summary_standard.json b/erpnext/accounts/print_format/accounts_payable_summary_standard/accounts_payable_summary_standard.json index 95da0e221aa..e4aaa82dc1a 100644 --- a/erpnext/accounts/print_format/accounts_payable_summary_standard/accounts_payable_summary_standard.json +++ b/erpnext/accounts/print_format/accounts_payable_summary_standard/accounts_payable_summary_standard.json @@ -8,14 +8,14 @@ "docstatus": 0, "doctype": "Print Format", "font_size": 14, - "html": "\n\n
\n\n
\n\n
\n
\n {%= __(report.report_name) %}\n
\n
\n\n
\n
\n
\n {%= __(\"Supplier\") %}:\n {%= (filters.party && filters.party.length && filters.party.join(\", \")) || __(\"All Parties\") %}\n
\n
\n\n
\n
\n {%= __(\"Ageing Based On\") %}:\n {%= __(filters.ageing_based_on) %}\n
\n
\n {%= __(\"As on Date\") %}:\n {%= frappe.datetime.str_to_user(filters.report_date) %}\n
\n
\n
\n\n
\n \n \n \n \n \n \n \n \n \n \n\n \n {% for (var i = 0, l = data.length; i < l; i++) { \n var row = data[i];\n if (!(row.party || row.is_total_row)) continue;\n %}\n \n \n\n \n \n \n \n \n {% } %}\n \n
{%= __(\"Supplier\") %}{%= __(\"Total Invoiced Amount\") %}{%= __(\"Total Paid Amount\") %}{%= __(\"Debit Note Amount\") %}{%= __(\"Total Outstanding Amount\") %}
\n {% if (row.is_total_row) { %}\n {%= __(\"Total\") %}\n {% } else { %}\n {%= row.party %}\n {% } %}\n \n {%= format_currency(row.invoiced, row.currency) %}\n \n {%= format_currency(row.paid, row.currency) %}\n \n {%= format_currency(row.debit_note, row.currency) %}\n \n {%= format_currency(row.outstanding, row.currency) %}\n
\n
\n\n

\n {%= __(\"Printed on {0}\", [\n frappe.datetime.str_to_user(frappe.datetime.get_datetime_as_string())\n ]) %}\n

\n\n
", + "html": "\n\n
\n\n
\n\n
\n
\n {%= __(report.report_name) %}\n
\n
\n\n
\n
\n
\n {%= __(\"Supplier\") %}:\n {%= (filters.party && filters.party.length && filters.party.join(\", \")) || __(\"All Parties\") %}\n
\n
\n\n
\n
\n {%= __(\"Ageing Based On\") %}:\n {%= __(filters.ageing_based_on) %}\n
\n
\n {%= __(\"As on Date\") %}:\n {%= frappe.datetime.str_to_user(filters.report_date) %}\n
\n
\n
\n\n
\n \n \n \n \n \n \n \n \n \n \n\n \n {% for (var i = 0, l = data.length; i < l; i++) { \n var row = data[i];\n if (!(row.party || row.is_total_row)) continue;\n %}\n \n \n\n \n \n \n \n \n {% } %}\n \n
{%= __(\"Supplier\") %}{%= __(\"Total Invoiced Amount\") %}{%= __(\"Total Paid Amount\") %}{%= __(\"Debit Note Amount\") %}{%= __(\"Total Outstanding Amount\") %}
\n {% if (row.is_total_row) { %}\n {%= __(\"Total\") %}\n {% } else { %}\n {%= row.party %}\n {% } %}\n \n {%= format_currency(row.invoiced, row.currency) %}\n \n {%= format_currency(row.paid, row.currency) %}\n \n {%= format_currency(row.debit_note, row.currency) %}\n \n {%= format_currency(row.outstanding, row.currency) %}\n
\n
\n\n

\n {%= __(\"Printed on {0}\", [\n frappe.datetime.str_to_user(frappe.datetime.get_datetime_as_string())\n ]) %}\n

\n\n
", "idx": 0, "line_breaks": 0, "margin_bottom": 15.0, "margin_left": 15.0, "margin_right": 15.0, "margin_top": 15.0, - "modified": "2026-04-01 12:31:46.117872", + "modified": "2026-05-20 20:10:28.243370", "modified_by": "Administrator", "module": "Accounts", "name": "Accounts Payable Summary Standard", diff --git a/erpnext/accounts/print_format/accounts_receivable_standard/accounts_receivable_standard.json b/erpnext/accounts/print_format/accounts_receivable_standard/accounts_receivable_standard.json index fc68bdad7d0..5f46494b54e 100644 --- a/erpnext/accounts/print_format/accounts_receivable_standard/accounts_receivable_standard.json +++ b/erpnext/accounts/print_format/accounts_receivable_standard/accounts_receivable_standard.json @@ -8,14 +8,14 @@ "docstatus": 0, "doctype": "Print Format", "font_size": 14, - "html": "\n\n
\n\n
\n\n \n
\n
\n {%= __(report.report_name) %}\n
\n
\n\n \n
\n
\n
\n {%= __(\"Customer\") %}:\n {%= (filters.party.length && filters.party.join(\", \")) || __(\"All Parties\") %}\n
\n
\n\n
\n
\n {%= __(\"Report Date\") %}:\n {%= frappe.datetime.str_to_user(filters.report_date) %}\n
\n
\n
\n\n \n
\n\t\t\n\t\t\t\n\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\n\n\t\t\t\t\t{% if(filters.show_remarks) { %}\n\t\t\t\t\t\t\n\t\t\t\t\t{% } %}\n\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\n\t\t\t\n\n\t\t\t\n\t\t\t\t{% for(var i=0, l=data.length; i\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t{% if(filters.show_remarks) { %}\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t{% } %}\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t{% } %}\n\t\t\t\n\t\t
{%= __(\"Date\") %}{%= __(\"Reference\") %}{%= __(\"Remarks\") %}{%= __(\"Age (Days)\") %}{%= __(\"Invoiced Amount\") %}{%= __(\"Outstanding Amount\") %}
{%= frappe.datetime.str_to_user(data[i][\"posting_date\"]) %}\n\t\t\t\t\t\t\t{% if(i == data.length - 1) { %}\n\t\t\t\t\t\t\t\t{%= __(\"Total\") %}\n\t\t\t\t\t\t\t{% } else { %}\n\t\t\t\t\t\t\t\t{%= data[i][\"voucher_no\"] %}\n\t\t\t\t\t\t\t{% } %}\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t{% if(data[i][\"remarks\"] && data[i][\"remarks\"] != \"No Remarks\") { %}\n\t\t\t\t\t\t\t\t\t{%= data[i][\"remarks\"] %}\n\t\t\t\t\t\t\t\t{% } %}\n\t\t\t\t\t\t\t{%= data[i][\"age\"] %}{%= format_currency(data[i][\"invoiced\"], data[i][\"currency\"]) %}{%= format_currency(data[i][\"outstanding\"], data[i][\"currency\"]) %}
\n\t
\n\n\t \n\n\t{% if(filters.show_future_payments) { %}\n\t\t{%\n\t\t\tvar balance_row = data.slice(-1).pop();\n\t\t\tvar start = report.columns.findIndex(e => e.fieldname == 'age');\n\t\t\tvar currency = data[data.length - 1][\"currency\"];\n\n\t\t\tvar ranges = [\n\t\t\t\treport.columns[start].label,\n\t\t\t\treport.columns[start+1].label,\n\t\t\t\treport.columns[start+2].label,\n\t\t\t\treport.columns[start+3].label,\n\t\t\t\treport.columns[start+4].label,\n\t\t\t\treport.columns[start+5].label\n\t\t\t];\n\t\t%}\n\n\t\t{% if(balance_row) { %}\n\t\t
\n\t\t\t\n\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t{% for(var i = 0; i < ranges.length; i++) { %}\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t{% } %}\n\t\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\n\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\n\t\t\t
{%= __(ranges[i]) %}{%= __(\"Total\") %}
{%= __(\"Total Outstanding\") %}{%= format_number(balance_row[\"age\"], null, 2) %}{%= format_currency(balance_row[\"range1\"], currency) %}{%= format_currency(balance_row[\"range2\"], currency) %}{%= format_currency(balance_row[\"range3\"], currency) %}{%= format_currency(balance_row[\"range4\"], currency) %}{%= format_currency(balance_row[\"range5\"], currency) %}{%= format_currency(flt(balance_row[\"outstanding\"]), currency) %}
\n\t\t
\n\t\t{% } %}\n\t{% } %}\n\n

\n {%= __(\"Printed on {0}\", [\n frappe.datetime.str_to_user(frappe.datetime.get_datetime_as_string())\n ]) %}\n

\n\n
", + "html": "\n\n
\n\n
\n\n \n
\n
\n {%= __(report.report_name) %}\n
\n
\n\n \n
\n
\n
\n {%= __(\"Customer\") %}:\n {%= (filters.party.length && filters.party.join(\", \")) || __(\"All Parties\") %}\n
\n
\n\n
\n
\n {%= __(\"Report Date\") %}:\n {%= frappe.datetime.str_to_user(filters.report_date) %}\n
\n
\n
\n\n \n
\n\t\t\n\t\t\t\n\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\n\n\t\t\t\t\t{% if(filters.show_remarks) { %}\n\t\t\t\t\t\t\n\t\t\t\t\t{% } %}\n\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\n\t\t\t\n\n\t\t\t\n\t\t\t\t{% for(var i=0, l=data.length; i\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t{% if(filters.show_remarks) { %}\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t{% } %}\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t{% } %}\n\t\t\t\n\t\t
{%= __(\"Date\") %}{%= __(\"Reference\") %}{%= __(\"Remarks\") %}{%= __(\"Age (Days)\") %}{%= __(\"Invoiced Amount\") %}{%= __(\"Outstanding Amount\") %}
{%= frappe.datetime.str_to_user(data[i][\"posting_date\"]) %}\n\t\t\t\t\t\t\t{% if(i == data.length - 1) { %}\n\t\t\t\t\t\t\t\t{%= __(\"Total\") %}\n\t\t\t\t\t\t\t{% } else { %}\n\t\t\t\t\t\t\t\t{%= data[i][\"voucher_no\"] %}\n\t\t\t\t\t\t\t{% } %}\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t{% if(data[i][\"remarks\"] && data[i][\"remarks\"] != \"No Remarks\") { %}\n\t\t\t\t\t\t\t\t\t{%= data[i][\"remarks\"] %}\n\t\t\t\t\t\t\t\t{% } %}\n\t\t\t\t\t\t\t{%= data[i][\"age\"] %}{%= format_currency(data[i][\"invoiced\"], data[i][\"currency\"]) %}{%= format_currency(data[i][\"outstanding\"], data[i][\"currency\"]) %}
\n\t
\n\n\t \n\n\t{% if(filters.show_future_payments) { %}\n\t\t{%\n\t\t\tvar balance_row = data.slice(-1).pop();\n\t\t\tvar start = report.columns.findIndex(e => e.fieldname == 'age');\n\t\t\tvar currency = data[data.length - 1][\"currency\"];\n\n\t\t\tvar ranges = [\n\t\t\t\treport.columns[start].label,\n\t\t\t\treport.columns[start+1].label,\n\t\t\t\treport.columns[start+2].label,\n\t\t\t\treport.columns[start+3].label,\n\t\t\t\treport.columns[start+4].label,\n\t\t\t\treport.columns[start+5].label\n\t\t\t];\n\t\t%}\n\n\t\t{% if(balance_row) { %}\n\t\t
\n\t\t\t\n\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t{% for(var i = 0; i < ranges.length; i++) { %}\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t{% } %}\n\t\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\n\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\n\t\t\t
{%= __(ranges[i]) %}{%= __(\"Total\") %}
{%= __(\"Total Outstanding\") %}{%= format_number(balance_row[\"age\"], null, 2) %}{%= format_currency(balance_row[\"range1\"], currency) %}{%= format_currency(balance_row[\"range2\"], currency) %}{%= format_currency(balance_row[\"range3\"], currency) %}{%= format_currency(balance_row[\"range4\"], currency) %}{%= format_currency(balance_row[\"range5\"], currency) %}{%= format_currency(flt(balance_row[\"outstanding\"]), currency) %}
\n\t\t
\n\t\t{% } %}\n\t{% } %}\n\n

\n {%= __(\"Printed on {0}\", [\n frappe.datetime.str_to_user(frappe.datetime.get_datetime_as_string())\n ]) %}\n

\n\n
", "idx": 0, "line_breaks": 0, "margin_bottom": 15.0, "margin_left": 15.0, "margin_right": 15.0, "margin_top": 15.0, - "modified": "2026-03-27 01:06:20.758336", + "modified": "2026-05-20 20:04:55.230531", "modified_by": "Administrator", "module": "Accounts", "name": "Accounts Receivable Standard", diff --git a/erpnext/accounts/print_format/accounts_receivable_summary_standard/accounts_receivable_summary_standard.json b/erpnext/accounts/print_format/accounts_receivable_summary_standard/accounts_receivable_summary_standard.json index b430495a1f5..e98231b5c66 100644 --- a/erpnext/accounts/print_format/accounts_receivable_summary_standard/accounts_receivable_summary_standard.json +++ b/erpnext/accounts/print_format/accounts_receivable_summary_standard/accounts_receivable_summary_standard.json @@ -8,14 +8,14 @@ "docstatus": 0, "doctype": "Print Format", "font_size": 14, - "html": "\n\n
\n\n
\n\n
\n
\n {%= __(report.report_name) %}\n
\n
\n\n
\n
\n
\n {%= __(\"Customer\") %}:\n {%= (filters.party && filters.party.length && filters.party.join(\", \")) || __(\"All Parties\") %}\n
\n
\n\n
\n
\n {%= __(\"Ageing Based On\") %}:\n {%= __(filters.ageing_based_on) %}\n
\n
\n {%= __(\"As on Date\") %}:\n {%= frappe.datetime.str_to_user(filters.report_date) %}\n
\n
\n
\n\n
\n \n \n \n \n \n \n \n \n \n \n\n \n {% for (var i = 0, l = data.length; i < l; i++) {\n var row = data[i];\n if (!(row.party || row.is_total_row)) continue;\n %}\n \n \n\n \n \n \n \n \n {% } %}\n \n
{%= __(\"Customer\") %}{%= __(\"Total Invoiced Amount\") %}{%= __(\"Total Paid Amount\") %}{%= __(\"Credit Note Amount\") %}{%= __(\"Total Outstanding Amount\") %}
\n {% if (row.is_total_row) { %}\n {%= __(\"Total\") %}\n {% } else { %}\n {%= row.party %}\n {% } %}\n \n {%= format_currency(row.invoiced, row.currency) %}\n \n {%= format_currency(row.paid, row.currency) %}\n \n {%= format_currency(row.credit_note, row.currency) %}\n \n {%= format_currency(row.outstanding, row.currency) %}\n
\n
\n\n

\n {%= __(\"Printed on {0}\", [\n frappe.datetime.str_to_user(frappe.datetime.get_datetime_as_string())\n ]) %}\n

\n\n
", + "html": "\n\n
\n\n
\n\n
\n
\n {%= __(report.report_name) %}\n
\n
\n\n
\n
\n
\n {%= __(\"Customer\") %}:\n {%= (filters.party && filters.party.length && filters.party.join(\", \")) || __(\"All Parties\") %}\n
\n
\n\n
\n
\n {%= __(\"Ageing Based On\") %}:\n {%= __(filters.ageing_based_on) %}\n
\n
\n {%= __(\"As on Date\") %}:\n {%= frappe.datetime.str_to_user(filters.report_date) %}\n
\n
\n
\n\n
\n \n \n \n \n \n \n \n \n \n \n\n \n {% for (var i = 0, l = data.length; i < l; i++) {\n var row = data[i];\n if (!(row.party || row.is_total_row)) continue;\n %}\n \n \n\n \n \n \n \n \n {% } %}\n \n
{%= __(\"Customer\") %}{%= __(\"Total Invoiced Amount\") %}{%= __(\"Total Paid Amount\") %}{%= __(\"Credit Note Amount\") %}{%= __(\"Total Outstanding Amount\") %}
\n {% if (row.is_total_row) { %}\n {%= __(\"Total\") %}\n {% } else { %}\n {%= row.party %}\n {% } %}\n \n {%= format_currency(row.invoiced, row.currency) %}\n \n {%= format_currency(row.paid, row.currency) %}\n \n {%= format_currency(row.credit_note, row.currency) %}\n \n {%= format_currency(row.outstanding, row.currency) %}\n
\n
\n\n

\n {%= __(\"Printed on {0}\", [\n frappe.datetime.str_to_user(frappe.datetime.get_datetime_as_string())\n ]) %}\n

\n\n
", "idx": 0, "line_breaks": 0, "margin_bottom": 15.0, "margin_left": 15.0, "margin_right": 15.0, "margin_top": 15.0, - "modified": "2026-04-01 12:31:21.651910", + "modified": "2026-05-20 20:09:18.125045", "modified_by": "Administrator", "module": "Accounts", "name": "Accounts Receivable Summary Standard", diff --git a/erpnext/accounts/print_format/balance_sheet_standard/balance_sheet_standard.json b/erpnext/accounts/print_format/balance_sheet_standard/balance_sheet_standard.json index 9529a0cb45d..5411369423b 100644 --- a/erpnext/accounts/print_format/balance_sheet_standard/balance_sheet_standard.json +++ b/erpnext/accounts/print_format/balance_sheet_standard/balance_sheet_standard.json @@ -8,14 +8,14 @@ "docstatus": 0, "doctype": "Print Format", "font_size": 14, - "html": "{%\n\tconst report_columns = report\n\t\t.get_columns_for_print()\n\t\t.filter(col => !col.hidden);\n\n\tif (report_columns.length > 8) {\n\t\tfrappe.throw(\n\t\t\t__(\"Too many columns. Export the report and print it using a spreadsheet application.\")\n\t\t);\n\t}\n%}\n\n\n\n
\n\n\t
\n\t\t
\n\t\t\t{%= __(report.report_name) %}\n\t\t
\n\t
\n\n\t{% if (subtitle && subtitle.trim()) { %}\n
\n {{ subtitle }}\n
\n {% } else { %}\n
\n
\n
\n {%= __(\"Company\") %}: {%= filters.company %}\n
\n
\n {%= __(\"Currency\") %}:\n {%= filters.presentation_currency || erpnext.get_currency(filters.company) %}\n
\n
\n\n
\n
\n {%= __(\"Period Based On\") %}:\n {%= filters.filter_based_on %}\n
\n\n {% if (filters.filter_based_on === \"Fiscal Year\") { %}\n
\n {%= __(\"Start Year\") %}: {%= filters.from_fiscal_year %}\n
\n
\n {%= __(\"End Year\") %}: {%= filters.to_fiscal_year %}\n
\n\n {% } else if (filters.filter_based_on === \"Date Range\") { %}\n
\n {%= __(\"Start Date\") %}:\n {%= frappe.datetime.str_to_user(filters.period_start_date) %}\n
\n
\n {%= __(\"End Date\") %}:\n {%= frappe.datetime.str_to_user(filters.period_end_date) %}\n
\n {% } %}\n
\n
\n {% } %}\n\n\t
\n \t\n \t\t\n \t\t\t\n \t\t\t\t{% for (let i = 0, l = report_columns.length; i < l; i++) { %}\n \t\t\t\t\t{%\n \t\t\t\t\t\tconst col = report_columns[i];\n \t\t\t\t\t\tconst align = i === 0 ? \"text-left\" : \"text-right\";\n \t\t\t\t\t%}\n \t\t\t\t\t\n \t\t\t\t{% } %}\n \t\t\t\n \t\t\n \n \t\t\n \t\t\t{% for (let j = 0, k = data.length; j < k; j++) { %}\n \t\t\t\t{%\n \t\t\t\t\tconst row = data[j];\n \n \t\t\t\t\tlet row_class = \"\";\n \t\t\t\t\tif (!(row.parent_account || row.parent_section)) {\n \t\t\t\t\t\trow_class = \"financial-statements-important\";\n \t\t\t\t\t}\n \t\t\t\t\tif (!(row.account_name || row.section)) {\n \t\t\t\t\t\trow_class += \" financial-statements-blank-row\";\n \t\t\t\t\t}\n \t\t\t\t%}\n \n \t\t\t\t\n \t\t\t\t\t{% for (let i = 0, l = report_columns.length; i < l; i++) { %}\n \t\t\t\t\t\t{%\n \t\t\t\t\t\t\tconst col = report_columns[i];\n \t\t\t\t\t\t\tconst value = row[col.fieldname];\n \t\t\t\t\t\t\tconst align = i === 0 ? \"text-left\" : \"text-right\";\n \t\t\t\t\t\t%}\n \n \t\t\t\t\t\t\n \t\t\t\t\t{% } %}\n \t\t\t\t\n \t\t\t{% } %}\n \t\t\n \t
\n \t\t\t\t\t\t{%= col.label %}\n \t\t\t\t\t
\n \t\t\t\t\t\t\t{% if (i === 0) { %}\n \t\t\t\t\t\t\t\t\n\t {%= String(row.account_name || row.section || \"\").replace(/^['\"]|['\"]$/g, \"\") %}\n \t\t\t\t\t\t\t\t\n \t\t\t\t\t\t\t{% } else if (!is_null(value)) { %}\n \t\t\t\t\t\t\t\t{%= frappe.format(value, col, {}, row) %}\n \t\t\t\t\t\t\t{% } %}\n \t\t\t\t\t\t
\n
\n\n\t

\n\t\t{%= __(\"Printed on {0}\", [\n\t\t\tfrappe.datetime.str_to_user(frappe.datetime.get_datetime_as_string())\n\t\t]) %}\n\t

\n\n
", + "html": "{%\n\tconst report_columns = report\n\t\t.get_columns_for_print()\n\t\t.filter(col => !col.hidden);\n\n\tif (report_columns.length > 8) {\n\t\tfrappe.throw(\n\t\t\t__(\"Too many columns. Export the report and print it using a spreadsheet application.\")\n\t\t);\n\t}\n%}\n\n\n\n
\n\n\t
\n\t\t
\n\t\t\t{%= __(report.report_name) %}\n\t\t
\n\t
\n\n\t{% if (subtitle && subtitle.trim()) { %}\n
\n {{ subtitle }}\n
\n {% } else { %}\n
\n
\n
\n {%= __(\"Company\") %}: {%= filters.company %}\n
\n
\n {%= __(\"Currency\") %}:\n {%= filters.presentation_currency || erpnext.get_currency(filters.company) %}\n
\n
\n\n
\n
\n {%= __(\"Period Based On\") %}:\n {%= filters.filter_based_on %}\n
\n\n {% if (filters.filter_based_on === \"Fiscal Year\") { %}\n
\n {%= __(\"Start Year\") %}: {%= filters.from_fiscal_year %}\n
\n
\n {%= __(\"End Year\") %}: {%= filters.to_fiscal_year %}\n
\n\n {% } else if (filters.filter_based_on === \"Date Range\") { %}\n
\n {%= __(\"Start Date\") %}:\n {%= frappe.datetime.str_to_user(filters.period_start_date) %}\n
\n
\n {%= __(\"End Date\") %}:\n {%= frappe.datetime.str_to_user(filters.period_end_date) %}\n
\n {% } %}\n
\n
\n {% } %}\n\n\t
\n \t\n \t\t\n \t\t\t\n \t\t\t\t{% for (let i = 0, l = report_columns.length; i < l; i++) { %}\n \t\t\t\t\t{%\n \t\t\t\t\t\tconst col = report_columns[i];\n \t\t\t\t\t\tconst align = i === 0 ? \"text-left\" : \"text-right\";\n \t\t\t\t\t%}\n \t\t\t\t\t\n \t\t\t\t{% } %}\n \t\t\t\n \t\t\n \n \t\t\n \t\t\t{% for (let j = 0, k = data.length; j < k; j++) { %}\n \t\t\t\t{%\n \t\t\t\t\tconst row = data[j];\n \n \t\t\t\t\tlet row_class = \"\";\n \t\t\t\t\tif (!(row.parent_account || row.parent_section)) {\n \t\t\t\t\t\trow_class = \"financial-statements-important\";\n \t\t\t\t\t}\n \t\t\t\t%}\n \n \t\t\t\t\n \t\t\t\t\t{% for (let i = 0, l = report_columns.length; i < l; i++) { %}\n \t\t\t\t\t\t{%\n \t\t\t\t\t\t\tconst col = report_columns[i];\n \t\t\t\t\t\t\tconst value = row[col.fieldname];\n \t\t\t\t\t\t\tconst align = i === 0 ? \"text-left\" : \"text-right\";\n \t\t\t\t\t\t%}\n \n \t\t\t\t\t\t\n \t\t\t\t\t{% } %}\n \t\t\t\t\n \t\t\t{% } %}\n \t\t\n \t
\n \t\t\t\t\t\t{%= col.label %}\n \t\t\t\t\t
\n \t\t\t\t\t\t\t{% if (i === 0) { %}\n \t\t\t\t\t\t\t\t\n\t {%= String(row.account_name || row.section || \"\").replace(/^['\"]|['\"]$/g, \"\") %}\n \t\t\t\t\t\t\t\t\n \t\t\t\t\t\t\t{% } else if (!is_null(value)) { %}\n \t\t\t\t\t\t\t\t{%= frappe.format(value, col, {}, row) %}\n \t\t\t\t\t\t\t{% } %}\n \t\t\t\t\t\t
\n
\n\n\t

\n\t\t{%= __(\"Printed on {0}\", [\n\t\t\tfrappe.datetime.str_to_user(frappe.datetime.get_datetime_as_string())\n\t\t]) %}\n\t

\n\n
", "idx": 0, "line_breaks": 0, "margin_bottom": 15.0, "margin_left": 15.0, "margin_right": 15.0, "margin_top": 15.0, - "modified": "2026-05-06 17:40:39.605807", + "modified": "2026-05-21 19:07:07.724345", "modified_by": "Administrator", "module": "Accounts", "name": "Balance Sheet Standard", diff --git a/erpnext/accounts/print_format/cash_flow_statement_standard/cash_flow_statement_standard.json b/erpnext/accounts/print_format/cash_flow_statement_standard/cash_flow_statement_standard.json index fd95794a0f9..aa1e515e0ce 100644 --- a/erpnext/accounts/print_format/cash_flow_statement_standard/cash_flow_statement_standard.json +++ b/erpnext/accounts/print_format/cash_flow_statement_standard/cash_flow_statement_standard.json @@ -8,14 +8,14 @@ "docstatus": 0, "doctype": "Print Format", "font_size": 14, - "html": "{%\n\tconst report_columns = report\n\t\t.get_columns_for_print()\n\t\t.filter(col => !col.hidden);\n\n\tif (report_columns.length > 8) {\n\t\tfrappe.throw(\n\t\t\t__(\"Too many columns. Export the report and print it using a spreadsheet application.\")\n\t\t);\n\t}\n%}\n\n\n\n
\n\n\t
\n\t\t
\n\t\t\t{%= __(report.report_name) %}\n\t\t
\n\t
\n\n {% if (subtitle && subtitle.trim()) { %}\n
\n {{ subtitle }}\n
\n {% } else { %}\n
\n
\n
\n {%= __(\"Company\") %}: {%= filters.company %}\n
\n
\n {%= __(\"Currency\") %}:\n {%= filters.presentation_currency || erpnext.get_currency(filters.company) %}\n
\n
\n\n
\n
\n {%= __(\"Period Based On\") %}:\n {%= filters.filter_based_on %}\n
\n\n {% if (filters.filter_based_on === \"Fiscal Year\") { %}\n
\n {%= __(\"Start Year\") %}: {%= filters.from_fiscal_year %}\n
\n
\n {%= __(\"End Year\") %}: {%= filters.to_fiscal_year %}\n
\n\n {% } else if (filters.filter_based_on === \"Date Range\") { %}\n
\n {%= __(\"Start Date\") %}:\n {%= frappe.datetime.str_to_user(filters.period_start_date) %}\n
\n
\n {%= __(\"End Date\") %}:\n {%= frappe.datetime.str_to_user(filters.period_end_date) %}\n
\n {% } %}\n
\n
\n {% } %}\n\n\t
\n \t\n \t\t\n \t\t\t\n \t\t\t\t{% for (let i = 0, l = report_columns.length; i < l; i++) { %}\n \t\t\t\t\t{%\n \t\t\t\t\t\tconst col = report_columns[i];\n \t\t\t\t\t\tconst align = i === 0 ? \"text-left\" : \"text-right\";\n \t\t\t\t\t%}\n \t\t\t\t\t\n \t\t\t\t{% } %}\n \t\t\t\n \t\t\n \n \t\t\n \t\t\t{% for (let j = 0, k = data.length; j < k; j++) { %}\n \t\t\t\t{%\n \t\t\t\t\tconst row = data[j];\n \n \t\t\t\t\tlet row_class = \"\";\n \t\t\t\t\tif (!(row.parent_account || row.parent_section)) {\n \t\t\t\t\t\trow_class = \"financial-statements-important\";\n \t\t\t\t\t}\n \t\t\t\t\tif (!(row.account_name || row.section)) {\n \t\t\t\t\t\trow_class += \" financial-statements-blank-row\";\n \t\t\t\t\t}\n \t\t\t\t%}\n \n \t\t\t\t\n \t\t\t\t\t{% for (let i = 0, l = report_columns.length; i < l; i++) { %}\n \t\t\t\t\t\t{%\n \t\t\t\t\t\t\tconst col = report_columns[i];\n \t\t\t\t\t\t\tconst value = row[col.fieldname];\n \t\t\t\t\t\t\tconst align = i === 0 ? \"text-left\" : \"text-right\";\n \t\t\t\t\t\t%}\n \n \t\t\t\t\t\t\n \t\t\t\t\t{% } %}\n \t\t\t\t\n \t\t\t{% } %}\n \t\t\n \t
\n \t\t\t\t\t\t{%= col.label %}\n \t\t\t\t\t
\n \t\t\t\t\t\t\t{% if (i === 0) { %}\n \t\t\t\t\t\t\t\t\n \t\t\t\t\t\t\t\t\t{%= String(row.account_name || row.section || \"\").replace(/^['\"]|['\"]$/g, \"\") %}\n \t\t\t\t\t\t\t\t\n \t\t\t\t\t\t\t{% } else if (!is_null(value)) { %}\n \t\t\t\t\t\t\t\t{%= frappe.format(value, col, {}, row) %}\n \t\t\t\t\t\t\t{% } %}\n \t\t\t\t\t\t
\n
\n\n\t

\n\t\t{%= __(\"Printed on {0}\", [\n\t\t\tfrappe.datetime.str_to_user(frappe.datetime.get_datetime_as_string())\n\t\t]) %}\n\t

\n\n
", + "html": "{%\n\tconst report_columns = report\n\t\t.get_columns_for_print()\n\t\t.filter(col => !col.hidden);\n\n\tif (report_columns.length > 8) {\n\t\tfrappe.throw(\n\t\t\t__(\"Too many columns. Export the report and print it using a spreadsheet application.\")\n\t\t);\n\t}\n%}\n\n\n\n
\n\n\t
\n\t\t
\n\t\t\t{%= __(report.report_name) %}\n\t\t
\n\t
\n\n\t{% if (subtitle && subtitle.trim()) { %}\n
\n {{ subtitle }}\n
\n {% } else { %}\n
\n
\n
\n {%= __(\"Company\") %}: {%= filters.company %}\n
\n
\n {%= __(\"Currency\") %}:\n {%= filters.presentation_currency || erpnext.get_currency(filters.company) %}\n
\n
\n\n
\n
\n {%= __(\"Period Based On\") %}:\n {%= filters.filter_based_on %}\n
\n\n {% if (filters.filter_based_on === \"Fiscal Year\") { %}\n
\n {%= __(\"Start Year\") %}: {%= filters.from_fiscal_year %}\n
\n
\n {%= __(\"End Year\") %}: {%= filters.to_fiscal_year %}\n
\n\n {% } else if (filters.filter_based_on === \"Date Range\") { %}\n
\n {%= __(\"Start Date\") %}:\n {%= frappe.datetime.str_to_user(filters.period_start_date) %}\n
\n
\n {%= __(\"End Date\") %}:\n {%= frappe.datetime.str_to_user(filters.period_end_date) %}\n
\n {% } %}\n
\n
\n {% } %}\n\n\t
\n \t\n \t\t\n \t\t\t\n \t\t\t\t{% for (let i = 0, l = report_columns.length; i < l; i++) { %}\n \t\t\t\t\t{%\n \t\t\t\t\t\tconst col = report_columns[i];\n \t\t\t\t\t\tconst align = i === 0 ? \"text-left\" : \"text-right\";\n \t\t\t\t\t%}\n \t\t\t\t\t\n \t\t\t\t{% } %}\n \t\t\t\n \t\t\n \n \t\t\n \t\t\t{% for (let j = 0, k = data.length; j < k; j++) { %}\n \t\t\t\t{%\n \t\t\t\t\tconst row = data[j];\n \n \t\t\t\t\tlet row_class = \"\";\n \t\t\t\t\tif (!(row.parent_account || row.parent_section)) {\n \t\t\t\t\t\trow_class = \"financial-statements-important\";\n \t\t\t\t\t}\n \t\t\t\t%}\n \n \t\t\t\t\n \t\t\t\t\t{% for (let i = 0, l = report_columns.length; i < l; i++) { %}\n \t\t\t\t\t\t{%\n \t\t\t\t\t\t\tconst col = report_columns[i];\n \t\t\t\t\t\t\tconst value = row[col.fieldname];\n \t\t\t\t\t\t\tconst align = i === 0 ? \"text-left\" : \"text-right\";\n \t\t\t\t\t\t%}\n \n \t\t\t\t\t\t\n \t\t\t\t\t{% } %}\n \t\t\t\t\n \t\t\t{% } %}\n \t\t\n \t
\n \t\t\t\t\t\t{%= col.label %}\n \t\t\t\t\t
\n \t\t\t\t\t\t\t{% if (i === 0) { %}\n \t\t\t\t\t\t\t\t\n\t {%= String(row.account_name || row.section || \"\").replace(/^['\"]|['\"]$/g, \"\") %}\n \t\t\t\t\t\t\t\t\n \t\t\t\t\t\t\t{% } else if (!is_null(value)) { %}\n \t\t\t\t\t\t\t\t{%= frappe.format(value, col, {}, row) %}\n \t\t\t\t\t\t\t{% } %}\n \t\t\t\t\t\t
\n
\n\n\t

\n\t\t{%= __(\"Printed on {0}\", [\n\t\t\tfrappe.datetime.str_to_user(frappe.datetime.get_datetime_as_string())\n\t\t]) %}\n\t

\n\n
", "idx": 0, "line_breaks": 0, "margin_bottom": 15.0, "margin_left": 15.0, "margin_right": 15.0, "margin_top": 15.0, - "modified": "2026-05-06 17:42:07.113775", + "modified": "2026-05-21 19:07:50.142914", "modified_by": "Administrator", "module": "Accounts", "name": "Cash Flow Statement Standard", diff --git a/erpnext/accounts/print_format/general_ledger_standard/general_ledger_standard.json b/erpnext/accounts/print_format/general_ledger_standard/general_ledger_standard.json index 05efcc4aab6..7888828a0e0 100644 --- a/erpnext/accounts/print_format/general_ledger_standard/general_ledger_standard.json +++ b/erpnext/accounts/print_format/general_ledger_standard/general_ledger_standard.json @@ -8,14 +8,14 @@ "docstatus": 0, "doctype": "Print Format", "font_size": 14, - "html": "\n\n
\n\n
\n\n
\n
\n {%= __(\"Statement Of Accounts\") %}\n
\n
\n\n {% if (subtitle && subtitle.trim()) { %}\n
\n {{ subtitle }}\n
\n {% } else { %}\n
\n\t\t\t
\n\t\t\t\t
\n\t\t\t\t\t{%= __(\"Customer\") %}:\n\t\t\t\t\t{%=\n\t\t\t\t\t\t(filters.party.length && filters.party.join(\", \")) || filters.party_name || \"All Parties\"\n\t\t\t\t\t%}\n\t\t\t\t
\n\t\t\t
\n\n\t\t\t
\n\t\t\t\t
\n\t\t\t\t\t{%= __(\"Statement Period\") %}:\n\t\t\t\t\t{%= __(\"{0} to {1}\", [\n\t\t\t\t\t\tfrappe.datetime.str_to_user(filters.from_date),\n\t\t\t\t\t\tfrappe.datetime.str_to_user(filters.to_date)\n\t\t\t\t\t]) %}\n\t\t\t\t
\n\t\t\t
\n\t\t
\n {% } %}\n\n
\n \n \n \n \n \n\n {% if(filters.show_remarks) { %}\n \n {% } %}\n\n \n \n \n \n \n\n \n\t\t\t\t{% for(var i=0, l=data.length; i\n\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\n\t\t\t\t\t\t\n\t\t\t\t\t\t{% if(filters.show_remarks) { %}\n\t\t\t\t\t\t\n\t\t\t\t\t\t{% } %}\n\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\n\t\t\t\t\t\n\t\t\t\t{% } %}\n\t\t\t\n
{%= __(\"Date\") %}{%= __(\"Voucher Details\") %}{%= __(\"Remarks\") %}{%= __(\"Debit\") %}{%= __(\"Credit\") %}{%= __(\"Balance\") %}
\n\t\t\t\t\t\t\t{% if(is_entry) { %}\n\t\t\t\t\t\t\t\t{%= frappe.datetime.str_to_user(row.posting_date) %}\n\t\t\t\t\t\t\t{% } else if(i == 0) { %}\n\t\t\t\t\t\t\t\t{%= frappe.datetime.str_to_user(filters.from_date) %}\n\t\t\t\t\t\t\t{% } %}\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t{% if(is_entry) { %}\n\n\t\t\t\t\t\t\t\t{%= row.voucher_type %} {%= row.voucher_no %}\n\n\t\t\t\t\t\t\t\t{% if(!(filters.party || filters.account)) { %}\n\t\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t\t{%= row.party || row.account %}\n\t\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t{% } %}\n\n\t\t\t\t\t\t\t\t{% if(row.bill_no) { %}\n\t\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t\t{%= __(\"Supplier Invoice No\") %}: {%= row.bill_no %}\n\t\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t{% } %}\n\n\t\t\t\t\t\t\t{% } else { %}\n\n\t\t\t\t\t\t\t\t{% if(is_second_last) { %}\n\t\t\t\t\t\t\t\t\t{%= __(\"Total\") %}\n\t\t\t\t\t\t\t\t{% } else if(is_last) { %}\n\t\t\t\t\t\t\t\t\t{%= __(\"Closing [Opening + Total] \") %}\n\t\t\t\t\t\t\t\t{% } else { %}\n\t\t\t\t\t\t\t\t\t{%= frappe.format(row.account, {fieldtype: \"Link\"}) || \" \" %}\n\t\t\t\t\t\t\t\t{% } %}\n\n\t\t\t\t\t\t\t{% } %}\n\t\t\t\t\t\t
\n\t\t\t\t\t\t\t{% if(is_entry && row.remarks && row.remarks != \"No Remarks\") { %}\n\t\t\t\t\t\t\t\t{%= row.remarks %}\n\t\t\t\t\t\t\t{% } %}\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t{% if(is_entry) { %}\n\t\t\t\t\t\t\t\t{% if(row.debit != 0) { %}\n\t\t\t\t\t\t\t\t\t{%= format_currency(row.debit, filters.presentation_currency) %}\n\t\t\t\t\t\t\t\t{% } %}\n\t\t\t\t\t\t\t{% } else if(i != 0 && !is_last) { %}\n\t\t\t\t\t\t\t\t{%= row.account && format_currency(row.debit, filters.presentation_currency) %}\n\t\t\t\t\t\t\t{% } %}\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t{% if(is_entry) { %}\n\t\t\t\t\t\t\t\t{% if(row.credit != 0) { %}\n\t\t\t\t\t\t\t\t\t{%= format_currency(row.credit, filters.presentation_currency) %}\n\t\t\t\t\t\t\t\t{% } %}\n\t\t\t\t\t\t\t{% } else if(i != 0 && !is_last) { %}\n\t\t\t\t\t\t\t\t{%= row.account && format_currency(row.credit, filters.presentation_currency) %}\n\t\t\t\t\t\t\t{% } %}\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t{% if(is_last) { %}\n\t\t\t\t\t\t\t\t{%= format_currency(row.balance, filters.presentation_currency) %}\n\t\t\t\t\t\t\t\t{% if(row.balance < 0) { %} Cr{% } %}\n\t\t\t\t\t\t\t\t{% if(row.balance > 0) { %} Dr{% } %}\n\t\t\t\t\t\t\t{% } else { %}\n\t\t\t\t\t\t\t\t{%= format_currency(row.balance, filters.presentation_currency) %}\n\t\t\t\t\t\t\t{% } %}\n\t\t\t\t\t\t
\n
\n\n

\n {%= __(\"Printed on {0}\", [\n frappe.datetime.str_to_user(frappe.datetime.get_datetime_as_string())\n ]) %}\n

\n\n
", + "html": "\n\n
\n\n
\n\n
\n
\n {%= __(\"Statement Of Accounts\") %}\n
\n
\n\n {% if (subtitle && subtitle.trim()) { %}\n
\n {{ subtitle }}\n
\n {% } else { %}\n
\n\t\t\t
\n\t\t\t\t
\n\t\t\t\t\t{%= __(\"Customer\") %}:\n\t\t\t\t\t{%=\n\t\t\t\t\t\t(filters.party.length && filters.party.join(\", \")) || filters.party_name || \"All Parties\"\n\t\t\t\t\t%}\n\t\t\t\t
\n\t\t\t
\n\n\t\t\t
\n\t\t\t\t
\n\t\t\t\t\t{%= __(\"Statement Period\") %}:\n\t\t\t\t\t{%= __(\"{0} to {1}\", [\n\t\t\t\t\t\tfrappe.datetime.str_to_user(filters.from_date),\n\t\t\t\t\t\tfrappe.datetime.str_to_user(filters.to_date)\n\t\t\t\t\t]) %}\n\t\t\t\t
\n\t\t\t
\n\t\t
\n {% } %}\n\n
\n \n \n \n \n \n\n {% if(filters.show_remarks) { %}\n \n {% } %}\n\n \n \n \n \n \n\n \n\t\t\t\t{% for(var i=0, l=data.length; i\n\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\n\t\t\t\t\t\t\n\t\t\t\t\t\t{% if(filters.show_remarks) { %}\n\t\t\t\t\t\t\n\t\t\t\t\t\t{% } %}\n\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\n\t\t\t\t\t\n\t\t\t\t{% } %}\n\t\t\t\n
{%= __(\"Date\") %}{%= __(\"Voucher Details\") %}{%= __(\"Remarks\") %}{%= __(\"Debit\") %}{%= __(\"Credit\") %}{%= __(\"Balance\") %}
\n\t\t\t\t\t\t\t{% if(is_entry) { %}\n\t\t\t\t\t\t\t\t{%= frappe.datetime.str_to_user(row.posting_date) %}\n\t\t\t\t\t\t\t{% } else if(i == 0) { %}\n\t\t\t\t\t\t\t\t{%= frappe.datetime.str_to_user(filters.from_date) %}\n\t\t\t\t\t\t\t{% } %}\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t{% if(is_entry) { %}\n\n\t\t\t\t\t\t\t\t{%= row.voucher_type %} {%= row.voucher_no %}\n\n\t\t\t\t\t\t\t\t{% if(!(filters.party || filters.account)) { %}\n\t\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t\t{%= row.party || row.account %}\n\t\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t{% } %}\n\n\t\t\t\t\t\t\t\t{% if(row.bill_no) { %}\n\t\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t\t{%= __(\"Supplier Invoice No\") %}: {%= row.bill_no %}\n\t\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t{% } %}\n\n\t\t\t\t\t\t\t{% } else { %}\n\n\t\t\t\t\t\t\t\t{% if(is_second_last) { %}\n\t\t\t\t\t\t\t\t\t{%= __(\"Total\") %}\n\t\t\t\t\t\t\t\t{% } else if(is_last) { %}\n\t\t\t\t\t\t\t\t\t{%= __(\"Closing [Opening + Total] \") %}\n\t\t\t\t\t\t\t\t{% } else { %}\n\t\t\t\t\t\t\t\t\t{%= frappe.format(row.account, {fieldtype: \"Link\"}) || \" \" %}\n\t\t\t\t\t\t\t\t{% } %}\n\n\t\t\t\t\t\t\t{% } %}\n\t\t\t\t\t\t
\n\t\t\t\t\t\t\t{% if(is_entry && row.remarks && row.remarks != \"No Remarks\") { %}\n\t\t\t\t\t\t\t\t{%= row.remarks %}\n\t\t\t\t\t\t\t{% } %}\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t{% if(is_entry) { %}\n\t\t\t\t\t\t\t\t{% if(row.debit != 0) { %}\n\t\t\t\t\t\t\t\t\t{%= format_currency(row.debit, filters.presentation_currency) %}\n\t\t\t\t\t\t\t\t{% } %}\n\t\t\t\t\t\t\t{% } else if(i != 0 && !is_last) { %}\n\t\t\t\t\t\t\t\t{%= row.account && format_currency(row.debit, filters.presentation_currency) %}\n\t\t\t\t\t\t\t{% } %}\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t{% if(is_entry) { %}\n\t\t\t\t\t\t\t\t{% if(row.credit != 0) { %}\n\t\t\t\t\t\t\t\t\t{%= format_currency(row.credit, filters.presentation_currency) %}\n\t\t\t\t\t\t\t\t{% } %}\n\t\t\t\t\t\t\t{% } else if(i != 0 && !is_last) { %}\n\t\t\t\t\t\t\t\t{%= row.account && format_currency(row.credit, filters.presentation_currency) %}\n\t\t\t\t\t\t\t{% } %}\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t{% if(is_last) { %}\n\t\t\t\t\t\t\t\t{%= format_currency(row.balance, filters.presentation_currency) %}\n\t\t\t\t\t\t\t\t{% if(row.balance < 0) { %} Cr{% } %}\n\t\t\t\t\t\t\t\t{% if(row.balance > 0) { %} Dr{% } %}\n\t\t\t\t\t\t\t{% } else { %}\n\t\t\t\t\t\t\t\t{%= format_currency(row.balance, filters.presentation_currency) %}\n\t\t\t\t\t\t\t{% } %}\n\t\t\t\t\t\t
\n
\n\n

\n {%= __(\"Printed on {0}\", [\n frappe.datetime.str_to_user(frappe.datetime.get_datetime_as_string())\n ]) %}\n

\n\n
", "idx": 0, "line_breaks": 0, "margin_bottom": 15.0, "margin_left": 15.0, "margin_right": 15.0, "margin_top": 15.0, - "modified": "2026-03-26 17:07:36.264246", + "modified": "2026-05-20 20:05:27.699070", "modified_by": "Administrator", "module": "Accounts", "name": "General Ledger Standard", diff --git a/erpnext/accounts/print_format/p&l_statement_standard/p&l_statement_standard.json b/erpnext/accounts/print_format/p&l_statement_standard/p&l_statement_standard.json index b1a379b0b47..2884d11afb0 100644 --- a/erpnext/accounts/print_format/p&l_statement_standard/p&l_statement_standard.json +++ b/erpnext/accounts/print_format/p&l_statement_standard/p&l_statement_standard.json @@ -8,14 +8,14 @@ "docstatus": 0, "doctype": "Print Format", "font_size": 14, - "html": "{%\n\tconst report_columns = report\n\t\t.get_columns_for_print()\n\t\t.filter(col => !col.hidden);\n\n\tif (report_columns.length > 8) {\n\t\tfrappe.throw(\n\t\t\t__(\"Too many columns. Export the report and print it using a spreadsheet application.\")\n\t\t);\n\t}\n%}\n\n\n\n
\n\n\t
\n\t\t
\n\t\t\t{%= __(report.report_name) %}\n\t\t
\n\t
\n\n {% if (subtitle && subtitle.trim()) { %}\n
\n {{ subtitle }}\n
\n {% } else { %}\n
\n
\n
\n {%= __(\"Company\") %}: {%= filters.company %}\n
\n
\n {%= __(\"Currency\") %}:\n {%= filters.presentation_currency || erpnext.get_currency(filters.company) %}\n
\n
\n\n
\n
\n {%= __(\"Period Based On\") %}:\n {%= filters.filter_based_on %}\n
\n\n {% if (filters.filter_based_on === \"Fiscal Year\") { %}\n
\n {%= __(\"Start Year\") %}: {%= filters.from_fiscal_year %}\n
\n
\n {%= __(\"End Year\") %}: {%= filters.to_fiscal_year %}\n
\n\n {% } else if (filters.filter_based_on === \"Date Range\") { %}\n
\n {%= __(\"Start Date\") %}:\n {%= frappe.datetime.str_to_user(filters.period_start_date) %}\n
\n
\n {%= __(\"End Date\") %}:\n {%= frappe.datetime.str_to_user(filters.period_end_date) %}\n
\n {% } %}\n
\n
\n {% } %}\n\n\t
\n \t\n \t\t\n \t\t\t\n \t\t\t\t{% for (let i = 0, l = report_columns.length; i < l; i++) { %}\n \t\t\t\t\t{%\n \t\t\t\t\t\tconst col = report_columns[i];\n \t\t\t\t\t\tconst align = i === 0 ? \"text-left\" : \"text-right\";\n \t\t\t\t\t%}\n \t\t\t\t\t\n \t\t\t\t{% } %}\n \t\t\t\n \t\t\n \n \t\t\n \t\t\t{% for (let j = 0, k = data.length; j < k; j++) { %}\n \t\t\t\t{%\n \t\t\t\t\tconst row = data[j];\n \n \t\t\t\t\tlet row_class = \"\";\n \t\t\t\t\tif (!(row.parent_account || row.parent_section)) {\n \t\t\t\t\t\trow_class = \"financial-statements-important\";\n \t\t\t\t\t}\n \t\t\t\t\tif (!(row.account_name || row.section)) {\n \t\t\t\t\t\trow_class += \" financial-statements-blank-row\";\n \t\t\t\t\t}\n \t\t\t\t%}\n \n \t\t\t\t\n \t\t\t\t\t{% for (let i = 0, l = report_columns.length; i < l; i++) { %}\n \t\t\t\t\t\t{%\n \t\t\t\t\t\t\tconst col = report_columns[i];\n \t\t\t\t\t\t\tconst value = row[col.fieldname];\n \t\t\t\t\t\t\tconst align = i === 0 ? \"text-left\" : \"text-right\";\n \t\t\t\t\t\t%}\n \n \t\t\t\t\t\t\n \t\t\t\t\t{% } %}\n \t\t\t\t\n \t\t\t{% } %}\n \t\t\n \t
\n \t\t\t\t\t\t{%= col.label %}\n \t\t\t\t\t
\n \t\t\t\t\t\t\t{% if (i === 0) { %}\n \t\t\t\t\t\t\t\t\n \t\t\t\t\t\t\t\t\t{%= String(row.account_name || row.section || \"\").replace(/^['\"]|['\"]$/g, \"\") %}\n \t\t\t\t\t\t\t\t\n \t\t\t\t\t\t\t{% } else if (!is_null(value)) { %}\n \t\t\t\t\t\t\t\t{%= frappe.format(value, col, {}, row) %}\n \t\t\t\t\t\t\t{% } %}\n \t\t\t\t\t\t
\n
\n\n\t

\n\t\t{%= __(\"Printed on {0}\", [\n\t\t\tfrappe.datetime.str_to_user(frappe.datetime.get_datetime_as_string())\n\t\t]) %}\n\t

\n\n
", + "html": "{%\n\tconst report_columns = report\n\t\t.get_columns_for_print()\n\t\t.filter(col => !col.hidden);\n\n\tif (report_columns.length > 8) {\n\t\tfrappe.throw(\n\t\t\t__(\"Too many columns. Export the report and print it using a spreadsheet application.\")\n\t\t);\n\t}\n%}\n\n\n\n
\n\n\t
\n\t\t
\n\t\t\t{%= __(report.report_name) %}\n\t\t
\n\t
\n\n\t{% if (subtitle && subtitle.trim()) { %}\n
\n {{ subtitle }}\n
\n {% } else { %}\n
\n
\n
\n {%= __(\"Company\") %}: {%= filters.company %}\n
\n
\n {%= __(\"Currency\") %}:\n {%= filters.presentation_currency || erpnext.get_currency(filters.company) %}\n
\n
\n\n
\n
\n {%= __(\"Period Based On\") %}:\n {%= filters.filter_based_on %}\n
\n\n {% if (filters.filter_based_on === \"Fiscal Year\") { %}\n
\n {%= __(\"Start Year\") %}: {%= filters.from_fiscal_year %}\n
\n
\n {%= __(\"End Year\") %}: {%= filters.to_fiscal_year %}\n
\n\n {% } else if (filters.filter_based_on === \"Date Range\") { %}\n
\n {%= __(\"Start Date\") %}:\n {%= frappe.datetime.str_to_user(filters.period_start_date) %}\n
\n
\n {%= __(\"End Date\") %}:\n {%= frappe.datetime.str_to_user(filters.period_end_date) %}\n
\n {% } %}\n
\n
\n {% } %}\n\n\t
\n \t\n \t\t\n \t\t\t\n \t\t\t\t{% for (let i = 0, l = report_columns.length; i < l; i++) { %}\n \t\t\t\t\t{%\n \t\t\t\t\t\tconst col = report_columns[i];\n \t\t\t\t\t\tconst align = i === 0 ? \"text-left\" : \"text-right\";\n \t\t\t\t\t%}\n \t\t\t\t\t\n \t\t\t\t{% } %}\n \t\t\t\n \t\t\n \n \t\t\n \t\t\t{% for (let j = 0, k = data.length; j < k; j++) { %}\n \t\t\t\t{%\n \t\t\t\t\tconst row = data[j];\n \n \t\t\t\t\tlet row_class = \"\";\n \t\t\t\t\tif (!(row.parent_account || row.parent_section)) {\n \t\t\t\t\t\trow_class = \"financial-statements-important\";\n \t\t\t\t\t}\n \t\t\t\t%}\n \n \t\t\t\t\n \t\t\t\t\t{% for (let i = 0, l = report_columns.length; i < l; i++) { %}\n \t\t\t\t\t\t{%\n \t\t\t\t\t\t\tconst col = report_columns[i];\n \t\t\t\t\t\t\tconst value = row[col.fieldname];\n \t\t\t\t\t\t\tconst align = i === 0 ? \"text-left\" : \"text-right\";\n \t\t\t\t\t\t%}\n \n \t\t\t\t\t\t\n \t\t\t\t\t{% } %}\n \t\t\t\t\n \t\t\t{% } %}\n \t\t\n \t
\n \t\t\t\t\t\t{%= col.label %}\n \t\t\t\t\t
\n \t\t\t\t\t\t\t{% if (i === 0) { %}\n \t\t\t\t\t\t\t\t\n\t {%= String(row.account_name || row.section || \"\").replace(/^['\"]|['\"]$/g, \"\") %}\n \t\t\t\t\t\t\t\t\n \t\t\t\t\t\t\t{% } else if (!is_null(value)) { %}\n \t\t\t\t\t\t\t\t{%= frappe.format(value, col, {}, row) %}\n \t\t\t\t\t\t\t{% } %}\n \t\t\t\t\t\t
\n
\n\n\t

\n\t\t{%= __(\"Printed on {0}\", [\n\t\t\tfrappe.datetime.str_to_user(frappe.datetime.get_datetime_as_string())\n\t\t]) %}\n\t

\n\n
", "idx": 0, "line_breaks": 0, "margin_bottom": 15.0, "margin_left": 15.0, "margin_right": 15.0, "margin_top": 15.0, - "modified": "2026-05-06 17:42:47.344321", + "modified": "2026-05-21 19:07:45.502887", "modified_by": "Administrator", "module": "Accounts", "name": "P&L Statement Standard", diff --git a/erpnext/accounts/print_format/trial_balance_standard/trial_balance_standard.json b/erpnext/accounts/print_format/trial_balance_standard/trial_balance_standard.json index 019f59be876..c1dd73fd105 100644 --- a/erpnext/accounts/print_format/trial_balance_standard/trial_balance_standard.json +++ b/erpnext/accounts/print_format/trial_balance_standard/trial_balance_standard.json @@ -8,14 +8,14 @@ "docstatus": 0, "doctype": "Print Format", "font_size": 14, - "html": "{%\n\tconst report_columns = report\n\t\t.get_columns_for_print()\n\t\t.filter(col => !col.hidden);\n\n\tif (report_columns.length > 8) {\n\t\tfrappe.throw(\n\t\t\t__(\"Too many columns. Export the report and print it using a spreadsheet application.\")\n\t\t);\n\t}\n%}\n\n\n\n
\n\n\t
\n\t\t
\n\t\t\t{%= __(report.report_name) %}\n\t\t
\n\t
\n\n {% if (subtitle && subtitle.trim()) { %}\n
\n {{ subtitle }}\n
\n {% } else { %}\n
\n
\n
\n {%= __(\"Company\") %}: {%= filters.company %}\n
\n
\n {%= __(\"Currency\") %}:\n {%= filters.presentation_currency || erpnext.get_currency(filters.company) %}\n
\n
\n\n
\n
\n {%= __(\"From Date\") %}:\n {%= frappe.datetime.str_to_user(filters.from_date) %}\n
\n
\n {%= __(\"To Date\") %}:\n {%= frappe.datetime.str_to_user(filters.to_date) %}\n
\n
\n
\n {% } %}\n\n\t
\n \t\n \t\t\n \t\t\t\n \t\t\t\t{% for (let i = 0, l = report_columns.length; i < l; i++) { %}\n \t\t\t\t\t{%\n \t\t\t\t\t\tconst col = report_columns[i];\n \t\t\t\t\t\tconst align = i === 0 ? \"text-left\" : \"text-right\";\n \t\t\t\t\t\tconst styling = i === 0 ? \"\" : \"width: 9em\";\n \t\t\t\t\t%}\n \t\t\t\t\t\n \t\t\t\t{% } %}\n \t\t\t\n \t\t\n\n \t\t\n \t\t\t{% for (let j = 0, k = data.length; j < k; j++) { %}\n \t\t\t\t{%\n \t\t\t\t\tconst row = data[j];\n\n \t\t\t\t\tlet row_class = \"\";\n \t\t\t\t\tif (!(row.parent_account || row.parent_section)) {\n \t\t\t\t\t\trow_class = \"financial-statements-important\";\n \t\t\t\t\t}\n \t\t\t\t\tif (!(row.account_name || row.section)) {\n \t\t\t\t\t\trow_class += \" financial-statements-blank-row\";\n \t\t\t\t\t}\n \t\t\t\t%}\n\n \t\t\t\t\n \t\t\t\t\t{% for (let i = 0, l = report_columns.length; i < l; i++) { %}\n \t\t\t\t\t\t{%\n \t\t\t\t\t\t\tconst col = report_columns[i];\n \t\t\t\t\t\t\tconst value = row[col.fieldname];\n \t\t\t\t\t\t\tconst align = i === 0 ? \"text-left\" : \"text-right\";\n \t\t\t\t\t\t%}\n\n \t\t\t\t\t\t\n \t\t\t\t\t{% } %}\n \t\t\t\t\n \t\t\t{% } %}\n \t\t\n \t
\n \t\t\t\t\t\t{%= col.label %}\n \t\t\t\t\t
\n \t\t\t\t\t\t\t{% if (i === 0) { %}\n \t\t\t\t\t\t\t\t\n \t\t\t\t\t\t\t\t\t{%= String(row.account_name || row.section || \"\").replace(/^['\"]|['\"]$/g, \"\") %}\n \t\t\t\t\t\t\t\t\n \t\t\t\t\t\t\t{% } else if (!is_null(value)) { %}\n \t\t\t\t\t\t\t\t{%= frappe.format(value, col, {}, row) %}\n \t\t\t\t\t\t\t{% } %}\n \t\t\t\t\t\t
\n
\n\n\t

\n\t\t{%= __(\"Printed on {0}\", [\n\t\t\tfrappe.datetime.str_to_user(frappe.datetime.get_datetime_as_string())\n\t\t]) %}\n\t

\n\n
", + "html": "{%\n\tconst report_columns = report\n\t\t.get_columns_for_print()\n\t\t.filter(col => !col.hidden);\n\n\tif (report_columns.length > 8) {\n\t\tfrappe.throw(\n\t\t\t__(\"Too many columns. Export the report and print it using a spreadsheet application.\")\n\t\t);\n\t}\n%}\n\n\n\n
\n\n\t
\n\t\t
\n\t\t\t{%= __(report.report_name) %}\n\t\t
\n\t
\n\n {% if (subtitle && subtitle.trim()) { %}\n
\n {{ subtitle }}\n
\n {% } else { %}\n
\n
\n
\n {%= __(\"Company\") %}: {%= filters.company %}\n
\n
\n {%= __(\"Currency\") %}:\n {%= filters.presentation_currency || erpnext.get_currency(filters.company) %}\n
\n
\n\n
\n
\n {%= __(\"From Date\") %}:\n {%= frappe.datetime.str_to_user(filters.from_date) %}\n
\n
\n {%= __(\"To Date\") %}:\n {%= frappe.datetime.str_to_user(filters.to_date) %}\n
\n
\n
\n {% } %}\n\n\t
\n \t\n \t\t\n \t\t\t\n \t\t\t\t{% for (let i = 0, l = report_columns.length; i < l; i++) { %}\n \t\t\t\t\t{%\n \t\t\t\t\t\tconst col = report_columns[i];\n \t\t\t\t\t\tconst align = i === 0 ? \"text-left\" : \"text-right\";\n \t\t\t\t\t\tconst styling = i === 0 ? \"\" : \"width: 9em\";\n \t\t\t\t\t%}\n \t\t\t\t\t\n \t\t\t\t{% } %}\n \t\t\t\n \t\t\n\n \t\t\n \t\t\t{% for (let j = 0, k = data.length; j < k; j++) { %}\n \t\t\t\t{%\n \t\t\t\t\tconst row = data[j];\n\n \t\t\t\t\tlet row_class = \"\";\n \t\t\t\t\tif (!(row.parent_account || row.parent_section)) {\n \t\t\t\t\t\trow_class = \"financial-statements-important\";\n \t\t\t\t\t}\n \t\t\t\t\tif (!(row.account_name || row.section)) {\n \t\t\t\t\t\trow_class += \" financial-statements-blank-row\";\n \t\t\t\t\t}\n \t\t\t\t%}\n\n \t\t\t\t\n \t\t\t\t\t{% for (let i = 0, l = report_columns.length; i < l; i++) { %}\n \t\t\t\t\t\t{%\n \t\t\t\t\t\t\tconst col = report_columns[i];\n \t\t\t\t\t\t\tconst value = row[col.fieldname];\n \t\t\t\t\t\t\tconst align = i === 0 ? \"text-left\" : \"text-right\";\n \t\t\t\t\t\t%}\n\n \t\t\t\t\t\t\n \t\t\t\t\t{% } %}\n \t\t\t\t\n \t\t\t{% } %}\n \t\t\n \t
\n \t\t\t\t\t\t{%= col.label %}\n \t\t\t\t\t
\n \t\t\t\t\t\t\t{% if (i === 0) { %}\n \t\t\t\t\t\t\t\t\n \t\t\t\t\t\t\t\t\t{%= String(row.account_name || row.section || \"\").replace(/^['\"]|['\"]$/g, \"\") %}\n \t\t\t\t\t\t\t\t\n \t\t\t\t\t\t\t{% } else if (!is_null(value)) { %}\n \t\t\t\t\t\t\t\t{%= frappe.format(value, col, {}, row) %}\n \t\t\t\t\t\t\t{% } %}\n \t\t\t\t\t\t
\n
\n\n\t

\n\t\t{%= __(\"Printed on {0}\", [\n\t\t\tfrappe.datetime.str_to_user(frappe.datetime.get_datetime_as_string())\n\t\t]) %}\n\t

\n\n
", "idx": 0, "line_breaks": 0, "margin_bottom": 15.0, "margin_left": 15.0, "margin_right": 15.0, "margin_top": 15.0, - "modified": "2026-04-24 12:40:37.484173", + "modified": "2026-05-21 19:14:43.041737", "modified_by": "Administrator", "module": "Accounts", "name": "Trial Balance Standard", diff --git a/erpnext/accounts/report/accounts_payable/accounts_payable.json b/erpnext/accounts/report/accounts_payable/accounts_payable.json index 321722a29da..40aa222cbb0 100644 --- a/erpnext/accounts/report/accounts_payable/accounts_payable.json +++ b/erpnext/accounts/report/accounts_payable/accounts_payable.json @@ -1,32 +1,37 @@ { - "add_total_row": 1, - "apply_user_permissions": 1, - "creation": "2013-04-22 16:16:03", - "disabled": 0, - "docstatus": 0, - "doctype": "Report", - "idx": 3, - "is_standard": "Yes", - "modified": "2017-02-24 20:09:46.150861", - "modified_by": "Administrator", - "module": "Accounts", - "name": "Accounts Payable", - "owner": "Administrator", - "ref_doctype": "Purchase Invoice", - "report_name": "Accounts Payable", - "report_type": "Script Report", + "add_total_row": 1, + "add_translate_data": 0, + "columns": [], + "creation": "2013-04-22 16:16:03", + "default_print_format": "Accounts Payable Standard", + "disabled": 0, + "docstatus": 0, + "doctype": "Report", + "filters": [], + "idx": 3, + "is_standard": "Yes", + "modified": "2026-05-22 14:35:14.716933", + "modified_by": "Administrator", + "module": "Accounts", + "name": "Accounts Payable", + "owner": "Administrator", + "prepared_report": 0, + "ref_doctype": "Purchase Invoice", + "report_name": "Accounts Payable", + "report_type": "Script Report", "roles": [ { "role": "Accounts User" - }, + }, { "role": "Purchase User" - }, + }, { "role": "Accounts Manager" - }, + }, { "role": "Auditor" } - ] -} \ No newline at end of file + ], + "timeout": 0 +} diff --git a/erpnext/accounts/report/accounts_payable_summary/accounts_payable_summary.json b/erpnext/accounts/report/accounts_payable_summary/accounts_payable_summary.json index 70d0860b037..c18fc7893c8 100644 --- a/erpnext/accounts/report/accounts_payable_summary/accounts_payable_summary.json +++ b/erpnext/accounts/report/accounts_payable_summary/accounts_payable_summary.json @@ -1,32 +1,37 @@ { - "add_total_row": 1, - "apply_user_permissions": 1, - "creation": "2014-11-04 12:09:59.672379", - "disabled": 0, - "docstatus": 0, - "doctype": "Report", - "idx": 2, - "is_standard": "Yes", - "modified": "2017-02-24 20:11:35.655834", - "modified_by": "Administrator", - "module": "Accounts", - "name": "Accounts Payable Summary", - "owner": "Administrator", - "ref_doctype": "Purchase Invoice", - "report_name": "Accounts Payable Summary", - "report_type": "Script Report", + "add_total_row": 1, + "add_translate_data": 0, + "columns": [], + "creation": "2014-11-04 12:09:59.672379", + "default_print_format": "Accounts Payable Summary Standard", + "disabled": 0, + "docstatus": 0, + "doctype": "Report", + "filters": [], + "idx": 2, + "is_standard": "Yes", + "modified": "2026-05-22 14:35:19.179799", + "modified_by": "Administrator", + "module": "Accounts", + "name": "Accounts Payable Summary", + "owner": "Administrator", + "prepared_report": 0, + "ref_doctype": "Purchase Invoice", + "report_name": "Accounts Payable Summary", + "report_type": "Script Report", "roles": [ { "role": "Accounts User" - }, + }, { "role": "Purchase User" - }, + }, { "role": "Accounts Manager" - }, + }, { "role": "Auditor" } - ] -} \ No newline at end of file + ], + "timeout": 0 +} diff --git a/erpnext/accounts/report/accounts_receivable/accounts_receivable.json b/erpnext/accounts/report/accounts_receivable/accounts_receivable.json index 1c99ac5f00b..b6e7820f91c 100644 --- a/erpnext/accounts/report/accounts_receivable/accounts_receivable.json +++ b/erpnext/accounts/report/accounts_receivable/accounts_receivable.json @@ -1,26 +1,31 @@ { - "add_total_row": 1, - "apply_user_permissions": 1, - "creation": "2013-04-16 11:31:13", - "disabled": 0, - "docstatus": 0, - "doctype": "Report", - "idx": 3, - "is_standard": "Yes", - "modified": "2017-03-06 05:52:06.235584", - "modified_by": "Administrator", - "module": "Accounts", - "name": "Accounts Receivable", - "owner": "Administrator", - "ref_doctype": "Sales Invoice", - "report_name": "Accounts Receivable", - "report_type": "Script Report", + "add_total_row": 1, + "add_translate_data": 0, + "columns": [], + "creation": "2013-04-16 11:31:13", + "default_print_format": "Accounts Receivable Standard", + "disabled": 0, + "docstatus": 0, + "doctype": "Report", + "filters": [], + "idx": 5, + "is_standard": "Yes", + "modified": "2026-05-22 14:34:57.666402", + "modified_by": "Administrator", + "module": "Accounts", + "name": "Accounts Receivable", + "owner": "Administrator", + "prepared_report": 0, + "ref_doctype": "Sales Invoice", + "report_name": "Accounts Receivable", + "report_type": "Script Report", "roles": [ { "role": "Accounts Manager" - }, + }, { "role": "Accounts User" } - ] -} \ No newline at end of file + ], + "timeout": 0 +} diff --git a/erpnext/accounts/report/accounts_receivable_summary/accounts_receivable_summary.json b/erpnext/accounts/report/accounts_receivable_summary/accounts_receivable_summary.json index 13d4c9deac5..72028523fc9 100644 --- a/erpnext/accounts/report/accounts_receivable_summary/accounts_receivable_summary.json +++ b/erpnext/accounts/report/accounts_receivable_summary/accounts_receivable_summary.json @@ -1,26 +1,31 @@ { - "add_total_row": 1, - "apply_user_permissions": 1, - "creation": "2014-10-17 15:45:00.694265", - "disabled": 0, - "docstatus": 0, - "doctype": "Report", - "idx": 2, - "is_standard": "Yes", - "modified": "2017-03-06 05:52:23.751082", - "modified_by": "Administrator", - "module": "Accounts", - "name": "Accounts Receivable Summary", - "owner": "Administrator", - "ref_doctype": "Sales Invoice", - "report_name": "Accounts Receivable Summary", - "report_type": "Script Report", + "add_total_row": 1, + "add_translate_data": 0, + "columns": [], + "creation": "2014-10-17 15:45:00.694265", + "default_print_format": "Accounts Receivable Summary Standard", + "disabled": 0, + "docstatus": 0, + "doctype": "Report", + "filters": [], + "idx": 2, + "is_standard": "Yes", + "modified": "2026-05-22 14:35:10.656797", + "modified_by": "Administrator", + "module": "Accounts", + "name": "Accounts Receivable Summary", + "owner": "Administrator", + "prepared_report": 0, + "ref_doctype": "Sales Invoice", + "report_name": "Accounts Receivable Summary", + "report_type": "Script Report", "roles": [ { "role": "Accounts Manager" - }, + }, { "role": "Accounts User" } - ] -} \ No newline at end of file + ], + "timeout": 0 +} diff --git a/erpnext/accounts/report/balance_sheet/balance_sheet.json b/erpnext/accounts/report/balance_sheet/balance_sheet.json index f67a34b25e9..4c1d4b64030 100644 --- a/erpnext/accounts/report/balance_sheet/balance_sheet.json +++ b/erpnext/accounts/report/balance_sheet/balance_sheet.json @@ -1,29 +1,34 @@ { - "add_total_row": 0, - "creation": "2014-07-14 05:24:20.385279", - "disabled": 0, - "docstatus": 0, - "doctype": "Report", - "idx": 2, - "is_standard": "Yes", - "modified": "2018-09-07 12:18:21.850851", - "modified_by": "Administrator", - "module": "Accounts", - "name": "Balance Sheet", - "owner": "Administrator", - "prepared_report": 0, - "ref_doctype": "GL Entry", - "report_name": "Balance Sheet", - "report_type": "Script Report", + "add_total_row": 0, + "add_translate_data": 0, + "columns": [], + "creation": "2014-07-14 05:24:20.385279", + "default_print_format": "Balance Sheet Standard", + "disabled": 0, + "docstatus": 0, + "doctype": "Report", + "filters": [], + "idx": 3, + "is_standard": "Yes", + "modified": "2026-05-22 14:35:28.187799", + "modified_by": "Administrator", + "module": "Accounts", + "name": "Balance Sheet", + "owner": "Administrator", + "prepared_report": 0, + "ref_doctype": "GL Entry", + "report_name": "Balance Sheet", + "report_type": "Script Report", "roles": [ { "role": "Accounts User" - }, + }, { "role": "Accounts Manager" - }, + }, { "role": "Auditor" } - ] -} \ No newline at end of file + ], + "timeout": 0 +} diff --git a/erpnext/accounts/report/cash_flow/cash_flow.json b/erpnext/accounts/report/cash_flow/cash_flow.json index 730a7984dcf..5a67cb96674 100644 --- a/erpnext/accounts/report/cash_flow/cash_flow.json +++ b/erpnext/accounts/report/cash_flow/cash_flow.json @@ -1,29 +1,34 @@ { - "add_total_row": 0, - "apply_user_permissions": 1, - "creation": "2015-12-12 10:22:45.383203", - "disabled": 0, - "docstatus": 0, - "doctype": "Report", - "idx": 2, - "is_standard": "Yes", - "modified": "2017-02-24 20:09:19.748690", - "modified_by": "Administrator", - "module": "Accounts", - "name": "Cash Flow", - "owner": "Administrator", - "ref_doctype": "GL Entry", - "report_name": "Cash Flow", - "report_type": "Script Report", + "add_total_row": 0, + "add_translate_data": 0, + "columns": [], + "creation": "2015-12-12 10:22:45.383203", + "default_print_format": "Cash Flow Statement Standard", + "disabled": 0, + "docstatus": 0, + "doctype": "Report", + "filters": [], + "idx": 3, + "is_standard": "Yes", + "modified": "2026-05-22 14:35:34.353508", + "modified_by": "Administrator", + "module": "Accounts", + "name": "Cash Flow", + "owner": "Administrator", + "prepared_report": 0, + "ref_doctype": "GL Entry", + "report_name": "Cash Flow", + "report_type": "Script Report", "roles": [ { "role": "Accounts User" - }, + }, { "role": "Accounts Manager" - }, + }, { "role": "Auditor" } - ] -} \ No newline at end of file + ], + "timeout": 0 +} diff --git a/erpnext/accounts/report/general_ledger/general_ledger.json b/erpnext/accounts/report/general_ledger/general_ledger.json index a49f6356122..8dac581eae3 100644 --- a/erpnext/accounts/report/general_ledger/general_ledger.json +++ b/erpnext/accounts/report/general_ledger/general_ledger.json @@ -3,14 +3,14 @@ "add_translate_data": 0, "columns": [], "creation": "2013-12-06 13:22:23", + "default_print_format": "General Ledger Standard", "disabled": 0, "docstatus": 0, "doctype": "Report", "filters": [], - "idx": 3, + "idx": 4, "is_standard": "Yes", - "letterhead": null, - "modified": "2025-11-05 15:47:59.597853", + "modified": "2026-05-22 14:34:35.246000", "modified_by": "Administrator", "module": "Accounts", "name": "General Ledger", diff --git a/erpnext/accounts/report/profit_and_loss_statement/profit_and_loss_statement.json b/erpnext/accounts/report/profit_and_loss_statement/profit_and_loss_statement.json index d92d6e8d241..5abd51e2a30 100644 --- a/erpnext/accounts/report/profit_and_loss_statement/profit_and_loss_statement.json +++ b/erpnext/accounts/report/profit_and_loss_statement/profit_and_loss_statement.json @@ -1,29 +1,34 @@ { - "add_total_row": 0, - "apply_user_permissions": 1, - "creation": "2014-07-18 11:43:33.173207", - "disabled": 0, - "docstatus": 0, - "doctype": "Report", - "idx": 2, - "is_standard": "Yes", - "modified": "2017-02-24 20:12:40.282376", - "modified_by": "Administrator", - "module": "Accounts", - "name": "Profit and Loss Statement", - "owner": "Administrator", - "ref_doctype": "GL Entry", - "report_name": "Profit and Loss Statement", - "report_type": "Script Report", + "add_total_row": 0, + "add_translate_data": 0, + "columns": [], + "creation": "2014-07-18 11:43:33.173207", + "default_print_format": "P&L Statement Standard", + "disabled": 0, + "docstatus": 0, + "doctype": "Report", + "filters": [], + "idx": 2, + "is_standard": "Yes", + "modified": "2026-05-22 14:36:04.544347", + "modified_by": "Administrator", + "module": "Accounts", + "name": "Profit and Loss Statement", + "owner": "Administrator", + "prepared_report": 0, + "ref_doctype": "GL Entry", + "report_name": "Profit and Loss Statement", + "report_type": "Script Report", "roles": [ { "role": "Accounts User" - }, + }, { "role": "Accounts Manager" - }, + }, { "role": "Auditor" } - ] -} \ No newline at end of file + ], + "timeout": 0 +} diff --git a/erpnext/accounts/report/trial_balance/trial_balance.json b/erpnext/accounts/report/trial_balance/trial_balance.json index af586f7f17d..b6c121bd5fd 100644 --- a/erpnext/accounts/report/trial_balance/trial_balance.json +++ b/erpnext/accounts/report/trial_balance/trial_balance.json @@ -1,19 +1,23 @@ { - "add_total_row": 0, - "apply_user_permissions": 1, - "creation": "2014-07-22 11:41:23.743564", - "disabled": 0, - "docstatus": 0, - "doctype": "Report", - "idx": 2, - "is_standard": "Yes", - "modified": "2017-02-24 20:12:33.520866", - "modified_by": "Administrator", - "module": "Accounts", - "name": "Trial Balance", - "owner": "Administrator", - "ref_doctype": "GL Entry", - "report_name": "Trial Balance", + "add_total_row": 0, + "add_translate_data": 0, + "columns": [], + "creation": "2014-07-22 11:41:23.743564", + "default_print_format": "Trial Balance Standard", + "disabled": 0, + "docstatus": 0, + "doctype": "Report", + "filters": [], + "idx": 2, + "is_standard": "Yes", + "modified": "2026-05-22 14:35:44.889062", + "modified_by": "Administrator", + "module": "Accounts", + "name": "Trial Balance", + "owner": "Administrator", + "prepared_report": 0, + "ref_doctype": "GL Entry", + "report_name": "Trial Balance", "report_type": "Script Report", "roles": [ { @@ -25,5 +29,6 @@ { "role": "Auditor" } - ] -} \ No newline at end of file + ], + "timeout": 0 +} From bca917380d318aa8dc4ea30dbd8e7f01100830b1 Mon Sep 17 00:00:00 2001 From: nishkagosalia Date: Wed, 3 Jun 2026 14:51:27 +0530 Subject: [PATCH 6/7] fix: item report view --- erpnext/stock/doctype/item/item_list.js | 28 +++++++++++++------------ 1 file changed, 15 insertions(+), 13 deletions(-) diff --git a/erpnext/stock/doctype/item/item_list.js b/erpnext/stock/doctype/item/item_list.js index 34e0fae07d0..05d0151a932 100644 --- a/erpnext/stock/doctype/item/item_list.js +++ b/erpnext/stock/doctype/item/item_list.js @@ -33,19 +33,21 @@ frappe.listview_settings["Item"] = { }, onload: function (listview) { - listview.columns = listview.columns.map((col) => { - if (!col.df) return col; - const renames = { - is_fixed_asset: __("Item Type"), - is_sales_item: __("Purpose"), - stock_uom: __("UOM"), - }; - if (col.df.fieldname in renames) { - return { ...col, df: { ...col.df, label: renames[col.df.fieldname] } }; - } - return col; - }); - listview.render_header(true); + if (listview.view === "List") { + listview.columns = listview.columns.map((col) => { + if (!col.df) return col; + const renames = { + is_fixed_asset: __("Item Type"), + is_sales_item: __("Purpose"), + stock_uom: __("UOM"), + }; + if (col.df.fieldname in renames) { + return { ...col, df: { ...col.df, label: renames[col.df.fieldname] } }; + } + return col; + }); + listview.render_header(true); + } }, get_indicator: function (doc) { From d2d28c9e0361f46ce5afc093e686a906c14546c4 Mon Sep 17 00:00:00 2001 From: Loic Oberle Date: Wed, 3 Jun 2026 11:49:24 +0200 Subject: [PATCH 7/7] refactor(accounting): replace sql with qb in diverse accounting-related files (#55416) --- .../accounting_dimension.py | 40 +++++++------- .../accounting_dimension_filter.py | 55 +++++++++++-------- .../accounting_period/accounting_period.py | 26 ++++----- 3 files changed, 63 insertions(+), 58 deletions(-) diff --git a/erpnext/accounts/doctype/accounting_dimension/accounting_dimension.py b/erpnext/accounts/doctype/accounting_dimension/accounting_dimension.py index d43f333b50c..5b0e3bf939b 100644 --- a/erpnext/accounts/doctype/accounting_dimension/accounting_dimension.py +++ b/erpnext/accounts/doctype/accounting_dimension/accounting_dimension.py @@ -198,21 +198,9 @@ def add_dimension_to_budget_doctype(df, doc): def delete_accounting_dimension(doc): doclist = get_doctypes_with_dimensions() - frappe.db.sql( - """ - DELETE FROM `tabCustom Field` - WHERE fieldname = {} - AND dt IN ({})""".format("%s", ", ".join(["%s"] * len(doclist))), # nosec - tuple([doc.fieldname, *doclist]), - ) + frappe.db.delete("Custom Field", filters={"fieldname": doc.fieldname, "dt": ["in", doclist]}) - frappe.db.sql( - """ - DELETE FROM `tabProperty Setter` - WHERE field_name = {} - AND doc_type IN ({})""".format("%s", ", ".join(["%s"] * len(doclist))), # nosec - tuple([doc.fieldname, *doclist]), - ) + frappe.db.delete("Property Setter", filters={"field_name": doc.fieldname, "doc_type": ["in", doclist]}) budget_against_property = frappe.get_doc("Property Setter", "Budget-budget_against-options") value_list = budget_against_property.value.split("\n")[3:] @@ -273,13 +261,27 @@ def get_accounting_dimensions(as_list=True): def get_checks_for_pl_and_bs_accounts(): - return frappe.db.sql( - """SELECT p.label, p.disabled, p.fieldname, c.default_dimension, c.company, c.mandatory_for_pl, c.mandatory_for_bs - FROM `tabAccounting Dimension`p ,`tabAccounting Dimension Detail` c - WHERE p.name = c.parent AND p.disabled = 0""", - as_dict=1, + AccountingDimension = frappe.qb.DocType("Accounting Dimension") + AccountingDimensionDetail = frappe.qb.DocType("Accounting Dimension Detail") + + query = ( + frappe.qb.from_(AccountingDimension) + .join(AccountingDimensionDetail) + .on(AccountingDimension.name == AccountingDimensionDetail.parent) + .select( + AccountingDimension.label, + AccountingDimension.disabled, + AccountingDimension.fieldname, + AccountingDimensionDetail.default_dimension, + AccountingDimensionDetail.company, + AccountingDimensionDetail.mandatory_for_pl, + AccountingDimensionDetail.mandatory_for_bs, + ) + .where(AccountingDimension.disabled == 0) ) + return query.run(as_dict=1) + def get_dimension_with_children(doctype, dimensions): if isinstance(dimensions, str): diff --git a/erpnext/accounts/doctype/accounting_dimension_filter/accounting_dimension_filter.py b/erpnext/accounts/doctype/accounting_dimension_filter/accounting_dimension_filter.py index 7846f11d91e..631e9a3acc0 100644 --- a/erpnext/accounts/doctype/accounting_dimension_filter/accounting_dimension_filter.py +++ b/erpnext/accounts/doctype/accounting_dimension_filter/accounting_dimension_filter.py @@ -43,18 +43,19 @@ class AccountingDimensionFilter(Document): self.validate_applicable_accounts() def validate_applicable_accounts(self): - accounts = frappe.db.sql( - """ - SELECT a.applicable_on_account as account - FROM `tabApplicable On Account` a, `tabAccounting Dimension Filter` d - WHERE d.name = a.parent - and d.name != %s - and d.accounting_dimension = %s - """, - (self.name, self.accounting_dimension), - as_dict=1, + ApplicableOnAccount = frappe.qb.DocType("Applicable On Account") + AccountingDimensionFilter = frappe.qb.DocType("Accounting Dimension Filter") + + query = ( + frappe.qb.from_(ApplicableOnAccount) + .join(AccountingDimensionFilter) + .on(AccountingDimensionFilter.name == ApplicableOnAccount.parent) + .select(ApplicableOnAccount.applicable_on_account.as_("account")) + .where(AccountingDimensionFilter.name != self.name) + .where(AccountingDimensionFilter.accounting_dimension == self.accounting_dimension) ) + accounts = query.run(as_dict=1) account_list = [d.account for d in accounts] for account in self.get("accounts"): @@ -69,22 +70,28 @@ class AccountingDimensionFilter(Document): def get_dimension_filter_map(): - filters = frappe.db.sql( - """ - SELECT - a.applicable_on_account, d.dimension_value, p.accounting_dimension, - p.allow_or_restrict, p.fieldname, a.is_mandatory - FROM - `tabApplicable On Account` a, - `tabAccounting Dimension Filter` p - LEFT JOIN `tabAllowed Dimension` d ON d.parent = p.name - WHERE - p.name = a.parent - AND p.disabled = 0 - """, - as_dict=1, + ApplicableOnAccount = frappe.qb.DocType("Applicable On Account") + AccountingDimensionFilter = frappe.qb.DocType("Accounting Dimension Filter") + AllowedDimension = frappe.qb.DocType("Allowed Dimension") + + query = ( + frappe.qb.from_(AccountingDimensionFilter) + .join(ApplicableOnAccount) + .on(AccountingDimensionFilter.name == ApplicableOnAccount.parent) + .left_join(AllowedDimension) + .on(AllowedDimension.parent == AccountingDimensionFilter.name) + .select( + ApplicableOnAccount.applicable_on_account, + AllowedDimension.dimension_value, + AccountingDimensionFilter.accounting_dimension, + AccountingDimensionFilter.allow_or_restrict, + AccountingDimensionFilter.fieldname, + ApplicableOnAccount.is_mandatory, + ) + .where(AccountingDimensionFilter.disabled == 0) ) + filters = query.run(as_dict=1) dimension_filter_map = {} for f in filters: diff --git a/erpnext/accounts/doctype/accounting_period/accounting_period.py b/erpnext/accounts/doctype/accounting_period/accounting_period.py index 16a29bf4591..f1ea837f934 100644 --- a/erpnext/accounts/doctype/accounting_period/accounting_period.py +++ b/erpnext/accounts/doctype/accounting_period/accounting_period.py @@ -46,23 +46,19 @@ class AccountingPeriod(Document): self.name = " - ".join([self.period_name, company_abbr]) def validate_overlap(self): - existing_accounting_period = frappe.db.sql( - """select name from `tabAccounting Period` - where ( - (%(start_date)s between start_date and end_date) - or (%(end_date)s between start_date and end_date) - or (start_date between %(start_date)s and %(end_date)s) - or (end_date between %(start_date)s and %(end_date)s) - ) and name!=%(name)s and company=%(company)s""", - { - "start_date": self.start_date, - "end_date": self.end_date, - "name": self.name, - "company": self.company, - }, - as_dict=True, + AccountingPeriod = frappe.qb.DocType("Accounting Period") + + query = ( + frappe.qb.from_(AccountingPeriod) + .select(AccountingPeriod.name) + .where(AccountingPeriod.start_date <= self.end_date) + .where(AccountingPeriod.end_date >= self.start_date) + .where(AccountingPeriod.name != self.name) + .where(AccountingPeriod.company == self.company) ) + existing_accounting_period = query.run(as_dict=True) + if len(existing_accounting_period) > 0: frappe.throw( _("Accounting Period overlaps with {0}").format(existing_accounting_period[0].get("name")),