mirror of
https://github.com/frappe/erpnext.git
synced 2026-05-16 11:39:18 +00:00
34 lines
12 KiB
JSON
34 lines
12 KiB
JSON
{
|
|
"absolute_value": 0,
|
|
"align_labels_right": 0,
|
|
"creation": "2026-03-18 11:47:51.934541",
|
|
"custom_format": 1,
|
|
"default_print_language": "en",
|
|
"disabled": 0,
|
|
"doc_type": "Quotation",
|
|
"docstatus": 0,
|
|
"doctype": "Print Format",
|
|
"font_size": 14,
|
|
"html": "\n\n{%- 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<div class=\"letter-head\">{{ letter_head }}</div>\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<div class=\"page-break invoice-wrapper\">\n\t<div {% if print_settings.repeat_header_footer %} id=\"header-html\" class=\"hidden-pdf\" {% endif %}>\n\t\t{{ add_header(loop.index, layout|len, doc, letter_head, no_letterhead, footer, print_settings) }}\n\t</div>\n\t{%- if doc.meta.is_submittable and doc.docstatus==2-%}\n\t\t<div class=\"text-center\" document-status=\"cancelled\">\n\t\t\t<h4 style=\"margin-top: 20px;\">{{ _(\"CANCELLED\") }}</h4>\n\t\t</div>\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<div class=\"text-center\" document-status=\"draft\">\n\t\t\t<h4 style=\"margin-top: 20px !important;\">{{ _(\"DRAFT\") }}</h4>\n\t\t</div>\n\t{%- endif -%}\n\n\t<style>\n\t\t.letter-head {\n\t\t\tmargin-top: 12px !important;\n\t\t}\n\t\t.invoice-wrapper {\n\t\t\tfont-family: \"Inter\", sans-serif;\n\t\t\tcolor: var(--black-overlay-700);\n\t\t}\n\n\t\t.print-format-body {\n\t\t\tpadding: 30px 12px 12px 12px !important;\n\t\t}\n\n\t\tbody {\n\t\t\tmargin-bottom: 0mm !important;\n\t\t\tpadding: 0px !important;\n\t\t}\n\n\t\ttable.info-table,\n\t\ttable.items-table,\n\t\ttable.tax-table {\n\t\t\tborder-collapse: separate;\n\t\t\tborder-spacing: 0;\n\t\t\tborder: 1px solid #ededed;\n\t\t\tborder-radius: 10px;\n\t\t\toverflow: hidden;\n\t\t}\n\n\t\ttable.info-table td {\n\t\t\tborder-bottom: 1px solid #ededed;\n\t\t\tpadding: 8px 10px !important;\n\t\t}\n\t\ttable.items-table td,\n\t\ttable.tax-table td {\n\t\t\tborder-bottom: 1px solid #ededed;\n\t\t\tpadding: 8px;\n\t\t}\n\n\t\ttable.info-table td:not(:first-of-type),\n\t\ttable.items-table td:not(:first-of-type),\n\t\ttable.tax-table td:not(:first-of-type) {\n\t\t\tborder-left: 1px solid #ededed;\n\t\t}\n\n\t\ttable.info-table tbody tr:last-of-type td,\n\t\ttable.items-table tbody tr:last-of-type td,\n\t\ttable.tax-table tbody tr:last-of-type td {\n\t\t\tborder-bottom: none;\n\t\t}\n\n\t\tthead.table-header {\n\t\t\tbackground: #f8f8f8;\n\t\t}\n\t\tthead.table-header td {\n\t\t\tcolor: #7c7c7c;\n\t\t}\n\n\t\t.text-center {\n\t\t\ttext-align: center;\n\t\t}\n\t\t.text-left {\n\t\t\ttext-align: left;\n\t\t}\n\t\t.text-right {\n\t\t\ttext-align: right;\n\t\t}\n\t\t.text-muted {\n\t\t\tcolor: #7c7c7c;\n\t\t}\n\t\t.text-dark {\n\t\t\tcolor: #525252;\n\t\t}\n\t\t.text-bold {\n\t\t\tfont-weight: bold;\n\t\t}\n\t\t.small-text {\n\t\t\tcolor: #666;\n\t\t}\n\n\t\t.mt-10 {\n\t\t\tmargin-top: 10px;\n\t\t}\n\t\t.mt-15 {\n\t\t\tmargin-top: 15px;\n\t\t}\n\t\t.mt-20 {\n\t\t\tmargin-top: 20px;\n\t\t}\n\t\t.mt-40 {\n\t\t\tmargin-top: 40px;\n\t\t}\n\t\t.mt-80 {\n\t\t\tmargin-top: 80px;\n\t\t}\n\t\t.mb-20 {\n\t\t\tmargin-bottom: 20px;\n\t\t}\n\t\t.pb-8 {\n\t\t\tpadding-bottom: 8px;\n\t\t}\n\t\t.amount-width {\n\t\t\twidth: 110px;\n\t\t}\n\n\t\t.totals-table {\n\t\t\tborder-radius: 5px;\n\t\t\twidth: 100%;\n\t\t}\n\t\t.totals-table td {\n\t\t\tpadding: 4px 8px;\n\t\t}\n\t\t.totals-table tr {\n\t\t\tborder-bottom: 1px solid #ededed;\n\t\t\tposition: relative;\n\t\t}\n\t\t.totals-table tr td {\n\t\t\tposition: relative;\n\t\t}\n\t\t.totals-table tr td div {\n\t\t\twidth: 12%;\n\t\t\theight: 14px;\n\t\t\tbackground-color: white;\n\t\t\tposition: absolute;\n\t\t\tbottom: -6px;\n\t\t\tleft: 0%;\n\t\t\tcolor: white;\n\t\t}\n\t\t.totals-table tr:last-child {\n\t\t\tborder-bottom: none;\n\t\t}\n\t\t.totals-table .grand-total td {\n\t\t\tpadding: 6px 8px;\n\t\t\tfont-weight: bold;\n\t\t}\n\n\t\t.words-box {\n\t\t\tbackground: #f8f8f8;\n\t\t\tborder-radius: 8px;\n\t\t\tpadding: 8px;\n\t\t\tline-height: 21px;\n\t\t\tletter-spacing: 0.21px;\n\t\t\tfont-size: small;\n\t\t}\n\n\t\t.info-card {\n\t\t\tcolor: #7c7c7c;\n\t\t}\n\n\t\t.title {\n\t\t\tcolor: #7c7c7c !important;\n\t\t}\n\n\t\t.heading {\n\t\t\tcolor: #525252 !important;\n\t\t\tfont-weight: 300;\n\t\t}\n\n\t\t.print-format {\n\t\t\tcolor: #171717;\n\t\t\tfont-size: 14px;\n\t\t\tfont-style: normal;\n\t\t\tfont-weight: 420;\n\t\t\tline-height: 21px;\n\t\t\tpadding: 0px;\n\t\t\tletter-spacing: 0.14px;\n\t\t\tmargin-left: 0mm !important;\n\t\t\tmargin-right: 0mm !important;\n\t\t}\n\t\t.letter-head-footer {\n\t\t\tmargin-top: 0px !important;\n\t\t}\n\t\t.print-heading {\n\t\t\tmargin-top: 0px !important;\n\t\t\tmargin-bottom: 0px !important;\n\t\t\tpadding-bottom: 0px !important;\n\t\t}\n\t</style>\n\t<div class=\"print-format-body\">\n\t\t<table class=\"info-table mb-20\" style=\"width: 100%\">\n\t\t\t<tr>\n\t\t\t\t<td style=\"width: 50%\">\n\t\t\t\t\t<span class=\"heading\">{{ _(\"Party Name\") }}:</span> {{doc.party_name }}\n\t\t\t\t</td>\n\t\t\t\t<td style=\"width: 50%\">\n\t\t\t\t\t<span class=\"heading\">{{ _(\"Valid Till\") }}:</span> {{\n\t\t\t\t\tfrappe.utils.format_date(doc.valid_till) }}\n\t\t\t\t</td>\n\t\t\t</tr> \n\t\t\t<tr>\n\t\t\t\t<td><span class=\"heading\">{{ _(\"Quotation\") }}:</span> {{ doc.name }}</td>\n\t\t\t\t<td>\n\t\t\t\t\t<span class=\"heading\">{{ _(\"Posting Date\") }}:</span> {{\n\t\t\t\t\tfrappe.utils.format_date(doc.transaction_date) }}\n\t\t\t\t</td>\n\t\t\t</tr>\n\t\t\t<tr>\n\t\t\t\t<td><span class=\"heading\">{{ _(\"Bill From\") }}:</span><br />\n\t\t\t\t\t{% if doc.company_address %}\n {% set company_address = frappe.db.get_value(\"Address\", doc.company_address, [\"address_line1\", \"address_line2\", \"city\", \"state\", \"pincode\", \"country\"], as_dict=True) %}\n {{ doc.company }}<br>\n {{ company_address.get(\"address_line1\") or \"\" }}<br>\n {% if company_address.get(\"address_line2\") %}{{ company_address.get(\"address_line2\") }}<br>{% endif %}\n {{ company_address.get(\"city\") or \"\" }}, {{ company_address.get(\"state\") or \"\" }} {{ company_address.get(\"pincode\") or \"\" }}, {{ company_address.get(\"country\") or \"\" }}<br>\n {% endif %}\n\t\t\t\t</td>\n\t\t\t\t<td><span class=\"heading\">{{ _(\"Bill To\") }}:</span><br />\n\t\t\t\t {% if doc.customer_address %}\n\t\t\t\t\t\t{% set customer_address = frappe.db.get_value(\"Address\", doc.customer_address, [\"address_line1\", \"address_line2\", \"city\", \"state\", \"pincode\", \"country\"], as_dict=True) %}\n {{ doc.customer_name }}<br>\n\t\t\t\t\t\t{{ customer_address.address_line1 or \"\" }}<br>\n\t\t\t\t\t\t{% if customer_address.address_line2 %}{{ customer_address.address_line2 }}<br>{% endif %}\n\t\t\t\t\t\t{{ customer_address.city or \"\" }} {{ customer_address.state or \"\" }} {{ customer_address.pincode or \"\" }} {{ customer_address.country or \"\" }}<br>\n\t\t\t\t\t{% endif %}\n\t\t\t\t</td>\n\t\t\t</tr>\n\t\t</table>\n\n\t\t<!-- Items Table -->\n\t\t{% set item_naming_by = frappe.db.get_single_value(\"Stock Settings\", \"item_naming_by\") %}\n\t\t<table class=\"items-table mt-15\" style=\"width: 100%\">\n\t\t\t<thead class=\"table-header\">\n\t\t\t\t<tr>\n\t\t\t\t\t<td class=\"text-center\">{{ _(\"No\") }}</td>\n\t\t\t\t\t<td class=\"text-left\">{{ _(\"Item\") }}</td>\n\t\t\t\t\t{% if item_naming_by != \"Item Code\" %}\n\t\t\t\t\t\t<td class=\"text-left\">{{ _(\"Item Code\") }}</td>\n\t\t\t\t\t{% endif %}\n\t\t\t\t\t<td class=\"text-right\">{{ _(\"Quantity\") }}</td>\n\t\t\t\t\t<td class=\"text-right\">{{ _(\"Rate\") }}</td>\n\t\t\t\t\t<td class=\"text-right\">{{ _(\"Amount\") }}</td>\n\t\t\t\t</tr>\n\t\t\t</thead>\n\t\t\t<tbody>\n\t\t\t\t{% for item in doc.items %}\n\t\t\t\t<tr>\n\t\t\t\t\t<td class=\"text-center text-dark\">{{ loop.index }}</td>\n\t\t\t\t\t<td>{{ item.item_name }}</td>\n\t\t\t\t\t{% if item_naming_by != \"Item Code\" %}\n\t\t\t\t\t\t<td class=\"text-left\">{{ item.item_code }}</td>\n\t\t\t\t\t{% endif %}\n\t\t\t\t\t<td class=\"text-right text-dark\">{{ item.get_formatted(\"qty\", 0) }} {{ item.uom }}</td>\n\t\t\t\t\t<td class=\"text-right text-dark\">{{ item.get_formatted(\"net_rate\", doc) }}</td>\n\t\t\t\t\t<td class=\"text-right\" style=\"color: #171717\">\n\t\t\t\t\t\t{{ item.get_formatted(\"net_amount\", doc) }}\n\t\t\t\t\t</td>\n\t\t\t\t</tr>\n\t\t\t\t{% endfor %}\n\t\t\t</tbody>\n\t\t</table>\n\n\t\t<!-- Totals Section -->\n\t\t<table style=\"width:100%; margin-top: 15px\">\n\t\t\t<td style=\"vertical-align: bottom !important; width: 60%;\">\n\t\t\t\t<p class=\"title\">{{ _(\"Total in words\") }}</p>\n\t\t\t\t<div class=\"words-box text-uppercase\">{{ doc.in_words }}</div>\n\t\t\t</td>\n\t\t\t<td>\n\t\t\t\t \n\t\t\t</td>\n\t\t\t<td style=\"width: 38%;\">\n\t\t\t\t<table class=\"totals-table\">\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td class=\"text-right text-muted\"><div></div>{{ _(\"Sub Total:\") }}</td>\n\t\t\t\t\t\t<td class=\"text-right amount-width\">{{ doc.get_formatted(\"total\", doc) }}</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t{%- if doc.apply_discount_on == \"Net Total\" -%}\n\t\t\t\t\t\t<tr>\n\t\t\t\t\t\t\t<td class=\"text-right text-muted\">\n\t\t\t\t\t\t\t\t<div></div>{{ _(\"Discount\") }} ({{ doc.additional_discount_percentage }}%):\n\t\t\t\t\t\t\t</td>\n\t\t\t\t\t\t\t<td class=\"text-right amount-width\">{{ doc.get_formatted(\"discount_amount\", doc) }}</td>\n\t\t\t\t\t\t</tr>\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<tr>\n\t\t\t\t\t\t\t\t<td class=\"text-right text-muted\"><div></div>{{ tax.get_formatted(\"description\") }} ({{ tax.get_formatted(\"rate\") }}%):</td>\n\t\t\t\t\t\t\t\t<td class=\"text-right amount-width\">{{ tax.get_formatted(\"tax_amount\") }}</td>\n\t\t\t\t\t\t\t</tr>\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<tr>\n\t\t\t\t\t\t\t<td class=\"text-right text-muted\">\n\t\t\t\t\t\t\t\t<div></div>{{ _(\"Discount\") }} ({{ doc.additional_discount_percentage }}%):\n\t\t\t\t\t\t\t</td>\n\t\t\t\t\t\t\t<td class=\"text-right amount-width\">{{ doc.get_formatted(\"discount_amount\", doc) }}</td>\n\t\t\t\t\t\t</tr>\n\t\t\t\t\t{%- endif -%}\n\t\t\t\t\t<tr class=\"grand-total\">\n\t\t\t\t\t\t<td class=\"text-right\">{{ _(\"Grand Total:\") }}</td>\n\t\t\t\t\t\t<td class=\"text-right amount-width\">{{ doc.get_formatted(\"grand_total\", doc) }}</td>\n\t\t\t\t\t</tr>\n\t\t\t\t</table>\n\t\t\t</td>\n\t\t</table>\n\n\t\t<!-- Terms -->\n\t\t<div class=\"terms-section\">\n\t\t\t{% if doc.terms %}\n\t\t\t<div class=\"info-card mt-40\">\n\t\t\t\t<div>{{ _(\"Terms and Conditions\") }}</div>\n\t\t\t\t{{ doc.terms}}\n\t\t\t</div>\n\t\t\t{% endif %}\n\t\t</div>\n\t</div>\n</div>\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": "2026-03-23 16:14:39.728914",
|
|
"modified_by": "Administrator",
|
|
"module": "Selling",
|
|
"name": "Quotation 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"
|
|
}
|