Added the subject selector for the cash account in the accounting application.
This commit is contained in:
		| @@ -25,7 +25,7 @@ First written: 2020/7/1 | |||||||
| {% load accounting %} | {% load accounting %} | ||||||
|  |  | ||||||
| {% block settings %} | {% block settings %} | ||||||
|   {% blocktrans asvar title with subject=subject.title_zhtw period=period.description context "Accounting|" %}Cash Account for {{ subject }} in {{ period }}{% endblocktrans %} |   {% blocktrans asvar title with subject=current_subject.title_zhtw period=period.description context "Accounting|" %}Cash Account for {{ subject }} in {{ period }}{% endblocktrans %} | ||||||
|   {% setvar "title" title %} |   {% setvar "title" title %} | ||||||
|   {% setvar "use_period_chooser" True %} |   {% setvar "use_period_chooser" True %} | ||||||
| {% endblock %} | {% endblock %} | ||||||
| @@ -66,6 +66,22 @@ First written: 2020/7/1 | |||||||
|     {% trans "Cash Account" context "Accounting|" as current_report_title %} |     {% trans "Cash Account" context "Accounting|" as current_report_title %} | ||||||
|     {% include "accounting/include/report-chooser.html" %} |     {% include "accounting/include/report-chooser.html" %} | ||||||
|   {% endwith %} |   {% endwith %} | ||||||
|  |   <div class="btn-group"> | ||||||
|  |     <button type="button" class="btn btn-primary dropdown-toggle" data-toggle="dropdown"> | ||||||
|  |       <span class="d-none d-md-inline">{{ current_subject.title_zhtw }}</span> | ||||||
|  |       <span class="d-md-none">{% trans "Subject" context "Accounting|" as text %}{{ text|force_escape }}</span> | ||||||
|  |     </button> | ||||||
|  |     <div class="dropdown-menu subject-picker"> | ||||||
|  |       <div class="dropdown-header">{% trans "Shortcuts" context "Accounting|Subject|" as text %}{{ text|force_escape }}</div> | ||||||
|  |       {% for subject in shortcut_subjects %} | ||||||
|  |         <a class="dropdown-item {% if subject.code == current_subject.code %}{% endif %}>" href="{% url "accounting:cash" subject.code period.spec %}">{{ subject.title_zhtw|title }}</a> | ||||||
|  |       {% endfor %} | ||||||
|  |       <div class="dropdown-header">{% trans "All" context "Accounting|Subject|" as text %}{{ text|force_escape }}</div> | ||||||
|  |       {% for subject in all_sibjects %} | ||||||
|  |         <a class="dropdown-item {% if subject.code == current_subject.code %}{% endif %}>" href="{% url "accounting:cash" subject.code period.spec %}">{{ subject.title_zhtw|title }}</a> | ||||||
|  |       {% endfor %} | ||||||
|  |     </div> | ||||||
|  |   </div> | ||||||
|   <button type="button" class="btn btn-primary" data-toggle="modal" data-target="#period-modal"> |   <button type="button" class="btn btn-primary" data-toggle="modal" data-target="#period-modal"> | ||||||
|     <i class="far fa-calendar-alt"></i> |     <i class="far fa-calendar-alt"></i> | ||||||
|     <span class="d-none d-md-inline">{{ period.description }}</span> |     <span class="d-none d-md-inline">{{ period.description }}</span> | ||||||
|   | |||||||
| @@ -21,7 +21,7 @@ | |||||||
| from datetime import timedelta | from datetime import timedelta | ||||||
|  |  | ||||||
| from django.db import connection | from django.db import connection | ||||||
| from django.http import HttpResponseRedirect | from django.http import HttpResponseRedirect, Http404 | ||||||
| from django.shortcuts import render | from django.shortcuts import render | ||||||
| from django.urls import reverse | from django.urls import reverse | ||||||
| from django.utils import dateformat | from django.utils import dateformat | ||||||
| @@ -75,11 +75,30 @@ def cash(request, subject_code, period_spec): | |||||||
|     data_end = last_txn.date if last_txn is not None else None |     data_end = last_txn.date if last_txn is not None else None | ||||||
|     period = Period( |     period = Period( | ||||||
|         period_spec, data_start, data_end, get_language()) |         period_spec, data_start, data_end, get_language()) | ||||||
|  |     subjects = list(Subject.objects.raw("""SELECT s.* | ||||||
|  | FROM accounting_subjects AS s | ||||||
|  |   WHERE s.code IN (SELECT s1.code | ||||||
|  |     FROM accounting_subjects AS s1 | ||||||
|  |       INNER JOIN accounting_records AS r1 ON s1.sn=r1.subject_sn | ||||||
|  |     WHERE s1.code LIKE '11%' | ||||||
|  |       OR s1.code LIKE '12%' | ||||||
|  |       OR s1.code LIKE '21%' | ||||||
|  |       OR s1.code LIKE '22%' | ||||||
|  |     GROUP BY s1.code) | ||||||
|  |   ORDER BY s.code""")) | ||||||
|  |     subjects.insert(0, Subject( | ||||||
|  |         code="0", | ||||||
|  |         title_zhtw=pgettext( | ||||||
|  |             "Accounting|", "current assets and liabilities"), | ||||||
|  |     )) | ||||||
|  |     current_subject = None | ||||||
|  |     for subject in subjects: | ||||||
|  |         if subject.code == subject_code: | ||||||
|  |             current_subject = subject | ||||||
|  |     if current_subject is None: | ||||||
|  |         raise Http404() | ||||||
|     # The SQL query |     # The SQL query | ||||||
|     if subject_code == "0": |     if current_subject.code == "0": | ||||||
|         subject = Subject(code="0") |  | ||||||
|         subject.title_zhtw = pgettext( |  | ||||||
|             "Accounting|", "Current Assets And Liabilities") |  | ||||||
|         select_records = """SELECT r.* |         select_records = """SELECT r.* | ||||||
| FROM accounting_records AS r | FROM accounting_records AS r | ||||||
|   INNER JOIN (SELECT |   INNER JOIN (SELECT | ||||||
| @@ -119,8 +138,6 @@ ORDER BY | |||||||
|             select_balance_before, |             select_balance_before, | ||||||
|             [data_start, period.start - timedelta(days=1)]) |             [data_start, period.start - timedelta(days=1)]) | ||||||
|     else: |     else: | ||||||
|         subject = Subject.objects.filter( |  | ||||||
|             code=subject_code).first() |  | ||||||
|         select_records = """SELECT r.* |         select_records = """SELECT r.* | ||||||
| FROM accounting_records AS r | FROM accounting_records AS r | ||||||
|   INNER JOIN (SELECT |   INNER JOIN (SELECT | ||||||
| @@ -148,8 +165,8 @@ ORDER BY | |||||||
|             select_records, |             select_records, | ||||||
|             [period.start, |             [period.start, | ||||||
|              period.end, |              period.end, | ||||||
|              subject.code + "%", |              current_subject.code + "%", | ||||||
|              subject.code + "%"]) |              current_subject.code + "%"]) | ||||||
|         select_balance_before = """SELECT |         select_balance_before = """SELECT | ||||||
|     SUM(CASE WHEN is_credit THEN 1 ELSE -1 END * amount) AS amount |     SUM(CASE WHEN is_credit THEN 1 ELSE -1 END * amount) AS amount | ||||||
|   FROM (%s) AS b""" % select_records |   FROM (%s) AS b""" % select_records | ||||||
| @@ -157,8 +174,8 @@ ORDER BY | |||||||
|             select_balance_before, |             select_balance_before, | ||||||
|             [data_start, |             [data_start, | ||||||
|              period.start - timedelta(days=1), |              period.start - timedelta(days=1), | ||||||
|              subject.code + "%", |              current_subject.code + "%", | ||||||
|              subject.code + "%"]) |              current_subject.code + "%"]) | ||||||
|     # The list data |     # The list data | ||||||
|     records = list(Record.objects.raw( |     records = list(Record.objects.raw( | ||||||
|         sql_records.sql, |         sql_records.sql, | ||||||
| @@ -177,7 +194,7 @@ ORDER BY | |||||||
|         record.balance = balance |         record.balance = balance | ||||||
|     record_sum = Record( |     record_sum = Record( | ||||||
|         transaction=Transaction(date=records[-1].transaction.date), |         transaction=Transaction(date=records[-1].transaction.date), | ||||||
|         subject=subject, |         subject=current_subject, | ||||||
|         summary=pgettext("Accounting|", "Total"), |         summary=pgettext("Accounting|", "Total"), | ||||||
|         balance=balance |         balance=balance | ||||||
|     ) |     ) | ||||||
| @@ -196,7 +213,9 @@ ORDER BY | |||||||
|     return render(request, "accounting/cash.html", { |     return render(request, "accounting/cash.html", { | ||||||
|         "records": pagination.records, |         "records": pagination.records, | ||||||
|         "pagination": pagination, |         "pagination": pagination, | ||||||
|         "subject": subject, |         "current_subject": current_subject, | ||||||
|         "period": period, |         "period": period, | ||||||
|         "reports": ReportUrl(cash=subject, period=period) |         "reports": ReportUrl(cash=current_subject, period=period), | ||||||
|  |         "shortcut_subjects": [x for x in subjects if x.code in settings.ACCOUNTING["CASH_SHORTCUT_SUBJECTS"]], | ||||||
|  |         "all_sibjects": [x for x in subjects if x.code not in settings.ACCOUNTING["CASH_SHORTCUT_SUBJECTS"]], | ||||||
|     }) |     }) | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user