From 12ebab1657641b2b7e3826280465f2b8b8d4963b Mon Sep 17 00:00:00 2001 From: khushi8112 Date: Fri, 10 Oct 2025 15:50:50 +0530 Subject: [PATCH] refactor: change print format type html to custom --- .../doctype/sales_invoice/sales_invoice.py | 10 + .../print_format_sales_invoice.html | 330 ------------------ .../print_format_sales_invoice.json | 32 -- .../sales_invoice_print_format.html | 328 ----------------- .../sales_invoice_print_format.json | 32 -- .../__init__.py | 0 .../sales_invoice_standard.json | 33 ++ .../__init__.py | 0 .../sales_invoice_with_item_image.json | 33 ++ 9 files changed, 76 insertions(+), 722 deletions(-) delete mode 100644 erpnext/accounts/print_format/print_format_sales_invoice/print_format_sales_invoice.html delete mode 100644 erpnext/accounts/print_format/print_format_sales_invoice/print_format_sales_invoice.json delete mode 100644 erpnext/accounts/print_format/sales_invoice_print_format/sales_invoice_print_format.html delete mode 100644 erpnext/accounts/print_format/sales_invoice_print_format/sales_invoice_print_format.json rename erpnext/accounts/print_format/{print_format_sales_invoice => sales_invoice_standard}/__init__.py (100%) create mode 100644 erpnext/accounts/print_format/sales_invoice_standard/sales_invoice_standard.json rename erpnext/accounts/print_format/{sales_invoice_print_format => sales_invoice_with_item_image}/__init__.py (100%) create mode 100644 erpnext/accounts/print_format/sales_invoice_with_item_image/sales_invoice_with_item_image.json diff --git a/erpnext/accounts/doctype/sales_invoice/sales_invoice.py b/erpnext/accounts/doctype/sales_invoice/sales_invoice.py index fa7a05caaf3..31d21bc1fe6 100644 --- a/erpnext/accounts/doctype/sales_invoice/sales_invoice.py +++ b/erpnext/accounts/doctype/sales_invoice/sales_invoice.py @@ -282,6 +282,8 @@ class SalesInvoice(SellingController): def before_print(self, settings=None): from frappe.contacts.doctype.address.address import get_address_display_list + super().before_print(settings) + company_details = frappe.get_value( "Company", self.company, ["company_logo", "website", "phone_no", "email"], as_dict=True ) @@ -298,6 +300,14 @@ class SalesInvoice(SellingController): ] if not all(required_fields): + if not frappe.has_permission("Company", "write", throw=False): + frappe.msgprint( + _( + "Some required Company details are missing. You don't have permission to update them. Please contact your System Manager." + ) + ) + return + frappe.publish_realtime( "sales_invoice_before_print", { diff --git a/erpnext/accounts/print_format/print_format_sales_invoice/print_format_sales_invoice.html b/erpnext/accounts/print_format/print_format_sales_invoice/print_format_sales_invoice.html deleted file mode 100644 index ae0a0dbb77a..00000000000 --- a/erpnext/accounts/print_format/print_format_sales_invoice/print_format_sales_invoice.html +++ /dev/null @@ -1,330 +0,0 @@ -{%- macro add_header(page_num, max_pages, doc, letter_head, no_letterhead, footer, print_settings=None, -print_heading_template=None) -%} -{% if letter_head and not no_letterhead %} -
{{ letter_head }}
-{% endif %} -{% if print_heading_template %} - {{ frappe.render_template(print_heading_template, {"doc":doc}) }} -{% endif %} -{%- endmacro -%} -{% for page in layout %} -
-
- {{ add_header(loop.index, layout|len, doc, letter_head, no_letterhead, footer, print_settings) }} -
- - - - -
-{% endfor %} diff --git a/erpnext/accounts/print_format/print_format_sales_invoice/print_format_sales_invoice.json b/erpnext/accounts/print_format/print_format_sales_invoice/print_format_sales_invoice.json deleted file mode 100644 index 9952485cc28..00000000000 --- a/erpnext/accounts/print_format/print_format_sales_invoice/print_format_sales_invoice.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "absolute_value": 0, - "align_labels_right": 0, - "creation": "2025-09-15 16:31:00.732539", - "custom_format": 0, - "default_print_language": "en", - "disabled": 0, - "doc_type": "Sales Invoice", - "docstatus": 0, - "doctype": "Print Format", - "font_size": 14, - "idx": 0, - "line_breaks": 0, - "margin_bottom": 15.0, - "margin_left": 15.0, - "margin_right": 15.0, - "margin_top": 15.0, - "modified": "2025-09-15 16:31:00.732539", - "modified_by": "Administrator", - "module": "Accounts", - "name": "Print Format Sales Invoice", - "owner": "Administrator", - "page_number": "Hide", - "pdf_generator": "wkhtmltopdf", - "print_format_builder": 0, - "print_format_builder_beta": 0, - "print_format_for": "DocType", - "print_format_type": "Jinja", - "raw_printing": 0, - "show_section_headings": 0, - "standard": "Yes" -} diff --git a/erpnext/accounts/print_format/sales_invoice_print_format/sales_invoice_print_format.html b/erpnext/accounts/print_format/sales_invoice_print_format/sales_invoice_print_format.html deleted file mode 100644 index e11d8c97d69..00000000000 --- a/erpnext/accounts/print_format/sales_invoice_print_format/sales_invoice_print_format.html +++ /dev/null @@ -1,328 +0,0 @@ -{%- macro add_header(page_num, max_pages, doc, letter_head, no_letterhead, footer, print_settings=None, -print_heading_template=None) -%} -{% if letter_head and not no_letterhead %} -
{{ letter_head }}
-{% endif %} -{% if print_heading_template %} - {{ frappe.render_template(print_heading_template, {"doc":doc}) }} -{% else %} -{% endif %} -{%- if doc.meta.is_submittable and doc.docstatus==2-%} -
-

{{ _("CANCELLED") }}

-
-{%- endif -%} -{%- endmacro -%} {% for page in layout %} -
-
- {{ add_header(loop.index, layout|len, doc, letter_head, no_letterhead, footer, print_settings) }} -
- - - -{% endfor %} diff --git a/erpnext/accounts/print_format/sales_invoice_print_format/sales_invoice_print_format.json b/erpnext/accounts/print_format/sales_invoice_print_format/sales_invoice_print_format.json deleted file mode 100644 index 39f299ea206..00000000000 --- a/erpnext/accounts/print_format/sales_invoice_print_format/sales_invoice_print_format.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "absolute_value": 0, - "align_labels_right": 0, - "creation": "2025-08-28 04:03:36.284420", - "custom_format": 0, - "default_print_language": "en", - "disabled": 0, - "doc_type": "Sales Invoice", - "docstatus": 0, - "doctype": "Print Format", - "font_size": 14, - "idx": 0, - "line_breaks": 0, - "margin_bottom": 15.0, - "margin_left": 15.0, - "margin_right": 15.0, - "margin_top": 15.0, - "modified": "2025-10-08 22:18:52.241069", - "modified_by": "Administrator", - "module": "Accounts", - "name": "Sales Invoice Print Format", - "owner": "Administrator", - "page_number": "Hide", - "pdf_generator": "wkhtmltopdf", - "print_format_builder": 0, - "print_format_builder_beta": 0, - "print_format_for": "DocType", - "print_format_type": "Jinja", - "raw_printing": 0, - "show_section_headings": 0, - "standard": "Yes" -} diff --git a/erpnext/accounts/print_format/print_format_sales_invoice/__init__.py b/erpnext/accounts/print_format/sales_invoice_standard/__init__.py similarity index 100% rename from erpnext/accounts/print_format/print_format_sales_invoice/__init__.py rename to erpnext/accounts/print_format/sales_invoice_standard/__init__.py diff --git a/erpnext/accounts/print_format/sales_invoice_standard/sales_invoice_standard.json b/erpnext/accounts/print_format/sales_invoice_standard/sales_invoice_standard.json new file mode 100644 index 00000000000..b9feabd9f73 --- /dev/null +++ b/erpnext/accounts/print_format/sales_invoice_standard/sales_invoice_standard.json @@ -0,0 +1,33 @@ +{ + "absolute_value": 0, + "align_labels_right": 0, + "creation": "2025-10-10 02:08:36.763108", + "custom_format": 1, + "default_print_language": "en", + "disabled": 0, + "doc_type": "Sales Invoice", + "docstatus": 0, + "doctype": "Print Format", + "font_size": 14, + "html": "{%- macro add_header(page_num, max_pages, doc, letter_head, no_letterhead, footer, print_settings=None, print_heading_template=None) -%}\n\t{% if letter_head and not no_letterhead %}\n\t\t
{{ letter_head }}
\n\t{% endif %}\n\t{% if print_heading_template %}\n\t\t{{ frappe.render_template(print_heading_template, {\"doc\":doc}) }}\n\t{% endif %}\n{%- endmacro -%}\n\n{% for page in layout %}\n
\n\t
\n\t\t{{ add_header(loop.index, layout|len, doc, letter_head, no_letterhead, footer, print_settings) }}\n\t
\n\t{%- if doc.meta.is_submittable and doc.docstatus==2-%}\n\t\t
\n\t\t\t

{{ _(\"CANCELLED\") }}

\n\t\t
\n\t{%- endif -%}\n\t{%- if doc.meta.is_submittable and doc.docstatus==0 and (print_settings==None or print_settings.add_draft_heading) -%}\n\t\t
\n\t\t\t

{{ _(\"DRAFT\") }}

\n\t\t
\n\t{%- endif -%}\n\n\t\n\t
\n\t\t\n\t\t\t\n\t\t\t\t\n\t\t\t\t\n\t\t\t\n\t\t\t\n\t\t\t\t\n\t\t\t\t\n\t\t\t\n\t\t\t\n\t\t\t\t\n\t\t\t\t\n\t\t\t\n\t\t
\n\t\t\t\t\t{{ _(\"Customer Name\") }}: {{doc.customer_name }}\n\t\t\t\t\n\t\t\t\t\t{{ _(\"Payment Due Date\") }}: {{\n\t\t\t\t\tfrappe.utils.format_date(doc.due_date) }}\n\t\t\t\t
{{ _(\"Invoice Number\") }}: {{ doc.name }}\n\t\t\t\t\t{{ _(\"Invoice Date\") }}: {{\n\t\t\t\t\tfrappe.utils.format_date(doc.posting_date) }}\n\t\t\t\t
{{ _(\"Bill From\") }}:
\n\t\t\t\t\t{% if doc.customer_address %}\n\t\t\t\t\t\t{% set customer_address = frappe.get_doc(\"Address\", doc.customer_address) %}\n\t\t\t\t\t\t{{ doc.customer_name }}
\n\t\t\t\t\t\t{{ customer_address.address_line1 or \"\" }}
\n\t\t\t\t\t\t{% if customer_address.address_line2 %}{{ customer_address.address_line2 }}
{% endif %}\n\t\t\t\t\t\t{{ customer_address.city or \"\" }} {{ customer_address.state or \"\" }} {{ customer_address.pincode or \"\" }} {{ customer_address.country or \"\" }}
\n\t\t\t\t\t{% endif %}\n\t\t\t\t
{{ _(\"Bill To\") }}:
\n\t\t\t\t\t{% if doc.company_address %}\n\t\t\t\t\t\t{% set company_address_display = frappe.get_doc(\"Address\", doc.company_address) %}\n\t\t\t\t\t\t{{ doc.company }}
\n\t\t\t\t\t\t{{ company_address_display.address_line1 or \"\" }}
\n\t\t\t\t\t\t{% if company_address_display.address_line2 %}{{ company_address_display.address_line2 }}
{% endif %}\n\t\t\t\t\t\t{{ company_address_display.city or \"\" }} {{ company_address_display.state or \"\" }} {{ company_address_display.pincode or \"\" }} {{ company_address_display.country or \"\" }}
\n\t\t\t\t\t{% endif %}\n\t\t\t\t
\n\n\t\t\n\t\t{% set item_naming_by = frappe.db.get_single_value(\"Stock Settings\", \"item_naming_by\") %}\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\t\t\t\t\t{% if item_naming_by != \"Item Code\" %}\n\t\t\t\t\t\t\n\t\t\t\t\t{% endif %}\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\t\t\t\n\t\t\t\t{% for item in doc.items %}\n\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t{% if item_naming_by != \"Item Code\" %}\n\t\t\t\t\t\t\n\t\t\t\t\t{% endif %}\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\t{% endfor %}\n\t\t\t\n\t\t
{{ _(\"No\") }}{{ _(\"Item\") }}{{ _(\"Item Code\") }}{{ _(\"Quantity\") }}{{ _(\"Rate\") }}{{ _(\"Amount\") }}
{{ loop.index }}{{ item.item_name }}{{ item.item_code }}{{ item.get_formatted(\"qty\", 0) }} {{ item.uom }}{{ item.get_formatted(\"net_rate\", doc) }}\n\t\t\t\t\t\t{{ item.get_formatted(\"net_amount\", doc) }}\n\t\t\t\t\t
\n\n\t\t\n\t\t\n\t\t\t\n\t\t\t\n\t\t\t\n\t\t
\n\t\t\t\t

{{ _(\"Total in words\") }}

\n\t\t\t\t
{{ doc.in_words }}
\n\t\t\t
\n\t\t\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\n\t\t\t\t\t\n\t\t\t\t\t{%- if doc.apply_discount_on == \"Net Total\" -%}\n\t\t\t\t\t\t\n\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{%- endif -%}\n\t\t\t\t\t{%- for tax in doc.taxes -%}\n\t\t\t\t\t\t{%- if (tax.tax_amount or print_settings.print_taxes_with_zero_amount) and (not tax.included_in_print_rate or doc.flags.show_inclusive_tax_in_print) -%}\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t{%- endif -%}\n\t\t\t\t\t{%- endfor -%}\n\t\t\t\t\t{%- if doc.apply_discount_on == \"Grand Total\" -%}\n\t\t\t\t\t\t\n\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{%- endif -%}\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\n\t\t\t\t
{{ _(\"Sub Total:\") }}
{{ doc.get_formatted(\"total\", doc) }}
\n\t\t\t\t\t\t\t\t
{{ _(\"Discount\") }} ({{ doc.additional_discount_percentage }}%):\n\t\t\t\t\t\t\t
{{ doc.get_formatted(\"discount_amount\", doc) }}
{{ tax.get_formatted(\"description\") }} ({{ tax.get_formatted(\"rate\") }}%):
{{ tax.get_formatted(\"tax_amount\") }}
\n\t\t\t\t\t\t\t\t
{{ _(\"Discount\") }} ({{ doc.additional_discount_percentage }}%):\n\t\t\t\t\t\t\t
{{ doc.get_formatted(\"discount_amount\", doc) }}
{{ _(\"Grand Total:\") }}{{ doc.get_formatted(\"grand_total\", doc) }}
\n\t\t\t
\n\n\t\t\n\t\t
\n\t\t\t{% if doc.terms %}\n\t\t\t
\n\t\t\t\t
{{ _(\"Terms and Conditions\") }}
\n\t\t\t\t{{ doc.terms}}\n\t\t\t
\n\t\t\t{% endif %}\n\t
\n
\n{% endfor %}\n", + "idx": 0, + "line_breaks": 0, + "margin_bottom": 15.0, + "margin_left": 15.0, + "margin_right": 15.0, + "margin_top": 15.0, + "modified": "2025-10-10 12:56:58.584363", + "modified_by": "Administrator", + "module": "Accounts", + "name": "Sales Invoice Standard", + "owner": "Administrator", + "page_number": "Hide", + "pdf_generator": "wkhtmltopdf", + "print_format_builder": 0, + "print_format_builder_beta": 0, + "print_format_for": "DocType", + "print_format_type": "Jinja", + "raw_printing": 0, + "show_section_headings": 0, + "standard": "Yes" +} diff --git a/erpnext/accounts/print_format/sales_invoice_print_format/__init__.py b/erpnext/accounts/print_format/sales_invoice_with_item_image/__init__.py similarity index 100% rename from erpnext/accounts/print_format/sales_invoice_print_format/__init__.py rename to erpnext/accounts/print_format/sales_invoice_with_item_image/__init__.py diff --git a/erpnext/accounts/print_format/sales_invoice_with_item_image/sales_invoice_with_item_image.json b/erpnext/accounts/print_format/sales_invoice_with_item_image/sales_invoice_with_item_image.json new file mode 100644 index 00000000000..bec00d26119 --- /dev/null +++ b/erpnext/accounts/print_format/sales_invoice_with_item_image/sales_invoice_with_item_image.json @@ -0,0 +1,33 @@ +{ + "absolute_value": 0, + "align_labels_right": 0, + "creation": "2025-10-10 02:16:45.078776", + "custom_format": 1, + "default_print_language": "en", + "disabled": 0, + "doc_type": "Sales Invoice", + "docstatus": 0, + "doctype": "Print Format", + "font_size": 14, + "html": "{%- macro add_header(page_num, max_pages, doc, letter_head, no_letterhead, footer, print_settings=None, print_heading_template=None) -%}\n\n{% if letter_head and not no_letterhead %}\n
{{ letter_head }}
\n{% endif %}\n{% if print_heading_template %}\n{{ frappe.render_template(print_heading_template, {\"doc\":doc}) }}\n{% endif %}\n{%- endmacro -%}\n\n{% for page in layout %}\n
\n\t
\n\t\t{{ add_header(loop.index, layout|len, doc, letter_head, no_letterhead, footer, print_settings) }}\n\t
\n\t{%- if doc.meta.is_submittable and doc.docstatus==2-%}\n\t\t
\n\t\t\t

{{ _(\"CANCELLED\") }}

\n\t\t
\n\t{%- endif -%}\n\t{%- if doc.meta.is_submittable and doc.docstatus==0 and (print_settings==None or print_settings.add_draft_heading) -%}\n\t\t
\n\t\t\t

{{ _(\"DRAFT\") }}

\n\t\t
\n\t{%- endif -%}\n\n\t\n\n\t
\n\t\t\n\t\t\t\n\t\t\t\t\n\n\t\t\t\t\n\t\t\t\n\t\t
\n\t\t\t\t\t
\n\t\t\t\t\t\t
Customer Name:
\n\t\t\t\t\t\t
Bill to:
\n\t\t\t\t\t
\n\t\t\t\t\t
\n\t\t\t\t\t\t
{{ doc.customer_name }}
\n\t\t\t\t\t\t
\n\t\t\t\t\t\t\t{% if doc.customer_address %}\n\t\t\t\t\t\t\t\t{% set customer_address = frappe.get_doc(\"Address\", doc.customer_address) %}\n\t\t\t\t\t\t\t\t{{ customer_address.address_line1 or \"\" }}
\n\t\t\t\t\t\t\t\t{% if customer_address.address_line2 %}{{ customer_address.address_line2 }}
{% endif %}\n\t\t\t\t\t\t\t\t{{ customer_address.city or \"\" }} {{ customer_address.state or \"\" }} {{ customer_address.pincode or \"\" }} {{ customer_address.country or \"\" }}
\n\t\t\t\t\t\t\t{% endif %}\n\t\t\t\t\t\t
\n\n\t\t\t\t\t
\n\t\t\t\t
\n\t\t\t\t\t
\n\t\t\t\t\t\t
Invoice Number:
\n\t\t\t\t\t
\n\t\t\t\t\t
\n\t\t\t\t\t\t
{{ doc.name }}
\n\t\t\t\t\t
\n\t\t\t\t\t
\n\t\t\t\t\t\t
Invoice Date:
\n\t\t\t\t\t
\n\t\t\t\t\t
\n\t\t\t\t\t\t
{{ frappe.utils.format_date(doc.posting_date) }}
\n\t\t\t\t\t
\n\t\t\t\t\t
\n\t\t\t\t\t\t
Payment Due Date:
\n\t\t\t\t\t
\n\t\t\t\t\t
\n\t\t\t\t\t\t
{{ frappe.utils.format_date(doc.due_date) }}
\n\t\t\t\t\t
\n\t\t\t\t
\n\n\t\t\n\t\t{% set item_naming_by = frappe.db.get_single_value(\"Stock Settings\", \"item_naming_by\") %}\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\t\t\t\t\t{% if item_naming_by != \"Item Code\" %}\n\t\t\t\t\t\t\n\t\t\t\t\t{% endif %}\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\t\t\t\n\t\t\t\t{% for item in doc.items %}\n\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t{% if item_naming_by != \"Item Code\" %}\n\t\t\t\t\t\t\n\t\t\t\t\t{% endif %}\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\t{% endfor %}\n\t\t\t\n\t\t
{{ _(\"No\") }}{{ _(\"Item\") }}{{ _(\"Item Code\") }}{{ _(\"Quantity\") }}{{ _(\"Rate\") }}{{ _(\"Amount\") }}
{{ loop.index }}\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t{% if item.image %}\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t{% endif %}\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t{{ item.item_name }}\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\t\t\t\n\t\t\t\t\t\t\t\t
\n\t\t\t\t\t
{{ item.item_code }}{{ item.get_formatted(\"qty\", 0) }} {{ item.uom }}{{ item.get_formatted(\"net_rate\", doc) }}{{ item.get_formatted(\"net_amount\", doc) }}
\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\t\t\t\t\n\n\t\t\t\t{%- if doc.apply_discount_on == \"Net Total\" -%}\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\n\t\t\t\t{%- endif -%}\n\t\t\t\t{%- for tax in doc.taxes -%}\n\t\t\t\t\t{%- if (tax.tax_amount or print_settings.print_taxes_with_zero_amount) and (not tax.included_in_print_rate or doc.flags.show_inclusive_tax_in_print) -%}\n\t\t\t\t\t\t\n\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{%- endif -%}\n\t\t\t\t{%- endfor -%}\n\t\t\t\t{%- if doc.apply_discount_on == \"Grand Total\" -%}\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\n\t\t\t\t{%- endif -%}\n\t\t\t
{{ _(\"Sub Total:\") }}{{ doc.get_formatted(\"total\", doc) }}
\n\t\t\t\t\t\t\t{{ _(\"Discount\") }} ({{ doc.additional_discount_percentage }}%):\n\t\t\t\t\t\t{{ doc.get_formatted(\"discount_amount\", doc) }}
{{ tax.get_formatted(\"description\") }} ({{ tax.get_formatted(\"rate\") }}%):{{ tax.get_formatted(\"tax_amount\") }}
\n\t\t\t\t\t\t\t{{ _(\"Discount\") }} ({{ doc.additional_discount_percentage }}%):\n\t\t\t\t\t\t{{ doc.get_formatted(\"discount_amount\", doc) }}
\n\t\t
\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\t\t\t\t\t\n\t\t\t\t\n\t\t\t
\n\t\t\t\t\t\t
\n\t\t\t\t\t\t\t {{ _(\"In Words: \") }}{{ doc.in_words }}\n\t\t\t\t\t\t
\n\t\t\t\t\t
{{ _(\"Grand Total:\") }}\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t{{ doc.get_formatted(\"grand_total\", doc) }}\n\t\t\t\t\t\t\n\t\t\t\t\t
\n\t\t
\n\n\n\t\t\n\t\t{% if doc.terms %}\n\t\t
\n\t\t\t
{{ _(\"Terms and Conditions\") }}
\n\t\t\t{{ doc.terms}}\n\t\t
\n\t\t{% endif %}\n\t
\n
\n{% endfor %}\n", + "idx": 0, + "line_breaks": 0, + "margin_bottom": 15.0, + "margin_left": 15.0, + "margin_right": 15.0, + "margin_top": 15.0, + "modified": "2025-10-10 02:16:45.078776", + "modified_by": "Administrator", + "module": "Accounts", + "name": "Sales Invoice with Item Image", + "owner": "Administrator", + "page_number": "Hide", + "pdf_generator": "wkhtmltopdf", + "print_format_builder": 0, + "print_format_builder_beta": 0, + "print_format_for": "DocType", + "print_format_type": "Jinja", + "raw_printing": 0, + "show_section_headings": 0, + "standard": "Yes" +}