RunasSudo
fe600592d6
Typo resulted e.g. in transactions between cash assets and liabilities being discarded instead of being charged to Other Income
124 lines
4.9 KiB
HTML
124 lines
4.9 KiB
HTML
{#
|
|
ledger-pyreport
|
|
Copyright © 2020 Lee Yingtong Li (RunasSudo)
|
|
|
|
This program is free software: you can redistribute it and/or modify
|
|
it under the terms of the GNU Affero General Public License as published by
|
|
the Free Software Foundation, either version 3 of the License, or
|
|
(at your option) any later version.
|
|
|
|
This program is distributed in the hope that it will be useful,
|
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
GNU Affero General Public License for more details.
|
|
|
|
You should have received a copy of the GNU Affero General Public License
|
|
along with this program. If not, see <https://www.gnu.org/licenses/>.
|
|
#}
|
|
|
|
{% extends 'base_report.html' %}
|
|
|
|
{% block title %}{% if account %}Account Transactions{% else %}General Ledger{% endif %} as at {{ date.strftime('%d %B %Y') }}{% endblock %}
|
|
|
|
{% block links %}
|
|
{{ super() }}
|
|
{% if account %}<a href="/transactions_commodity?{{ {'date': date.strftime('%Y-%m-%d'), 'pstart': pstart.strftime('%Y-%m-%d'), 'account': account.name, 'cash': 'on' if cash else ''}|urlencode }}">Show commodity detail</a>{% endif %}
|
|
{% endblock %}
|
|
|
|
{% block report %}
|
|
{% if account %}
|
|
<h1>Account Transactions</h1>
|
|
<h2 style="margin-bottom: 0;">For {{ account.name }}</h2>
|
|
{% else %}
|
|
<h1>General Ledger</h1>
|
|
{% endif %}
|
|
<h2>For the {{ period }}</h2>
|
|
|
|
<table class="ledger">
|
|
<tr>
|
|
<th style="width: 5em;">Date</th>
|
|
<th>Description</th>
|
|
<th style="max-width: 8em;">Account</th>
|
|
<th class="h1" style="text-align: right; width: 5em;">Dr</th>
|
|
<th class="h1" style="text-align: right; width: 5em;">Cr</th>
|
|
{% if account %}<th class="h1" style="text-align: right; width: 6em;">Balance</th>{% endif %}
|
|
</tr>
|
|
|
|
{% set ns = namespace(balance=None) %}
|
|
{% if account %}
|
|
{% set prevlink = '/transactions?' + {'date': (pstart - timedelta(days=1)).strftime('%Y-%m-%d'), 'pstart': pstart.replace(year=pstart.year-1).strftime('%Y-%m-%d'), 'account': account.name, 'cash': 'on' if cash else ''}|urlencode %}
|
|
<tr class="total">
|
|
<td><a href="{{ prevlink }}">{{ pstart.strftime('%Y-%m-%d') }}</a></td>
|
|
<td><a href="{{ prevlink }}">Opening Balance</a></td>
|
|
<td></td>
|
|
<td style="text-align: right;"></td>
|
|
<td style="text-align: right;"></td>
|
|
<td style="text-align: right;">
|
|
<a href="{{ prevlink }}">
|
|
{% if opening_balance >= 0 %}
|
|
{{ opening_balance|b }} Dr
|
|
{% else %}
|
|
{{ -opening_balance|b }} Cr
|
|
{% endif %}
|
|
</a>
|
|
</td>
|
|
</tr>
|
|
{% set ns.balance = opening_balance %}
|
|
{% endif %}
|
|
|
|
{% for transaction in transactions %}
|
|
{% for posting in transaction.postings if posting.account != account %}
|
|
{% set amount = posting.exchange(report_currency, transaction.date) %}
|
|
<tr>
|
|
<td>{% if loop.first %}{{ transaction.date.strftime('%Y-%m-%d') }}{% endif %}</td>
|
|
<td>{% if loop.first %}{{ transaction.description }}{% endif %}</td>
|
|
<td><a href="/transactions?{{ {'date': date.strftime('%Y-%m-%d'), 'pstart': pstart.strftime('%Y-%m-%d'), 'account': posting.account.name, 'cash': 'on' if cash else ''}|urlencode }}">{{ (posting.account.name|e).__str__().replace(':', ':<wbr>')|safe }}</a></td>
|
|
{% if account %}
|
|
{# Reverse Dr/Cr so it's from the "perspective" of this account #}
|
|
{% set ns.balance = ns.balance - amount %}
|
|
<td style="text-align: right;">{% if amount < 0 %}<span title="{{ (-posting.amount).tostr(False) }}">{{ -amount|b }}</span>{% endif %}</td>
|
|
<td style="text-align: right;">{% if amount > 0 %}<span title="{{ posting.amount.tostr(False) }}">{{ amount|b }}</span>{% endif %}</td>
|
|
<td style="text-align: right;">
|
|
{% if loop.last %}
|
|
{% if ns.balance >= 0 %}
|
|
{{ ns.balance|b }} Dr
|
|
{% else %}
|
|
{{ -ns.balance|b }} Cr
|
|
{% endif %}
|
|
{% endif %}
|
|
</td>
|
|
{% else %}
|
|
<td style="text-align: right;">{% if amount > 0 %}<span title="{{ posting.amount.tostr(False) }}">{{ amount|b }}</span>{% endif %}</td>
|
|
<td style="text-align: right;">{% if amount < 0 %}<span title="{{ (-posting.amount).tostr(False) }}">{{ -amount|b }}</span>{% endif %}</td>
|
|
{% endif %}
|
|
</tr>
|
|
{% endfor %}
|
|
{% endfor %}
|
|
|
|
{% if account %}
|
|
<tr class="total">
|
|
<td>{{ date.strftime('%Y-%m-%d') }}</td>
|
|
<td>Closing Balance</td>
|
|
<td></td>
|
|
<td style="text-align: right;"></td>
|
|
<td style="text-align: right;"></td>
|
|
<td style="text-align: right;">
|
|
{% if closing_balance >= 0 %}
|
|
{{ closing_balance|b }} Dr
|
|
{% else %}
|
|
{{ -closing_balance|b }} Cr
|
|
{% endif %}
|
|
</td>
|
|
</tr>
|
|
{% else %}
|
|
<tr class="total">
|
|
<td>{{ date.strftime('%Y-%m-%d') }}</td>
|
|
<td>Total</td>
|
|
<td></td>
|
|
<td style="text-align: right;">{{ total_dr|b }}</td>
|
|
<td style="text-align: right;">{{ -total_cr|b }}</td>
|
|
</tr>
|
|
{% endif %}
|
|
</table>
|
|
{% endblock %}
|