mirror of
https://github.com/frappe/erpnext.git
synced 2026-05-25 16:04:46 +00:00
refactor: updated print format for general ledger (#44057)
* refactor: update General Ledger print format * Update general_ledger.html * Update general_ledger.html Removed extra spaces * refactor: use letter-spacing for titles * Update general_ledger.html Comment added back * Update general_ledger.html * refactor: adding Remarks conditions & print party_type * refactor: added Remarks column & adjusted spaces Remarks column will be printed when Show Remarks is checked. * Update general_ledger.html Removed whitespace * Update general_ledger.html Fixed by removing colspan=2 in Opening Balance. --------- Co-authored-by: ruthra kumar <ruthra@erpnext.com>
This commit is contained in:
@@ -1,82 +1,180 @@
|
|||||||
<h2 class="text-center">{%= __("Statement of Account") %}</h2>
|
<!-- Modified on 25-11-2024
|
||||||
<h4 class="text-center">
|
-->
|
||||||
{% if (filters.party_name) { %}
|
|
||||||
{%= filters.party_name %}
|
|
||||||
{% } else if (filters.party && filters.party.length) { %}
|
|
||||||
{%= filters.party %}
|
|
||||||
{% } else if (filters.account) { %}
|
|
||||||
{%= filters.account %}
|
|
||||||
{% } %}
|
|
||||||
</h4>
|
|
||||||
|
|
||||||
<h6 class="text-center">
|
<style type="text/css">
|
||||||
{% if (filters.tax_id) { %}
|
/* General styles for both screen display and print */
|
||||||
{%= __("Tax Id: ")%} {%= filters.tax_id %}
|
body, html {
|
||||||
{% } %}
|
margin-top: 10;
|
||||||
</h6>
|
padding: 0;
|
||||||
|
width: 100%;
|
||||||
|
height: auto; /* Allow content to expand */
|
||||||
|
font-family: Arial, sans-serif; /* Example font */
|
||||||
|
}
|
||||||
|
|
||||||
<h5 class="text-center">
|
/* Ensure consistent letter spacing across all media */
|
||||||
{%= frappe.datetime.str_to_user(filters.from_date) %}
|
.title-letter-spacing {
|
||||||
{%= __("to") %}
|
letter-spacing: .2rem;
|
||||||
{%= frappe.datetime.str_to_user(filters.to_date) %}
|
}
|
||||||
</h5>
|
|
||||||
<hr>
|
|
||||||
<table class="table table-bordered">
|
|
||||||
<thead>
|
|
||||||
<tr>
|
|
||||||
<th style="width: 12%">{%= __("Date") %}</th>
|
|
||||||
<th style="width: 15%">{%= __("Reference") %}</th>
|
|
||||||
<th style="width: 25%">{%= __("Remarks") %}</th>
|
|
||||||
<th style="width: 15%">{%= __("Debit") %}</th>
|
|
||||||
<th style="width: 15%">{%= __("Credit") %}</th>
|
|
||||||
<th style="width: 18%">{%= __("Balance (Dr - Cr)") %}</th>
|
|
||||||
</tr>
|
|
||||||
</thead>
|
|
||||||
<tbody>
|
|
||||||
{% for(var i=0, l=data.length; i<l; i++) { %}
|
|
||||||
<tr>
|
|
||||||
{% if(data[i].posting_date) { %}
|
|
||||||
<td>{%= frappe.datetime.str_to_user(data[i].posting_date) %}</td>
|
|
||||||
<td>{%= data[i].voucher_type %}
|
|
||||||
<br>{%= data[i].voucher_no %}
|
|
||||||
</td>
|
|
||||||
{% var longest_word = cstr(data[i].remarks).split(" ").reduce((longest, word) => word.length > longest.length ? word : longest, ""); %}
|
|
||||||
<td {% if longest_word.length > 45 %} class="overflow-wrap-anywhere" {% endif %}>
|
|
||||||
<span>
|
|
||||||
{% if(!(filters.party || filters.account)) { %}
|
|
||||||
{%= data[i].party || data[i].account %}
|
|
||||||
<br>
|
|
||||||
{% } %}
|
|
||||||
|
|
||||||
{% if(data[i].remarks) { %}
|
/* Styles specific to printing and PDF generation */
|
||||||
<br>{%= __("Remarks") %}: {%= data[i].remarks %}
|
@media print {
|
||||||
{% } else if(data[i].bill_no) { %}
|
/* Set page size and margins for printing */
|
||||||
<br>{%= __("Supplier Invoice No") %}: {%= data[i].bill_no %}
|
@page {
|
||||||
{% } %}
|
size: A4; /* Use fixed A4 page size */
|
||||||
</span>
|
margin-top: 10mm;
|
||||||
</td>
|
}
|
||||||
<td style="text-align: right">
|
|
||||||
{%= format_currency(data[i].debit, filters.presentation_currency || data[i].account_currency) %}
|
/* Force a page break before elements with the class "page-break" */
|
||||||
</td>
|
.page-break {
|
||||||
<td style="text-align: right">
|
page-break-before: always;
|
||||||
{%= format_currency(data[i].credit, filters.presentation_currency || data[i].account_currency) %}
|
margin-top: 10mm; /* Add some space after the break */
|
||||||
</td>
|
}
|
||||||
{% } else { %}
|
|
||||||
<td></td>
|
/* Ensure table headers repeat on each printed page */
|
||||||
<td></td>
|
thead {
|
||||||
<td><b>{%= frappe.format(data[i].account, {fieldtype: "Link"}) || " " %}</b></td>
|
display: table-header-group;
|
||||||
<td style="text-align: right">
|
}
|
||||||
{%= data[i].account && format_currency(data[i].debit, filters.presentation_currency || data[i].account_currency) %}
|
|
||||||
</td>
|
/* Ensure table footers repeat on each printed page */
|
||||||
<td style="text-align: right">
|
tfoot {
|
||||||
{%= data[i].account && format_currency(data[i].credit, filters.presentation_currency || data[i].account_currency) %}
|
display: table-footer-group;
|
||||||
</td>
|
}
|
||||||
{% } %}
|
|
||||||
<td style="text-align: right">
|
th, td {
|
||||||
{%= format_currency(data[i].balance, filters.presentation_currency || data[i].account_currency) %}
|
padding: 1px;
|
||||||
</td>
|
border: 1px solid black; /* Example border for clarity */
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Hide elements that should not appear in print (optional) */
|
||||||
|
.no-print {
|
||||||
|
display: none !important;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</style>
|
||||||
|
|
||||||
|
<br>
|
||||||
|
<div style="font-family:Arial">
|
||||||
|
<div>
|
||||||
|
<div class="title-letter-spacing" style="text-align:center; font-size:15px; text-decoration:underline;">
|
||||||
|
<b>
|
||||||
|
{%= __("STATEMENT OF ACCOUNTS") %}<br>
|
||||||
|
{% if (filters.party_name) { %}
|
||||||
|
<br>{%= filters.party_name %}
|
||||||
|
{% } else if (filters.party && filters.party.length) { %}
|
||||||
|
<br>{%= filters.party %}
|
||||||
|
{% } else if (filters.account) { %}
|
||||||
|
<br>{%= filters.account %}
|
||||||
|
{% } else { %}
|
||||||
|
<br>{%= __("All Parties ") %}
|
||||||
|
{% } %}
|
||||||
|
</b>
|
||||||
|
</div>
|
||||||
|
<div style="text-align:center; font-size:13px;">
|
||||||
|
<b>
|
||||||
|
{% if(filters.party_type) { %}
|
||||||
|
[ {%= filters.party_type %} ]<br>
|
||||||
|
{% } %}
|
||||||
|
{%= frappe.datetime.str_to_user(filters.from_date) %}
|
||||||
|
{%= __("to") %}
|
||||||
|
{%= frappe.datetime.str_to_user(filters.to_date) %}<br><br>
|
||||||
|
</b>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<table style="width:100%; font-size: 11px">
|
||||||
|
<thead>
|
||||||
|
<tr class="title-letter-spacing" style="text-align: center; font-weight:bold">
|
||||||
|
<td style="border: 1.5px solid black; width: 7em">DATE</td>
|
||||||
|
<td style="border: 1.5px solid black">PARTICULARS</td>
|
||||||
|
{% if(filters.show_remarks) { %}
|
||||||
|
<td style="border: 1.5px solid black">REMARKS</td>
|
||||||
|
{% } %}
|
||||||
|
<td style="border: 1.5px solid black; width: 9em">DEBIT</td>
|
||||||
|
<td style="border: 1.5px solid black; width: 9em">CREDIT</td>
|
||||||
|
<td style="border: 1.5px solid black; width: 10.2em">BALANCE</td>
|
||||||
</tr>
|
</tr>
|
||||||
{% } %}
|
</thead>
|
||||||
</tbody>
|
<tbody>
|
||||||
</table>
|
{% for(var i=0, l=data.length; i<l; i++) { %}
|
||||||
<p class="text-right text-muted">Printed On {%= frappe.datetime.str_to_user(frappe.datetime.get_datetime_as_string()) %}</p>
|
<tr style="border-bottom: 1px solid black">
|
||||||
|
{% if(data[i].posting_date) { %}
|
||||||
|
<td style="text-align: center; border: 1px dotted black">
|
||||||
|
{%= frappe.datetime.str_to_user(data[i].posting_date) %}
|
||||||
|
</td>
|
||||||
|
<td style="border-right: 1px dotted black">
|
||||||
|
{%= data[i].voucher_type %} {%= data[i].voucher_no %}
|
||||||
|
{% if(!(filters.party || filters.account)) { %}
|
||||||
|
{%= data[i].party || data[i].account %}
|
||||||
|
{% } %}<br>
|
||||||
|
{% if(data[i].bill_no) { %}
|
||||||
|
{%= __("Supplier Invoice No") %}: {%= data[i].bill_no %}
|
||||||
|
{% } %}
|
||||||
|
</td>
|
||||||
|
{% if(filters.show_remarks) { %}
|
||||||
|
<td style="border-right: 1px dotted black; font-size: 10px">
|
||||||
|
{% if(data[i].remarks != "No Remarks" && data[i].remarks != "") { %}
|
||||||
|
{%= __("Remarks") %}: {%= data[i].remarks %}<br>
|
||||||
|
{% } %}
|
||||||
|
</td>
|
||||||
|
{% } %}
|
||||||
|
<td style="text-align: right; border-right: 1px dotted black">
|
||||||
|
{% if data[i].debit != 0 %}
|
||||||
|
{%= format_currency(data[i].debit, filters.presentation_currency) %}
|
||||||
|
{% } %}
|
||||||
|
</td>
|
||||||
|
<td style="text-align: right; border-right: 1px dotted black">
|
||||||
|
{% if data[i].credit != 0 %}
|
||||||
|
{%= format_currency(data[i].credit, filters.presentation_currency) %}
|
||||||
|
{% } %}
|
||||||
|
</td>
|
||||||
|
{% } else { %}
|
||||||
|
<td style="text-align: center; border: 1px dotted black">
|
||||||
|
{% if(i == 0) { %}
|
||||||
|
{%= frappe.datetime.str_to_user(filters.from_date) %}
|
||||||
|
{% } %}
|
||||||
|
</td>
|
||||||
|
<td style="text-align: left; border-right: 1px dotted black"><b>
|
||||||
|
{% if(i == l-2) { %}
|
||||||
|
{%= "Total" %}
|
||||||
|
{% } else { %}
|
||||||
|
{% if(i == l-1) { %}
|
||||||
|
{%= "Closing [Opening + Total] " %}
|
||||||
|
{% } else { %}
|
||||||
|
{%= frappe.format(data[i].account, {fieldtype: "Link"}) || " " %}
|
||||||
|
{% } %}
|
||||||
|
{% } %}</b>
|
||||||
|
</td>
|
||||||
|
{% if(filters.show_remarks) { %} <td style="text-align: left; border-right: 1px dotted black"></td>{% } %}
|
||||||
|
<td style="text-align: right; border-right: 1px dotted black">
|
||||||
|
{% if(i != 0){ %}
|
||||||
|
{% if(i != l-1){ %}
|
||||||
|
{%= data[i].account && format_currency(data[i].debit, filters.presentation_currency) %}
|
||||||
|
{% } %}
|
||||||
|
{% } %}
|
||||||
|
</td>
|
||||||
|
<td style="text-align: right; border-right: 1px dotted black">
|
||||||
|
{% if(i != 0){ %}
|
||||||
|
{% if(i != l-1){ %}
|
||||||
|
{%= data[i].account && format_currency(data[i].credit, filters.presentation_currency) %}
|
||||||
|
{% } %}
|
||||||
|
{% } %}
|
||||||
|
</td>
|
||||||
|
{% } %}
|
||||||
|
{% if(i == l-1) { %}
|
||||||
|
<td style="text-align: right; font-weight:bold; border-right: 1px dotted black">
|
||||||
|
{%= format_currency(data[i].balance, filters.presentation_currency) %}
|
||||||
|
{% if(data[i].balance < 0){ %}Cr{% } %}
|
||||||
|
{% if(data[i].balance > 0){ %}Dr{% } %}
|
||||||
|
</td>
|
||||||
|
{% } else { %}
|
||||||
|
<td style="text-align: right; border-right: 1px dotted black">
|
||||||
|
{% if(i != l-2) { %}
|
||||||
|
{%= format_currency(data[i].balance, filters.presentation_currency) %}
|
||||||
|
{% } %}
|
||||||
|
</td>
|
||||||
|
{% } %}
|
||||||
|
</tr>
|
||||||
|
{% endfor%}
|
||||||
|
</tbody>
|
||||||
|
</table>
|
||||||
|
<p class="text-right text-muted">Printed On {%= frappe.datetime.str_to_user(frappe.datetime.get_datetime_as_string()) %}</p>
|
||||||
|
</div>
|
||||||
|
|||||||
Reference in New Issue
Block a user