Invoice print format updated and Sales Order print format added.
This commit is contained in:
@@ -1,5 +1,5 @@
|
|||||||
<style>
|
<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 {
|
@media print {
|
||||||
.window-address-space {
|
.window-address-space {
|
||||||
padding-top: 1in;
|
padding-top: 1in;
|
||||||
@@ -24,7 +24,7 @@
|
|||||||
</p>
|
</p>
|
||||||
</td>
|
</td>
|
||||||
<td style="text-align: right; font-family: Helvetica, Arial, sans-serif; font-size: 14px;">
|
<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>
|
<span>{{ doc.name }}</span><br>
|
||||||
Date: {{ frappe.utils.formatdate(doc.posting_date, "MM-dd-yyyy") }}
|
Date: {{ frappe.utils.formatdate(doc.posting_date, "MM-dd-yyyy") }}
|
||||||
</td>
|
</td>
|
||||||
@@ -89,7 +89,7 @@
|
|||||||
|
|
||||||
|
|
||||||
<!-- Items Table -->
|
<!-- Items Table -->
|
||||||
<table style="width: 100%; border-collapse: collapse; margin-bottom: 10px;">
|
<table style="width: 100%; border-collapse: collapse; margin-bottom:0;">
|
||||||
<thead>
|
<thead>
|
||||||
<tr style="background-color: #f5f5f5;">
|
<tr style="background-color: #f5f5f5;">
|
||||||
<th style="border: 1px solid #ccc; padding: 6px;">Item</th>
|
<th style="border: 1px solid #ccc; padding: 6px;">Item</th>
|
||||||
@@ -112,29 +112,59 @@
|
|||||||
</tbody>
|
</tbody>
|
||||||
</table>
|
</table>
|
||||||
|
|
||||||
<div style="font-family: Helvetica, Arial, sans-serif; font-size: 15px; color: #333; margin-top: 10px; width: 40%; margin-left: auto;">
|
<!-- Totals (boxed, tight to items table) -->
|
||||||
<p style="display:flex; justify-content:space-between;">
|
<table style="width:40%; margin-left:auto; border-collapse:collapse; font-size:14px; margin-top:0;">
|
||||||
<strong>Subtotal:</strong><span>{{ doc.total }}</span>
|
<tbody>
|
||||||
</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>
|
|
||||||
|
|
||||||
|
<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 -->
|
</div> <!-- end print space wrapper -->
|
||||||
|
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"doctype": "Print Format",
|
"doctype": "Print Format",
|
||||||
"name": "Sales Invoice - NS",
|
"name": "NS Invoice",
|
||||||
"doc_type": "Sales Invoice",
|
"doc_type": "Sales Invoice",
|
||||||
"print_format_type": "Jinja",
|
"print_format_type": "Jinja",
|
||||||
"standard": "Yes",
|
"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
|
// Defaults
|
||||||
frm.set_value("territory", "United States");
|
frm.set_value("territory", "United States");
|
||||||
|
|
||||||
// Add Owner fields to Quick Entry
|
// Add Company fields to Quick Entry
|
||||||
frm.add_custom_field({
|
frm.add_custom_field({
|
||||||
fieldname: "company_name",
|
fieldname: "company_name",
|
||||||
label: "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) {
|
pincode(frm) {
|
||||||
if (!frm.is_quick_entry) return;
|
if (!frm.is_quick_entry) return;
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user