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")),
diff --git a/erpnext/accounts/doctype/purchase_invoice/purchase_invoice.py b/erpnext/accounts/doctype/purchase_invoice/purchase_invoice.py
index 89f07935d7c..71981673b8e 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 += _(
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
\n
\n \n \n | {%= __(\"Date\") %} | \n {%= __(\"Reference\") %} | \n\n {% if(filters.show_remarks) { %}\n {%= __(\"Remarks\") %} | \n {% } %}\n\n {%= __(\"Age (Days)\") %} | \n {%= __(\"Invoiced Amount\") %} | \n {%= __(\"Outstanding Amount\") %} | \n
\n \n\n \n {% for(var i=0, l=data.length; i\n {%= frappe.datetime.str_to_user(data[i][\"posting_date\"]) %} | \n\n \n {% if(i == data.length - 1) { %}\n {%= __(\"Total\") %}\n {% } else { %}\n {%= data[i][\"voucher_no\"] %}\n {% } %}\n | \n\n {% if(filters.show_remarks) { %}\n \n {% if(data[i][\"remarks\"] && data[i][\"remarks\"] != \"No Remarks\") { %}\n {%= data[i][\"remarks\"] %}\n {% } %}\n | \n {% } %}\n\n {%= data[i][\"age\"] %} | \n {%= format_currency(data[i][\"invoiced\"], data[i][\"currency\"]) %} | \n {%= format_currency(data[i][\"outstanding\"], data[i][\"currency\"]) %} | \n \n {% } %}\n \n
\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 {%= __(ranges[i]) %} | \n {% } %}\n {%= __(\"Total\") %} | \n
\n \n \n \n | {%= __(\"Total Outstanding\") %} | \n {%= format_number(balance_row[\"age\"], null, 2) %} | \n {%= format_currency(balance_row[\"range1\"], currency) %} | \n {%= format_currency(balance_row[\"range2\"], currency) %} | \n {%= format_currency(balance_row[\"range3\"], currency) %} | \n {%= format_currency(balance_row[\"range4\"], currency) %} | \n {%= format_currency(balance_row[\"range5\"], currency) %} | \n {%= format_currency(flt(balance_row[\"outstanding\"]), currency) %} | \n
\n \n
\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
\n
\n \n \n | {%= __(\"Date\") %} | \n {%= __(\"Reference\") %} | \n\n {% if(filters.show_remarks) { %}\n {%= __(\"Remarks\") %} | \n {% } %}\n\n {%= __(\"Age (Days)\") %} | \n {%= __(\"Invoiced Amount\") %} | \n {%= __(\"Outstanding Amount\") %} | \n
\n \n\n \n {% for(var i=0, l=data.length; i\n {%= frappe.datetime.str_to_user(data[i][\"posting_date\"]) %} | \n\n \n {% if(i == data.length - 1) { %}\n {%= __(\"Total\") %}\n {% } else { %}\n {%= data[i][\"voucher_no\"] %}\n {% } %}\n | \n\n {% if(filters.show_remarks) { %}\n \n {% if(data[i][\"remarks\"] && data[i][\"remarks\"] != \"No Remarks\") { %}\n {%= data[i][\"remarks\"] %}\n {% } %}\n | \n {% } %}\n\n {%= data[i][\"age\"] %} | \n {%= format_currency(data[i][\"invoiced\"], data[i][\"currency\"]) %} | \n {%= format_currency(data[i][\"outstanding\"], data[i][\"currency\"]) %} | \n \n {% } %}\n \n
\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 {%= __(ranges[i]) %} | \n {% } %}\n {%= __(\"Total\") %} | \n
\n \n \n \n | {%= __(\"Total Outstanding\") %} | \n {%= format_number(balance_row[\"age\"], null, 2) %} | \n {%= format_currency(balance_row[\"range1\"], currency) %} | \n {%= format_currency(balance_row[\"range2\"], currency) %} | \n {%= format_currency(balance_row[\"range3\"], currency) %} | \n {%= format_currency(balance_row[\"range4\"], currency) %} | \n {%= format_currency(balance_row[\"range5\"], currency) %} | \n {%= format_currency(flt(balance_row[\"outstanding\"]), currency) %} | \n
\n \n
\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
\n \n \n | {%= __(\"Supplier\") %} | \n {%= __(\"Total Invoiced Amount\") %} | \n {%= __(\"Total Paid Amount\") %} | \n {%= __(\"Debit Note Amount\") %} | \n {%= __(\"Total Outstanding Amount\") %} | \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 {% if (row.is_total_row) { %}\n {%= __(\"Total\") %}\n {% } else { %}\n {%= row.party %}\n {% } %}\n | \n\n \n {%= format_currency(row.invoiced, row.currency) %}\n | \n \n {%= format_currency(row.paid, row.currency) %}\n | \n \n {%= format_currency(row.debit_note, row.currency) %}\n | \n \n {%= format_currency(row.outstanding, row.currency) %}\n | \n
\n {% } %}\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 {%= __(report.report_name) %}\n
\n
\n\n
\n\n
\n
\n \n \n | {%= __(\"Supplier\") %} | \n {%= __(\"Total Invoiced Amount\") %} | \n {%= __(\"Total Paid Amount\") %} | \n {%= __(\"Debit Note Amount\") %} | \n {%= __(\"Total Outstanding Amount\") %} | \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 {% if (row.is_total_row) { %}\n {%= __(\"Total\") %}\n {% } else { %}\n {%= row.party %}\n {% } %}\n | \n\n \n {%= format_currency(row.invoiced, row.currency) %}\n | \n \n {%= format_currency(row.paid, row.currency) %}\n | \n \n {%= format_currency(row.debit_note, row.currency) %}\n | \n \n {%= format_currency(row.outstanding, row.currency) %}\n | \n
\n {% } %}\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-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
\n\t\t
\n\t\t\t\n\t\t\t\t\n\t\t\t\t\t| {%= __(\"Date\") %} | \n\t\t\t\t\t{%= __(\"Reference\") %} | \n\n\t\t\t\t\t{% if(filters.show_remarks) { %}\n\t\t\t\t\t\t{%= __(\"Remarks\") %} | \n\t\t\t\t\t{% } %}\n\n\t\t\t\t\t{%= __(\"Age (Days)\") %} | \n\t\t\t\t\t{%= __(\"Invoiced Amount\") %} | \n\t\t\t\t\t{%= __(\"Outstanding Amount\") %} | \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{%= frappe.datetime.str_to_user(data[i][\"posting_date\"]) %} | \n\t\t\t\t\t\t\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{% if(filters.show_remarks) { %}\n\t\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 | \n\t\t\t\t\t\t{% } %}\n\t\t\t\t\t\t{%= data[i][\"age\"] %} | \n\t\t\t\t\t\t{%= format_currency(data[i][\"invoiced\"], data[i][\"currency\"]) %} | \n\t\t\t\t\t\t{%= format_currency(data[i][\"outstanding\"], data[i][\"currency\"]) %} | \n\t\t\t\t\t\n\t\t\t\t{% } %}\n\t\t\t\n\t\t
\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{%= __(ranges[i]) %} | \n\t\t\t\t\t\t{% } %}\n\t\t\t\t\t\t{%= __(\"Total\") %} | \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| {%= __(\"Total Outstanding\") %} | \n\t\t\t\t\t\t{%= format_number(balance_row[\"age\"], null, 2) %} | \n\t\t\t\t\t\t{%= format_currency(balance_row[\"range1\"], currency) %} | \n\t\t\t\t\t\t{%= format_currency(balance_row[\"range2\"], currency) %} | \n\t\t\t\t\t\t{%= format_currency(balance_row[\"range3\"], currency) %} | \n\t\t\t\t\t\t{%= format_currency(balance_row[\"range4\"], currency) %} | \n\t\t\t\t\t\t{%= format_currency(balance_row[\"range5\"], currency) %} | \n\t\t\t\t\t\t{%= format_currency(flt(balance_row[\"outstanding\"]), currency) %} | \n\t\t\t\t\t
\n\t\t\t\t\n\t\t\t
\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
\n\t\t
\n\t\t\t\n\t\t\t\t\n\t\t\t\t\t| {%= __(\"Date\") %} | \n\t\t\t\t\t{%= __(\"Reference\") %} | \n\n\t\t\t\t\t{% if(filters.show_remarks) { %}\n\t\t\t\t\t\t{%= __(\"Remarks\") %} | \n\t\t\t\t\t{% } %}\n\n\t\t\t\t\t{%= __(\"Age (Days)\") %} | \n\t\t\t\t\t{%= __(\"Invoiced Amount\") %} | \n\t\t\t\t\t{%= __(\"Outstanding Amount\") %} | \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{%= frappe.datetime.str_to_user(data[i][\"posting_date\"]) %} | \n\t\t\t\t\t\t\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{% if(filters.show_remarks) { %}\n\t\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 | \n\t\t\t\t\t\t{% } %}\n\t\t\t\t\t\t{%= data[i][\"age\"] %} | \n\t\t\t\t\t\t{%= format_currency(data[i][\"invoiced\"], data[i][\"currency\"]) %} | \n\t\t\t\t\t\t{%= format_currency(data[i][\"outstanding\"], data[i][\"currency\"]) %} | \n\t\t\t\t\t\n\t\t\t\t{% } %}\n\t\t\t\n\t\t
\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{%= __(ranges[i]) %} | \n\t\t\t\t\t\t{% } %}\n\t\t\t\t\t\t{%= __(\"Total\") %} | \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| {%= __(\"Total Outstanding\") %} | \n\t\t\t\t\t\t{%= format_number(balance_row[\"age\"], null, 2) %} | \n\t\t\t\t\t\t{%= format_currency(balance_row[\"range1\"], currency) %} | \n\t\t\t\t\t\t{%= format_currency(balance_row[\"range2\"], currency) %} | \n\t\t\t\t\t\t{%= format_currency(balance_row[\"range3\"], currency) %} | \n\t\t\t\t\t\t{%= format_currency(balance_row[\"range4\"], currency) %} | \n\t\t\t\t\t\t{%= format_currency(balance_row[\"range5\"], currency) %} | \n\t\t\t\t\t\t{%= format_currency(flt(balance_row[\"outstanding\"]), currency) %} | \n\t\t\t\t\t
\n\t\t\t\t\n\t\t\t
\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
\n \n \n | {%= __(\"Customer\") %} | \n {%= __(\"Total Invoiced Amount\") %} | \n {%= __(\"Total Paid Amount\") %} | \n {%= __(\"Credit Note Amount\") %} | \n {%= __(\"Total Outstanding Amount\") %} | \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 {% if (row.is_total_row) { %}\n {%= __(\"Total\") %}\n {% } else { %}\n {%= row.party %}\n {% } %}\n | \n\n \n {%= format_currency(row.invoiced, row.currency) %}\n | \n \n {%= format_currency(row.paid, row.currency) %}\n | \n \n {%= format_currency(row.credit_note, row.currency) %}\n | \n \n {%= format_currency(row.outstanding, row.currency) %}\n | \n
\n {% } %}\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 {%= __(report.report_name) %}\n
\n
\n\n
\n\n
\n
\n \n \n | {%= __(\"Customer\") %} | \n {%= __(\"Total Invoiced Amount\") %} | \n {%= __(\"Total Paid Amount\") %} | \n {%= __(\"Credit Note Amount\") %} | \n {%= __(\"Total Outstanding Amount\") %} | \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 {% if (row.is_total_row) { %}\n {%= __(\"Total\") %}\n {% } else { %}\n {%= row.party %}\n {% } %}\n | \n\n \n {%= format_currency(row.invoiced, row.currency) %}\n | \n \n {%= format_currency(row.paid, row.currency) %}\n | \n \n {%= format_currency(row.credit_note, row.currency) %}\n | \n \n {%= format_currency(row.outstanding, row.currency) %}\n | \n
\n {% } %}\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-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\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\t\t{%= col.label %}\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\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 \t\t\t\t\t{% } %}\n \t\t\t\t
\n \t\t\t{% } %}\n \t\t\n \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\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\t\t{%= col.label %}\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\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 \t\t\t\t\t{% } %}\n \t\t\t\t
\n \t\t\t{% } %}\n \t\t\n \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\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\t\t{%= col.label %}\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\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 \t\t\t\t\t{% } %}\n \t\t\t\t
\n \t\t\t{% } %}\n \t\t\n \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\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\t\t{%= col.label %}\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\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 \t\t\t\t\t{% } %}\n \t\t\t\t
\n \t\t\t{% } %}\n \t\t\n \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 {% } %}\n\n
\n
\n \n \n | {%= __(\"Date\") %} | \n {%= __(\"Voucher Details\") %} | \n\n {% if(filters.show_remarks) { %}\n {%= __(\"Remarks\") %} | \n {% } %}\n\n {%= __(\"Debit\") %} | \n {%= __(\"Credit\") %} | \n {%= __(\"Balance\") %} | \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\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\n\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\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\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{% } %}\n\n\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\n\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\n\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\t\t\t\t\t\n\t\t\t\t{% } %}\n\t\t\t\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 {%= __(\"Statement Of Accounts\") %}\n
\n
\n\n {% if (subtitle && subtitle.trim()) { %}\n
\n {{ subtitle }}\n
\n {% } else { %}\n
\n {% } %}\n\n
\n
\n \n \n | {%= __(\"Date\") %} | \n {%= __(\"Voucher Details\") %} | \n\n {% if(filters.show_remarks) { %}\n {%= __(\"Remarks\") %} | \n {% } %}\n\n {%= __(\"Debit\") %} | \n {%= __(\"Credit\") %} | \n {%= __(\"Balance\") %} | \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\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\n\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\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\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{% } %}\n\n\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\n\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\n\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\t\t\t\t\t\n\t\t\t\t{% } %}\n\t\t\t\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-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\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\t\t{%= col.label %}\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\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 \t\t\t\t\t{% } %}\n \t\t\t\t
\n \t\t\t{% } %}\n \t\t\n \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\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\t\t{%= col.label %}\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\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 \t\t\t\t\t{% } %}\n \t\t\t\t
\n \t\t\t{% } %}\n \t\t\n \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\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\t\t{%= col.label %}\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\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 \t\t\t\t\t{% } %}\n \t\t\t\t
\n \t\t\t{% } %}\n \t\t\n \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\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\t\t{%= col.label %}\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\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 \t\t\t\t\t{% } %}\n \t\t\t\t
\n \t\t\t{% } %}\n \t\t\n \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/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",
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
+}
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
}
},
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) {
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", ""],
]: