Invoice print format updated and Sales Order print format added.
This commit is contained in:
@@ -1,5 +1,5 @@
|
||||
<style>
|
||||
/* 💡 Reserve space in PRINT/PDF so table does not overlap window address */
|
||||
/* Reserve space in PRINT/PDF so table does not overlap window address */
|
||||
@media print {
|
||||
.window-address-space {
|
||||
padding-top: 1in;
|
||||
@@ -24,7 +24,7 @@
|
||||
</p>
|
||||
</td>
|
||||
<td style="text-align: right; font-family: Helvetica, Arial, sans-serif; font-size: 14px;">
|
||||
<strong>Invoice</strong><br>
|
||||
<strong>Invoice </strong>
|
||||
<span>{{ doc.name }}</span><br>
|
||||
Date: {{ frappe.utils.formatdate(doc.posting_date, "MM-dd-yyyy") }}
|
||||
</td>
|
||||
@@ -89,7 +89,7 @@
|
||||
|
||||
|
||||
<!-- Items Table -->
|
||||
<table style="width: 100%; border-collapse: collapse; margin-bottom: 10px;">
|
||||
<table style="width: 100%; border-collapse: collapse; margin-bottom:0;">
|
||||
<thead>
|
||||
<tr style="background-color: #f5f5f5;">
|
||||
<th style="border: 1px solid #ccc; padding: 6px;">Item</th>
|
||||
@@ -112,29 +112,59 @@
|
||||
</tbody>
|
||||
</table>
|
||||
|
||||
<div style="font-family: Helvetica, Arial, sans-serif; font-size: 15px; color: #333; margin-top: 10px; width: 40%; margin-left: auto;">
|
||||
<p style="display:flex; justify-content:space-between;">
|
||||
<strong>Subtotal:</strong><span>{{ doc.total }}</span>
|
||||
</p>
|
||||
|
||||
{% for tax in doc.taxes %}
|
||||
<p style="display:flex; justify-content:space-between;">
|
||||
<strong>{{ tax.account_head }} ({{ tax.rate }}%):</strong>
|
||||
<span>{{ tax.tax_amount }}</span>
|
||||
</p>
|
||||
{% endfor %}
|
||||
|
||||
<p style="display:flex; justify-content:space-between;">
|
||||
<strong>Total:</strong><span>{{ doc.grand_total }}</span>
|
||||
</p>
|
||||
<p style="display:flex; justify-content:space-between;">
|
||||
<strong>Paid:</strong><span>{{ doc.total_advance }}</span>
|
||||
</p>
|
||||
<p style="display:flex; justify-content:space-between;">
|
||||
<strong>Balance Due:</strong><span>{{ doc.outstanding_amount }}</span>
|
||||
</p>
|
||||
</div>
|
||||
<!-- Totals (boxed, tight to items table) -->
|
||||
<table style="width:40%; margin-left:auto; border-collapse:collapse; font-size:14px; margin-top:0;">
|
||||
<tbody>
|
||||
|
||||
<tr>
|
||||
<td style="width:220px; padding:6px 8px; text-align:right;">
|
||||
<strong>Subtotal</strong>
|
||||
</td>
|
||||
<td style="padding:6px 12px; text-align:right; border:1px solid #ccc;">
|
||||
{{ doc.total }}
|
||||
</td>
|
||||
</tr>
|
||||
|
||||
{% for tax in doc.taxes %}
|
||||
<tr>
|
||||
<td style="padding:6px 8px; text-align:right;">
|
||||
<strong>{{ tax.account_head }} ({{ tax.rate }}%)</strong>
|
||||
</td>
|
||||
<td style="padding:6px 12px; text-align:right; border:1px solid #ccc;">
|
||||
{{ tax.tax_amount }}
|
||||
</td>
|
||||
</tr>
|
||||
{% endfor %}
|
||||
|
||||
<tr>
|
||||
<td style="padding:6px 8px; text-align:right;">
|
||||
<strong>Total</strong>
|
||||
</td>
|
||||
<td style="padding:6px 12px; text-align:right; border:1px solid #ccc;">
|
||||
{{ doc.grand_total }}
|
||||
</td>
|
||||
</tr>
|
||||
|
||||
<tr>
|
||||
<td style="padding:6px 8px; text-align:right;">
|
||||
<strong>Paid</strong>
|
||||
</td>
|
||||
<td style="padding:6px 12px; text-align:right; border:1px solid #ccc;">
|
||||
{{ doc.total_advance }}
|
||||
</td>
|
||||
</tr>
|
||||
|
||||
<tr>
|
||||
<td style="padding:6px 8px; text-align:right;">
|
||||
<strong>Balance Due</strong>
|
||||
</td>
|
||||
<td style="padding:6px 12px; text-align:right; border:1px solid #ccc;">
|
||||
{{ doc.outstanding_amount }}
|
||||
</td>
|
||||
</tr>
|
||||
|
||||
</tbody>
|
||||
</table>
|
||||
|
||||
</div> <!-- end print space wrapper -->
|
||||
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"doctype": "Print Format",
|
||||
"name": "Sales Invoice - NS",
|
||||
"name": "NS Invoice",
|
||||
"doc_type": "Sales Invoice",
|
||||
"print_format_type": "Jinja",
|
||||
"standard": "Yes",
|
||||
|
||||
166
ns_app/print_formats/sales_invoice_ns/sales_order_ns.html
Normal file
166
ns_app/print_formats/sales_invoice_ns/sales_order_ns.html
Normal file
@@ -0,0 +1,166 @@
|
||||
<style>
|
||||
@media print {
|
||||
.window-address-space {
|
||||
padding-top: 1in;
|
||||
}
|
||||
}
|
||||
</style>
|
||||
|
||||
<div style="font-family: Helvetica, Arial, sans-serif; font-size: 12px; color: #333;">
|
||||
|
||||
{% set company_doc = frappe.get_doc("Company", company) %}
|
||||
|
||||
<!-- Header -->
|
||||
<table style="width: 100%; border-bottom: 1px solid #ccc; margin-bottom: 10px;">
|
||||
<tr>
|
||||
<td>
|
||||
<h2 style="margin: 0;"><strong>{{ company_doc.company_name }}</strong></h2>
|
||||
<p style="margin: 0; font-size: 14px;">
|
||||
1063 Chestnut Level Road, Quarryville PA 17566<br>
|
||||
{% if company_doc.address %}{{ company_doc.address }}<br>{% endif %}
|
||||
{% if company_doc.phone_no %}Phone: {{ company_doc.phone_no }}{% endif %}
|
||||
{% if company_doc.email %} | Email: {{ company_doc.email }}{% endif %}
|
||||
</p>
|
||||
</td>
|
||||
<td style="text-align: right; font-size: 14px;">
|
||||
<strong>Sales Order</strong><br>
|
||||
<span>{{ doc.name }}</span><br>
|
||||
Date: {{ frappe.utils.formatdate(doc.transaction_date, "MM-dd-yyyy") }}
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
|
||||
<!-- Delivery Date / Terms -->
|
||||
<table style="width:100%; margin-top:-4px; margin-bottom:10px;">
|
||||
<tr>
|
||||
<td style="width:60%;"></td>
|
||||
<td style="width:40%; text-align:right; font-size:15px; line-height:1.4;">
|
||||
{% if doc.delivery_date %}
|
||||
<strong>Delivery Date:</strong>
|
||||
{{ frappe.utils.formatdate(doc.delivery_date, "MM-dd-yyyy") }}<br>
|
||||
{% endif %}
|
||||
<strong>Terms:</strong> {{ doc.payment_terms_template or "Net 30" }}
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
|
||||
<!-- WINDOW ADDRESS -->
|
||||
<div style="
|
||||
position:absolute;
|
||||
top:1.5in;
|
||||
left:1.125in;
|
||||
width:4.5in;
|
||||
height:1.25in;
|
||||
font-size:15px;
|
||||
line-height:1.15em;
|
||||
overflow:hidden;
|
||||
">
|
||||
{{ doc.customer_name }}<br>
|
||||
{{ doc.address_display or doc.customer_address }}
|
||||
</div>
|
||||
|
||||
<div class="window-address-space">
|
||||
|
||||
{% if doc.custom_subscription_data or doc.custom_invoice_notes %}
|
||||
<table style="width:100%; margin-bottom:6px;">
|
||||
<tr>
|
||||
<td style="font-size:14px; line-height:1.3;">
|
||||
{% if doc.custom_subscription_data %}
|
||||
<div style="font-weight:bold;">
|
||||
{{ doc.custom_subscription_data }}
|
||||
</div>
|
||||
{% endif %}
|
||||
{% if doc.custom_invoice_notes %}
|
||||
<div style="white-space:pre-line;">
|
||||
{{ doc.custom_invoice_notes }}
|
||||
</div>
|
||||
{% endif %}
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
{% endif %}
|
||||
|
||||
<!-- Items -->
|
||||
<table style="width:100%; border-collapse:collapse; margin-bottom:0;">
|
||||
<thead>
|
||||
<tr style="background:#f5f5f5;">
|
||||
<th style="border:1px solid #ccc; padding:6px;">Item</th>
|
||||
<th style="border:1px solid #ccc; padding:6px;">Description</th>
|
||||
<th style="border:1px solid #ccc; padding:6px; text-align:right;">Qty</th>
|
||||
<th style="border:1px solid #ccc; padding:6px; text-align:right;">Rate</th>
|
||||
<th style="border:1px solid #ccc; padding:6px; text-align:right;">Amount</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
{% for row in doc.items %}
|
||||
<tr>
|
||||
<td style="border:1px solid #ccc; padding:6px; font-size:14px;">
|
||||
{{ row.item_code }}
|
||||
</td>
|
||||
<td style="border:1px solid #ccc; padding:6px; font-size:14px;">
|
||||
{{ row.item_name }}
|
||||
</td>
|
||||
<td style="border:1px solid #ccc; padding:6px; font-size:14px; text-align:right;">
|
||||
{{ row.qty }}
|
||||
</td>
|
||||
<td style="border:1px solid #ccc; padding:6px; font-size:14px; text-align:right;">
|
||||
{{ row.rate }}
|
||||
</td>
|
||||
<td style="border:1px solid #ccc; padding:6px; font-size:14px; text-align:right;">
|
||||
{{ row.amount }}
|
||||
</td>
|
||||
</tr>
|
||||
{% endfor %}
|
||||
</tbody>
|
||||
</table>
|
||||
|
||||
<!-- Totals -->
|
||||
<table style="width:73%; margin-left:auto; border-collapse:collapse; font-size:14px; margin-top:0px;">
|
||||
<tbody>
|
||||
|
||||
<tr>
|
||||
<td style="padding:6px 8px; text-align:right;">
|
||||
<strong>Subtotal</strong>
|
||||
</td>
|
||||
<td style="padding:6px 12px; text-align:right; border:1px solid #ccc;">
|
||||
{{ doc.total }}
|
||||
</td>
|
||||
</tr>
|
||||
|
||||
{% for tax in doc.taxes %}
|
||||
<tr>
|
||||
<td style="padding:6px 8px; text-align:right;">
|
||||
<strong>{{ tax.account_head }} ({{ tax.rate }}%)</strong>
|
||||
</td>
|
||||
<td style="padding:6px 12px; text-align:right; border:1px solid #ccc;">
|
||||
{{ tax.tax_amount }}
|
||||
</td>
|
||||
</tr>
|
||||
{% endfor %}
|
||||
|
||||
<tr>
|
||||
<td style="padding:6px 8px; text-align:right;">
|
||||
<strong>Total</strong>
|
||||
</td>
|
||||
<td style="padding:6px 12px; text-align:right; border:1px solid #ccc;">
|
||||
<strong>{{ doc.grand_total }}</strong>
|
||||
</td>
|
||||
</tr>
|
||||
|
||||
</tbody>
|
||||
</table>
|
||||
|
||||
|
||||
</div>
|
||||
|
||||
<!-- Footer -->
|
||||
<div style="margin-top:23px; font-size:10px; color:#777; text-align:center;">
|
||||
<p style="white-space:pre-line; margin:0;">
|
||||
This Sales Order is not an invoice.
|
||||
Pricing and availability subject to confirmation.
|
||||
|
||||
Thank you for your business.
|
||||
</p>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
@@ -0,0 +1,8 @@
|
||||
{
|
||||
"doctype": "Print Format",
|
||||
"name": "NS Sales Order",
|
||||
"doc_type": "Sales Order",
|
||||
"print_format_type": "Jinja",
|
||||
"standard": "Yes",
|
||||
"disabled": 0
|
||||
}
|
||||
@@ -40,7 +40,7 @@ frappe.ui.form.on("Customer", {
|
||||
// Defaults
|
||||
frm.set_value("territory", "United States");
|
||||
|
||||
// Add Owner fields to Quick Entry
|
||||
// Add Company fields to Quick Entry
|
||||
frm.add_custom_field({
|
||||
fieldname: "company_name",
|
||||
label: "Company Name",
|
||||
@@ -50,7 +50,7 @@ frappe.ui.form.on("Customer", {
|
||||
});
|
||||
},
|
||||
|
||||
// ZIP auto-fill (kept from previous step)
|
||||
// ZIP auto-fill
|
||||
pincode(frm) {
|
||||
if (!frm.is_quick_entry) return;
|
||||
|
||||
|
||||
Reference in New Issue
Block a user