New invoice print format for new envelopes.
This commit is contained in:
215
ns_app/print_formats/print_formats/double_window_invoice.j2
Normal file
215
ns_app/print_formats/print_formats/double_window_invoice.j2
Normal file
@@ -0,0 +1,215 @@
|
|||||||
|
<style>
|
||||||
|
/* 💡 Reserve space in PRINT/PDF so table does not overlap window address */
|
||||||
|
@media print {
|
||||||
|
.window-address-space {
|
||||||
|
padding-top: 1in;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</style>
|
||||||
|
|
||||||
|
<div style="font-family: Helvetica, Arial, sans-serif; font-size: 10px; color: #333;">
|
||||||
|
|
||||||
|
{% set company_doc = frappe.get_doc("Company", company) %}
|
||||||
|
|
||||||
|
<!-- Header -->
|
||||||
|
<table style="width: 100%; border-bottom: 1px solid #ccc; margin-bottom: 15px;">
|
||||||
|
<tr>
|
||||||
|
<td style="text-align: center; position: relative; left: -100px;">
|
||||||
|
<h3 style="margin: 8px 0 0 0; font-size: 15px; font-weight: bold;">
|
||||||
|
{{ company_doc.company_name }}
|
||||||
|
</h3>
|
||||||
|
|
||||||
|
<p style="
|
||||||
|
margin: 10px 0 0 0;
|
||||||
|
font-family: Helvetica, Arial, sans-serif;
|
||||||
|
font-size: 10px;
|
||||||
|
line-height: 1.4;
|
||||||
|
text-align: center;
|
||||||
|
">
|
||||||
|
1063 Chestnut Level Road<br>
|
||||||
|
Quarryville PA 17566<br>
|
||||||
|
|
||||||
|
{% 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-family: Helvetica, Arial, sans-serif;
|
||||||
|
font-size: 14px;
|
||||||
|
width: 240px;
|
||||||
|
vertical-align: top;
|
||||||
|
">
|
||||||
|
<strong>Invoice</strong>
|
||||||
|
<span>{{ doc.name }}</span><br>
|
||||||
|
|
||||||
|
<strong>Date:</strong>
|
||||||
|
{{ frappe.utils.formatdate(doc.posting_date, "MM-dd-yyyy") }}
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
</table>
|
||||||
|
<!-- Due 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-family: Helvetica, Arial, sans-serif; font-size: 15px; line-height: 1.4;">
|
||||||
|
<strong>Customer Number:</strong> {{doc.customer}}<br>
|
||||||
|
<strong>Due Date:</strong> {{ frappe.utils.formatdate(doc.due_date, "MM-dd-yyyy") }}<br>
|
||||||
|
<strong>Terms:</strong> {{ doc.payment_terms_template or "Net 30" }}<br>
|
||||||
|
<strong>**Please include invoice <br> number with check**</strong>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
</table>
|
||||||
|
|
||||||
|
|
||||||
|
<!-- WINDOW ADDRESS (9x4 envelope position) -->
|
||||||
|
<div style="
|
||||||
|
position: absolute;
|
||||||
|
top: 1.9in;
|
||||||
|
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>
|
||||||
|
|
||||||
|
<!-- PRINT SPACE WRAPPER -->
|
||||||
|
<div class="window-address-space">
|
||||||
|
|
||||||
|
|
||||||
|
{% if doc.custom_subscription_data or doc.custom_invoice_notes %}
|
||||||
|
<table style="width:100%; margin:0 0 6px 0; border-collapse:collapse;">
|
||||||
|
<tr>
|
||||||
|
<td style="font-size:14px; padding:0; line-height:1.3;">
|
||||||
|
|
||||||
|
{% if doc.custom_subscription_data %}
|
||||||
|
<div style="margin:0; padding:0; font-weight:bold;">
|
||||||
|
{{ doc.custom_subscription_data }}
|
||||||
|
</div>
|
||||||
|
{% endif %}
|
||||||
|
|
||||||
|
{% if doc.custom_invoice_notes %}
|
||||||
|
<div style="margin:0; padding:0; white-space:pre-line;">
|
||||||
|
{{ doc.custom_invoice_notes }}
|
||||||
|
</div>
|
||||||
|
{% endif %}
|
||||||
|
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
</table>
|
||||||
|
{% endif %}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<!-- Items Table -->
|
||||||
|
<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>
|
||||||
|
<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 -->
|
||||||
|
<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>
|
||||||
|
|
||||||
|
{% set balance = doc.outstanding_amount or 0 %}
|
||||||
|
|
||||||
|
{% if balance == 0 %}
|
||||||
|
{% set balance_color = "#2e7d32" %}
|
||||||
|
{% elif balance > 0 %}
|
||||||
|
{% set balance_color = "#c62828" %}
|
||||||
|
{% else %}
|
||||||
|
{% set balance_color = "#ef6c00" %}
|
||||||
|
{% endif %}
|
||||||
|
|
||||||
|
<p style="display:flex; justify-content:space-between;">
|
||||||
|
<strong style="color: {{ balance_color }} !important;">Balance Due:</strong>
|
||||||
|
<span style="color: {{ balance_color }} !important;">{{ balance }}</span>
|
||||||
|
</p>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
</div>
|
||||||
|
|
||||||
|
|
||||||
|
</div> <!-- end print space wrapper -->
|
||||||
|
|
||||||
|
<!-- Footer -->
|
||||||
|
<div style="margin-top: 23px; font-size: 10px; color: #777; text-align: center;">
|
||||||
|
<p style="white-space: pre-line; margin: 0;">
|
||||||
|
Prompt payment is always appreciated. We accept payments by check or over the phone using a debit or credit card. Automatic payment setup is also available upon request.
|
||||||
|
|
||||||
|
|
||||||
|
Invoices over 30 days may be charged a late payment fee of 1.5% per month with a minimum fee of $5.
|
||||||
|
|
||||||
|
Thanks for your business.
|
||||||
|
</p>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
{% set balance = doc.outstanding_amount or 0 %}
|
||||||
|
|
||||||
|
|
||||||
|
{% if balance == 0 %}
|
||||||
|
<div style="text-align: center; margin-top: 35px;">
|
||||||
|
<div style="
|
||||||
|
margin-top: 35px;
|
||||||
|
text-align: center;
|
||||||
|
font-size: 28px;
|
||||||
|
font-weight: bold;
|
||||||
|
color: #2e7d32;
|
||||||
|
border: 3px solid #2e7d32;
|
||||||
|
display: inline-block;
|
||||||
|
padding: 10px 40px;
|
||||||
|
transform: rotate(-5deg);
|
||||||
|
">
|
||||||
|
PAID
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
{% endif %}
|
||||||
|
|
||||||
|
</div>
|
||||||
Reference in New Issue
Block a user