Added the accounting journal in the accounting application.
This commit is contained in:
parent
0525197993
commit
4c821a73ea
202
accounting/templates/accounting/journal.html
Normal file
202
accounting/templates/accounting/journal.html
Normal file
@ -0,0 +1,202 @@
|
|||||||
|
{% extends "base.html" %}
|
||||||
|
{% comment %}
|
||||||
|
The Mia Accounting Application
|
||||||
|
cash.html: The template for the cash account reports
|
||||||
|
|
||||||
|
Copyright (c) 2020 imacat.
|
||||||
|
|
||||||
|
Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
you may not use this file except in compliance with the License.
|
||||||
|
You may obtain a copy of the License at
|
||||||
|
|
||||||
|
http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
|
||||||
|
Unless required by applicable law or agreed to in writing, software
|
||||||
|
distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
See the License for the specific language governing permissions and
|
||||||
|
limitations under the License.
|
||||||
|
|
||||||
|
Author: imacat@mail.imacat.idv.tw (imacat)
|
||||||
|
First written: 2020/7/1
|
||||||
|
{% endcomment %}
|
||||||
|
{% load i18n %}
|
||||||
|
{% load humanize %}
|
||||||
|
{% load mia_core %}
|
||||||
|
{% load accounting %}
|
||||||
|
|
||||||
|
{% block settings %}
|
||||||
|
{% blocktrans asvar title with subject=current_subject.title|title period=period.description context "Accounting|" %}Cash Account for {{ subject }} in {{ period }}{% endblocktrans %}
|
||||||
|
{% setvar "title" title %}
|
||||||
|
{% setvar "use_period_chooser" True %}
|
||||||
|
{% endblock %}
|
||||||
|
|
||||||
|
{% block content %}
|
||||||
|
|
||||||
|
<div class="btn-group btn-actions">
|
||||||
|
<div class="btn-group">
|
||||||
|
<button type="button" class="btn btn-primary dropdown-toggle" data-toggle="dropdown">
|
||||||
|
<i class="fas fa-edit"></i>
|
||||||
|
{% trans "New" context "Accounting|" as text %}
|
||||||
|
{{ text|force_escape }}
|
||||||
|
</button>
|
||||||
|
<div class="dropdown-menu">
|
||||||
|
{% url "accounting:transaction.create" "expense" as url %}
|
||||||
|
<a class="dropdown-item" href="{% url_query url r=request.get_full_path %}">
|
||||||
|
{% trans "Cash Expense" context "Accounting|" as text %}
|
||||||
|
{{ text|force_escape }}
|
||||||
|
</a>
|
||||||
|
{% url "accounting:transaction.create" "income" as url %}
|
||||||
|
<a class="dropdown-item" href="{% url_query url r=request.get_full_path %}">
|
||||||
|
{% trans "Cash Income" context "Accounting|" as text %}
|
||||||
|
{{ text|force_escape }}
|
||||||
|
</a>
|
||||||
|
{% url "accounting:transaction.create" "transfer" as url %}
|
||||||
|
<a class="dropdown-item" href="{% url_query url r=request.get_full_path %}">
|
||||||
|
{% trans "Transfer" context "Accounting|" as text %}
|
||||||
|
{{ text|force_escape }}
|
||||||
|
</a>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
{% with current_report_icon="fas fa-book" %}
|
||||||
|
{% trans "Journal" context "Accounting|" as current_report_title %}
|
||||||
|
{% include "accounting/include/report-chooser.html" %}
|
||||||
|
{% endwith %}
|
||||||
|
<button type="button" class="btn btn-primary" data-toggle="modal" data-target="#period-modal">
|
||||||
|
<i class="far fa-calendar-alt"></i>
|
||||||
|
<span class="d-none d-md-inline">{{ period.description }}</span>
|
||||||
|
<span class="d-md-none">{% trans "Period" context "Period|" as text %}{{ text|force_escape }}</span>
|
||||||
|
</button>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
{% include "mia_core/include/period-chooser.html" %}
|
||||||
|
|
||||||
|
{% if records %}
|
||||||
|
{% include "mia_core/include/pagination.html" %}
|
||||||
|
|
||||||
|
{# The table for large screens #}
|
||||||
|
<table class="table table-striped table-hover d-none d-lg-table general-journal-table">
|
||||||
|
<thead>
|
||||||
|
<tr>
|
||||||
|
<th scope="col">{% trans "Date" context "Accounting|" as text %}{{ text|force_escape }}</th>
|
||||||
|
<th scope="col">{% trans "Subject" context "Accounting|" as text %}{{ text|force_escape }}</th>
|
||||||
|
<th scope="col">{% trans "Summary" context "Accounting|" as text %}{{ text|force_escape }}</th>
|
||||||
|
<th class="amount" scope="col">{% trans "Debit" context "Accounting|" as text %}{{ text|force_escape }}</th>
|
||||||
|
<th class="amount" scope="col">{% trans "Credit" context "Accounting|" as text %}{{ text|force_escape }}</th>
|
||||||
|
<th scope="col">{% trans "Notes" context "Accounting|" as text %}{{ text|force_escape }}</th>
|
||||||
|
<th class="actions" scope="col">{% trans "View" context "Accounting|" as text %}{{ text|force_escape }}</th>
|
||||||
|
</tr>
|
||||||
|
</thead>
|
||||||
|
<tbody>
|
||||||
|
{% for record in records %}
|
||||||
|
<tr class="{% if not record.is_balanced or record.has_order_hole %} table-danger {% endif %}">
|
||||||
|
<td>{{ record.transaction.date|smart_date }}</td>
|
||||||
|
<td>{{ record.subject.title|title }}</td>
|
||||||
|
<td><div class="{% if record.is_credit %} journal-credit {% else %} journal-debit {% endif %}">{{ record.summary|default:"" }}{% if not record.is_balanced %}
|
||||||
|
<span class="badge badge-danger badge-pill">
|
||||||
|
{% trans "Unbalanced" context "Accounting|" as text %}
|
||||||
|
{{ text|force_escape }}
|
||||||
|
</span>
|
||||||
|
{% endif %}{% if record.has_order_hole %}
|
||||||
|
<span class="badge badge-danger badge-pill">
|
||||||
|
{% trans "Need Reorder" context "Accounting|" as text %}
|
||||||
|
{{ text|force_escape }}
|
||||||
|
</span>
|
||||||
|
{% endif %}</div></td>
|
||||||
|
<td class="amount">{{ record.debit_amount|accounting_amount }}</td>
|
||||||
|
<td class="amount">{{ record.credit_amount|accounting_amount }}</td>
|
||||||
|
<td>{{ record.transaction.note|default:"" }}</td>
|
||||||
|
<td class="actions">
|
||||||
|
{% if record.sn is not None %}
|
||||||
|
<a href="{{ record.transaction.get_absolute_url }}" class="btn btn-info" role="button">
|
||||||
|
<i class="fas fa-eye"></i>
|
||||||
|
{% trans "View" context "Accounting|" as text %}{{ text|force_escape }}
|
||||||
|
</a>
|
||||||
|
{% endif %}
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
{% endfor %}
|
||||||
|
</tbody>
|
||||||
|
</table>
|
||||||
|
|
||||||
|
{# The list for small screens #}
|
||||||
|
<ul class="list-group d-lg-none">
|
||||||
|
{% for record in records %}
|
||||||
|
<li class="list-group-item {% if not record.is_balanced or record.has_order_hole %} list-group-item-danger {% endif %}">
|
||||||
|
{% if record.sn is not None %}
|
||||||
|
<a class="list-group-item-action" href="{{ record.transaction.get_absolute_url }}">
|
||||||
|
<div class="{% if record.is_credit %} journal-credit {% else %} journal-debit {% endif %}">
|
||||||
|
<div class="date-subject-line">
|
||||||
|
{{ record.transaction.date|smart_date }} {{ record.subject.title|title }}
|
||||||
|
</div>
|
||||||
|
<div class="d-flex justify-content-between align-items-center">
|
||||||
|
<div>
|
||||||
|
{{ record.summary|default:"" }}
|
||||||
|
{% if not record.is_balanced %}
|
||||||
|
<span class="badge badge-danger badge-pill">
|
||||||
|
{% trans "Unbalanced" context "Accounting|" as text %}
|
||||||
|
{{ text|force_escape }}
|
||||||
|
</span>
|
||||||
|
{% endif %}
|
||||||
|
{% if record.has_order_hole %}
|
||||||
|
<span class="badge badge-danger badge-pill">
|
||||||
|
{% trans "Need Reorder" context "Accounting|" as text %}
|
||||||
|
{{ text|force_escape }}
|
||||||
|
</span>
|
||||||
|
{% endif %}
|
||||||
|
</div>
|
||||||
|
<div>
|
||||||
|
{% if record.debit_amount is not None %}
|
||||||
|
<span class="badge badge-success badge-pill">
|
||||||
|
{{ record.debit_amount|intcomma:False }}
|
||||||
|
</span>
|
||||||
|
{% endif %}
|
||||||
|
{% if record.credit_amount is not None %}
|
||||||
|
<span class="badge badge-warning badge-pill">
|
||||||
|
{{ record.credit_amount|intcomma:False }}
|
||||||
|
</span>
|
||||||
|
{% endif %}
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div>{{ record.transaction.note|default:"" }}</div>
|
||||||
|
</div>
|
||||||
|
</a>
|
||||||
|
{% else %}
|
||||||
|
<div class="{% if record.is_credit %} journal-credit {% else %} journal-debit {% endif %}">
|
||||||
|
<div class="date-subject-line">
|
||||||
|
{{ record.transaction.date|smart_date }} {{ record.subject.title|title }}
|
||||||
|
</div>
|
||||||
|
<div class="d-flex justify-content-between align-items-center">
|
||||||
|
<div>
|
||||||
|
{{ record.summary|default:"" }}
|
||||||
|
{% if not record.is_balanced %}
|
||||||
|
<span class="badge badge-danger badge-pill">
|
||||||
|
{% trans "Unbalanced" context "Accounting|" as text %}
|
||||||
|
{{ text|force_escape }}
|
||||||
|
</span>
|
||||||
|
{% endif %}
|
||||||
|
</div>
|
||||||
|
<div>
|
||||||
|
{% if record.debit_amount is not None %}
|
||||||
|
<span class="badge badge-success badge-pill">
|
||||||
|
{{ record.debit_amount|intcomma:False }}
|
||||||
|
</span>
|
||||||
|
{% endif %}
|
||||||
|
{% if record.credit_amount is not None %}
|
||||||
|
<span class="badge badge-warning badge-pill">
|
||||||
|
{{ record.credit_amount|intcomma:False }}
|
||||||
|
</span>
|
||||||
|
{% endif %}
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div>{{ record.transaction.note|default:"" }}</div>
|
||||||
|
</div>
|
||||||
|
{% endif %}
|
||||||
|
</li>
|
||||||
|
{% endfor %}
|
||||||
|
</ul>
|
||||||
|
{% else %}
|
||||||
|
<p>{{ _("There is currently no data.")|force_escape }}</p>
|
||||||
|
{% endif %}
|
||||||
|
|
||||||
|
{% endblock %}
|
@ -59,7 +59,7 @@ urlpatterns = [
|
|||||||
path("journal",
|
path("journal",
|
||||||
mia_core_views.todo, name="journal.home"),
|
mia_core_views.todo, name="journal.home"),
|
||||||
path("journal/<str:period_spec>",
|
path("journal/<str:period_spec>",
|
||||||
mia_core_views.todo, name="journal"),
|
views.journal, name="journal"),
|
||||||
path("trial-balance",
|
path("trial-balance",
|
||||||
mia_core_views.todo, name="trial-balance.home"),
|
mia_core_views.todo, name="trial-balance.home"),
|
||||||
path("trial-balance/<str:period_spec>",
|
path("trial-balance/<str:period_spec>",
|
||||||
|
@ -509,3 +509,29 @@ ORDER BY month""",
|
|||||||
"reports": ReportUrl(cash=current_subject),
|
"reports": ReportUrl(cash=current_subject),
|
||||||
"subjects": subjects,
|
"subjects": subjects,
|
||||||
})
|
})
|
||||||
|
|
||||||
|
|
||||||
|
@require_GET
|
||||||
|
@digest_login_required
|
||||||
|
def journal(request, period_spec):
|
||||||
|
"""The ledger report."""
|
||||||
|
# The period
|
||||||
|
first_txn = Transaction.objects.order_by("date").first()
|
||||||
|
data_start = first_txn.date if first_txn is not None else None
|
||||||
|
last_txn = Transaction.objects.order_by("-date").first()
|
||||||
|
data_end = last_txn.date if last_txn is not None else None
|
||||||
|
period = Period(period_spec, data_start, data_end)
|
||||||
|
# The accounting records
|
||||||
|
records = Record.objects.filter(
|
||||||
|
transaction__date__gte=period.start,
|
||||||
|
transaction__date__lte=period.end).order_by(
|
||||||
|
"transaction__date", "is_credit", "ord")
|
||||||
|
# The brought-forward records
|
||||||
|
# TODO: To be done.
|
||||||
|
|
||||||
|
pagination = Pagination(request, records, True)
|
||||||
|
return render(request, "accounting/journal.html", {
|
||||||
|
"records": pagination.records,
|
||||||
|
"pagination": pagination,
|
||||||
|
"period": period,
|
||||||
|
})
|
||||||
|
Loading…
Reference in New Issue
Block a user