Replaced the views of the default accounting reports with class-based redirect views in the accounting application.

This commit is contained in:
依瑪貓 2020-07-30 00:10:11 +08:00
parent e64089f06f
commit a8058209bd
2 changed files with 243 additions and 285 deletions

View File

@ -20,8 +20,11 @@
""" """
from django.urls import path, register_converter from django.urls import path, register_converter
from django.views.decorators.http import require_GET
from django.views.generic import RedirectView
from mia_core import views as mia_core_views from mia_core import views as mia_core_views
from mia_core.digest_auth import digest_login_required
from . import converters, views from . import converters, views
register_converter(converters.PeriodConverter, "period") register_converter(converters.PeriodConverter, "period")
@ -33,36 +36,41 @@ register_converter(converters.DateConverter, "date")
app_name = "accounting" app_name = "accounting"
urlpatterns = [ urlpatterns = [
path("", views.home, name="home"), path("", require_GET(digest_login_required(RedirectView.as_view(
path("cash", views.cash_default, name="cash.home"), query_string = True,
pattern_name = "accounting:cash.home",
))), name="home"),
path("cash",
views.CashDefaultView.as_view(), name="cash.home"),
path("cash/<cash-account:account>/<period:period>", path("cash/<cash-account:account>/<period:period>",
views.cash, name="cash"), views.cash, name="cash"),
path("cash-summary", path("cash-summary",
views.cash_summary_default, name="cash-summary.home"), views.CashSummaryDefaultView.as_view(), name="cash-summary.home"),
path("cash-summary/<cash-account:account>", path("cash-summary/<cash-account:account>",
views.cash_summary, name="cash-summary"), views.cash_summary, name="cash-summary"),
path("ledger", path("ledger",
views.ledger_default, name="ledger.home"), views.LedgerDefaultView.as_view(), name="ledger.home"),
path("ledger/<ledger-account:account>/<period:period>", path("ledger/<ledger-account:account>/<period:period>",
views.ledger, name="ledger"), views.ledger, name="ledger"),
path("ledger-summary", path("ledger-summary",
views.ledger_summary_default, name="ledger-summary.home"), views.LedgerSummaryDefaultView.as_view(), name="ledger-summary.home"),
path("ledger-summary/<ledger-account:account>", path("ledger-summary/<ledger-account:account>",
views.ledger_summary, name="ledger-summary"), views.ledger_summary, name="ledger-summary"),
path("journal", path("journal",
views.journal_default, name="journal.home"), views.JournalDefaultView.as_view(), name="journal.home"),
path("journal/<period:period>", path("journal/<period:period>",
views.journal, name="journal"), views.journal, name="journal"),
path("trial-balance", path("trial-balance",
views.trial_balance_default, name="trial-balance.home"), views.TrialBalanceDefaultView.as_view(), name="trial-balance.home"),
path("trial-balance/<period:period>", path("trial-balance/<period:period>",
views.trial_balance, name="trial-balance"), views.trial_balance, name="trial-balance"),
path("income-statement", path("income-statement",
views.income_statement_default, name="income-statement.home"), views.IncomeStatementDefaultView.as_view(),
name="income-statement.home"),
path("income-statement/<period:period>", path("income-statement/<period:period>",
views.income_statement, name="income-statement"), views.income_statement, name="income-statement"),
path("balance-sheet", path("balance-sheet",
views.balance_sheet_default, name="balance-sheet.home"), views.BalanceSheetDefaultView.as_view(), name="balance-sheet.home"),
path("balance-sheet/<period:period>", path("balance-sheet/<period:period>",
views.balance_sheet, name="balance-sheet"), views.balance_sheet, name="balance-sheet"),
path("search", path("search",

View File

@ -24,11 +24,12 @@ from django.conf import settings
from django.core.exceptions import ValidationError from django.core.exceptions import ValidationError
from django.db.models import Sum, Case, When, F, Q from django.db.models import Sum, Case, When, F, Q
from django.db.models.functions import TruncMonth, Coalesce from django.db.models.functions import TruncMonth, Coalesce
from django.http import HttpResponseRedirect
from django.shortcuts import render from django.shortcuts import render
from django.urls import reverse from django.urls import reverse
from django.utils.decorators import method_decorator
from django.utils.translation import pgettext, gettext_noop from django.utils.translation import pgettext, gettext_noop
from django.views.decorators.http import require_GET, require_POST from django.views.decorators.http import require_GET, require_POST
from django.views.generic import RedirectView
from mia_core.digest_auth import digest_login_required from mia_core.digest_auth import digest_login_required
from mia_core.period import Period from mia_core.period import Period
@ -40,39 +41,18 @@ from .utils import ReportUrl, get_cash_accounts, get_ledger_accounts, \
sort_form_transaction_records, fill_transaction_from_previous_form sort_form_transaction_records, fill_transaction_from_previous_form
# noinspection PyUnusedLocal @method_decorator(require_GET, name="dispatch")
@require_GET @method_decorator(digest_login_required, name="dispatch")
@digest_login_required class CashDefaultView(RedirectView):
def home(request): """The default cash account."""
"""The accounting home page. query_string = True
pattern_name = "accounting:cash"
Args: def get_redirect_url(self, *args, **kwargs):
request (HttpRequest) The request. kwargs["account"] = Account.objects.get(
Returns:
HttpResponseRedirect: The redirection to the default
accounting report.
"""
return HttpResponseRedirect(reverse("accounting:cash.home"))
# noinspection PyUnusedLocal
@require_GET
@digest_login_required
def cash_default(request):
"""The default cash account.
Args:
request (HttpRequest) The request.
Returns:
HttpResponseRedirect: The redirection to the default account
and month.
"""
account = Account.objects.get(
code=settings.ACCOUNTING["DEFAULT_CASH_ACCOUNT"]) code=settings.ACCOUNTING["DEFAULT_CASH_ACCOUNT"])
return HttpResponseRedirect( kwargs["period"] = Period.default_spec()
reverse("accounting:cash", args=(account, Period.default_spec()))) return super().get_redirect_url(*args, **kwargs)
@require_GET @require_GET
@ -177,22 +157,17 @@ def cash(request, account, period):
}) })
# noinspection PyUnusedLocal @method_decorator(require_GET, name="dispatch")
@require_GET @method_decorator(digest_login_required, name="dispatch")
@digest_login_required class CashSummaryDefaultView(RedirectView):
def cash_summary_default(request): """The default cash account summary."""
"""The default cash account summary. query_string = True
pattern_name = "accounting:cash-summary"
Args: def get_redirect_url(self, *args, **kwargs):
request (HttpRequest) The request. kwargs["account"] = Account.objects.get(
Returns:
HttpResponseRedirect: The redirection to the default account.
"""
account = Account.objects.get(
code=settings.ACCOUNTING["DEFAULT_CASH_ACCOUNT"]) code=settings.ACCOUNTING["DEFAULT_CASH_ACCOUNT"])
return HttpResponseRedirect( return super().get_redirect_url(*args, **kwargs)
reverse("accounting:cash-summary", args=(account,)))
@require_GET @require_GET
@ -279,23 +254,18 @@ def cash_summary(request, account):
}) })
# noinspection PyUnusedLocal @method_decorator(require_GET, name="dispatch")
@require_GET @method_decorator(digest_login_required, name="dispatch")
@digest_login_required class LedgerDefaultView(RedirectView):
def ledger_default(request): """The default ledger."""
"""The default ledger. query_string = True
pattern_name = "accounting:ledger"
Args: def get_redirect_url(self, *args, **kwargs):
request (HttpRequest) The request. kwargs["account"] = Account.objects.get(
Returns:
HttpResponseRedirect: The redirection to the default account
and month.
"""
account = Account.objects.get(
code=settings.ACCOUNTING["DEFAULT_LEDGER_ACCOUNT"]) code=settings.ACCOUNTING["DEFAULT_LEDGER_ACCOUNT"])
return HttpResponseRedirect( kwargs["period"] = Period.default_spec()
reverse("accounting:ledger", args=(account, Period.default_spec()))) return super().get_redirect_url(*args, **kwargs)
@require_GET @require_GET
@ -318,7 +288,8 @@ def ledger(request, account, period):
transaction__date__gte=period.start, transaction__date__gte=period.start,
transaction__date__lte=period.end, transaction__date__lte=period.end,
account__code__startswith=account.code) account__code__startswith=account.code)
.order_by("transaction__date", "transaction__ord", "is_credit", "ord")) .order_by("transaction__date", "transaction__ord", "is_credit",
"ord"))
if re.match("^[1-3]", account.code) is not None: if re.match("^[1-3]", account.code) is not None:
balance = Record.objects \ balance = Record.objects \
.filter( .filter(
@ -359,22 +330,17 @@ def ledger(request, account, period):
}) })
# noinspection PyUnusedLocal @method_decorator(require_GET, name="dispatch")
@require_GET @method_decorator(digest_login_required, name="dispatch")
@digest_login_required class LedgerSummaryDefaultView(RedirectView):
def ledger_summary_default(request): """The default ledger summary."""
"""The default ledger summary. query_string = True
pattern_name = "accounting:ledger-summary"
Args: def get_redirect_url(self, *args, **kwargs):
request (HttpRequest) The request. kwargs["account"] = Account.objects.get(
Returns:
HttpResponseRedirect: The redirection to the default account.
"""
account = Account.objects.get(
code=settings.ACCOUNTING["DEFAULT_LEDGER_ACCOUNT"]) code=settings.ACCOUNTING["DEFAULT_LEDGER_ACCOUNT"])
return HttpResponseRedirect( return super().get_redirect_url(*args, **kwargs)
reverse("accounting:ledger-summary", args=(account,)))
@require_GET @require_GET
@ -426,20 +392,16 @@ def ledger_summary(request, account):
}) })
# noinspection PyUnusedLocal @method_decorator(require_GET, name="dispatch")
@require_GET @method_decorator(digest_login_required, name="dispatch")
@digest_login_required class JournalDefaultView(RedirectView):
def journal_default(request): """The default journal."""
"""The default journal. query_string = True
pattern_name = "accounting:journal"
Args: def get_redirect_url(self, *args, **kwargs):
request (HttpRequest) The request. kwargs["period"] = Period.default_spec()
return super().get_redirect_url(*args, **kwargs)
Returns:
HttpResponseRedirect: The redirection to the default month.
"""
return HttpResponseRedirect(
reverse("accounting:journal", args=(Period.default_spec(),)))
@require_GET @require_GET
@ -512,20 +474,16 @@ def journal(request, period):
}) })
# noinspection PyUnusedLocal @method_decorator(require_GET, name="dispatch")
@require_GET @method_decorator(digest_login_required, name="dispatch")
@digest_login_required class TrialBalanceDefaultView(RedirectView):
def trial_balance_default(request): """The default trial balance."""
"""The default trial balance. query_string = True
pattern_name = "accounting:trial-balance"
Args: def get_redirect_url(self, *args, **kwargs):
request (HttpRequest) The request. kwargs["period"] = Period.default_spec()
return super().get_redirect_url(*args, **kwargs)
Returns:
HttpResponseRedirect: The redirection to the default month.
"""
return HttpResponseRedirect(
reverse("accounting:trial-balance", args=(Period.default_spec(),)))
@require_GET @require_GET
@ -620,20 +578,16 @@ def trial_balance(request, period):
}) })
# noinspection PyUnusedLocal @method_decorator(require_GET, name="dispatch")
@require_GET @method_decorator(digest_login_required, name="dispatch")
@digest_login_required class IncomeStatementDefaultView(RedirectView):
def income_statement_default(request): """The default income statement."""
"""The default income statement. query_string = True
pattern_name = "accounting:income-statement"
Args: def get_redirect_url(self, *args, **kwargs):
request (HttpRequest) The request. kwargs["period"] = Period.default_spec()
return super().get_redirect_url(*args, **kwargs)
Returns:
HttpResponseRedirect: The redirection to the default month.
"""
return HttpResponseRedirect(
reverse("accounting:income-statement", args=(Period.default_spec(),)))
@require_GET @require_GET
@ -704,20 +658,16 @@ def income_statement(request, period):
}) })
# noinspection PyUnusedLocal @method_decorator(require_GET, name="dispatch")
@require_GET @method_decorator(digest_login_required, name="dispatch")
@digest_login_required class BalanceSheetDefaultView(RedirectView):
def balance_sheet_default(request): """The default balance sheet."""
"""The default balance sheet. query_string = True
pattern_name = "accounting:balance-sheet"
Args: def get_redirect_url(self, *args, **kwargs):
request (HttpRequest) The request. kwargs["period"] = Period.default_spec()
return super().get_redirect_url(*args, **kwargs)
Returns:
HttpResponseRedirect: The redirection to the default month.
"""
return HttpResponseRedirect(
reverse("accounting:balance-sheet", args=(Period.default_spec(),)))
@require_GET @require_GET