Added type hints to the accounting application.

This commit is contained in:
2020-08-13 07:25:35 +08:00
parent 9cb6f25ee5
commit d4e7458117
8 changed files with 302 additions and 287 deletions

View File

@ -18,6 +18,7 @@
"""The view controllers of the accounting application.
"""
import datetime
import json
import re
@ -26,7 +27,8 @@ from django.db import transaction
from django.db.models import Sum, Case, When, F, Q, Count, BooleanField, \
ExpressionWrapper
from django.db.models.functions import TruncMonth, Coalesce
from django.http import JsonResponse, HttpResponseRedirect, Http404
from django.http import JsonResponse, HttpResponseRedirect, Http404, \
HttpRequest, HttpResponse
from django.shortcuts import render, redirect
from django.template.loader import render_to_string
from django.urls import reverse
@ -62,16 +64,17 @@ class CashDefaultView(RedirectView):
@require_GET
@login_required
def cash(request, account, period):
def cash(request: HttpRequest, account: Account,
period: Period) -> HttpResponse:
"""The cash account.
Args:
request (HttpRequest) The request.
account (Account): The account.
period (Period): The period.
request: The request.
account: The account.
period: The period.
Returns:
HttpResponse: The response.
The response.
"""
# The accounting records
if account.code == "0":
@ -180,15 +183,15 @@ class CashSummaryDefaultView(RedirectView):
@require_GET
@login_required
def cash_summary(request, account):
def cash_summary(request: HttpRequest, account: Account) -> HttpResponse:
"""The cash account summary.
Args:
request (HttpRequest) The request.
account (Account): The account.
request: The request.
account: The account.
Returns:
HttpResponse: The response.
The response.
"""
# The account
accounts = utils.get_cash_accounts()
@ -278,16 +281,17 @@ class LedgerDefaultView(RedirectView):
@require_GET
@login_required
def ledger(request, account, period):
def ledger(request: HttpRequest, account: Account,
period: Period) -> HttpResponse:
"""The ledger.
Args:
request (HttpRequest) The request.
account (Account): The account.
period (Period): The period.
request: The request.
account: The account.
period: The period.
Returns:
HttpResponse: The response.
The response.
"""
# The accounting records
records = list(
@ -354,15 +358,15 @@ class LedgerSummaryDefaultView(RedirectView):
@require_GET
@login_required
def ledger_summary(request, account):
def ledger_summary(request: HttpRequest, account: Account) -> HttpResponse:
"""The ledger summary report.
Args:
request (HttpRequest) The request.
account (Account): The account.
request: The request.
account: The account.
Returns:
HttpResponse: The response.
The response.
"""
# The month summaries
months = [utils.MonthlySummary(**x) for x in Record.objects
@ -416,15 +420,15 @@ class JournalDefaultView(RedirectView):
@require_GET
@login_required
def journal(request, period):
def journal(request: HttpRequest, period: Period) -> HttpResponse:
"""The journal.
Args:
request (HttpRequest) The request.
period (Period): The period.
request: The request.
period: The period.
Returns:
HttpResponse: The response.
The response.
"""
# The accounting records
records = Record.objects \
@ -498,15 +502,15 @@ class TrialBalanceDefaultView(RedirectView):
@require_GET
@login_required
def trial_balance(request, period):
def trial_balance(request: HttpRequest, period: Period) -> HttpResponse:
"""The trial balance.
Args:
request (HttpRequest) The request.
period (Period): The period.
request: The request.
period: The period.
Returns:
HttpResponse: The response.
The response.
"""
# The accounts
nominal = list(
@ -601,15 +605,15 @@ class IncomeStatementDefaultView(RedirectView):
@require_GET
@login_required
def income_statement(request, period):
def income_statement(request: HttpRequest, period: Period) -> HttpResponse:
"""The income statement.
Args:
request (HttpRequest) The request.
period (Period): The period.
request: The request.
period: The period.
Returns:
HttpResponse: The response.
The response.
"""
# The accounts
accounts = list(
@ -676,15 +680,15 @@ class BalanceSheetDefaultView(RedirectView):
@require_GET
@login_required
def balance_sheet(request, period):
def balance_sheet(request: HttpRequest, period: Period) -> HttpResponse:
"""The balance sheet.
Args:
request (HttpRequest) The request.
period (Period): The period.
request: The request.
period: The period.
Returns:
HttpResponse: The response.
The response.
"""
# The accounts
accounts = list(
@ -764,14 +768,14 @@ def balance_sheet(request, period):
@require_GET
@login_required
def search(request):
def search(request: HttpRequest) -> HttpResponse:
"""The search.
Args:
request (HttpRequest) The request.
request: The request.
Returns:
HttpResponse: The response.
The response.
"""
# The accounting records
query = request.GET.get("q")
@ -809,16 +813,17 @@ class TransactionView(DetailView):
@require_GET
@login_required
def txn_form(request, txn_type, txn=None):
def txn_form(request: HttpRequest, txn_type: str,
txn: Transaction = None) -> HttpResponse:
"""The view to edit an accounting transaction.
Args:
request (HttpRequest): The request.
txn_type (str): The transaction type.
txn (Transaction): The transaction.
request: The request.
txn_type: The transaction type.
txn: The transaction.
Returns:
HttpResponse: The response.
The response.
"""
previous_post = stored_post.get_previous_post(request)
if previous_post is not None:
@ -847,16 +852,17 @@ def txn_form(request, txn_type, txn=None):
@require_POST
@login_required
def txn_store(request, txn_type, txn=None):
def txn_store(request: HttpRequest, txn_type: str,
txn: Transaction = None) -> HttpResponseRedirect:
"""The view to store an accounting transaction.
Args:
request (HttpRequest): The request.
txn_type (str): The transaction type.
txn (Transaction): The transaction.
request: The request.
txn_type: The transaction type.
txn: The transaction.
Returns:
HttpResponse: The response.
The response.
"""
post = request.POST.dict()
strip_post(post)
@ -900,15 +906,15 @@ class TransactionDeleteView(DeleteView):
@login_required
def txn_sort(request, date):
def txn_sort(request: HttpRequest, date: datetime.date) -> HttpResponse:
"""The view for the form to sort the transactions in a same day.
Args:
request (HttpRequest): The request.
date (datetime.date): The day.
request: The request.
date: The day.
Returns:
HttpResponse: The response.
The response.
Raises:
Http404: When there are less than two transactions in this day.
@ -977,15 +983,16 @@ class AccountView(DetailView):
@require_GET
@login_required
def account_form(request, account=None):
def account_form(request: HttpRequest,
account: Account = None) -> HttpResponse:
"""The view to edit an accounting transaction.
Args:
request (HttpRequest): The request.
account (Account): The account.
request: The request.
account: The account.
Returns:
HttpResponse: The response.
The response.
"""
previous_post = stored_post.get_previous_post(request)
if previous_post is not None:
@ -1005,15 +1012,16 @@ def account_form(request, account=None):
@require_POST
@login_required
def account_store(request, account=None):
def account_store(request: HttpRequest,
account: Account = None) -> HttpResponseRedirect:
"""The view to store an account.
Args:
request (HttpRequest): The request.
account (Account): The account.
request: The request.
account: The account.
Returns:
HttpResponseRedirect: The response.
The response.
"""
post = request.POST.dict()
strip_post(post)
@ -1040,7 +1048,8 @@ def account_store(request, account=None):
@require_POST
@login_required
def account_delete(request, account):
def account_delete(request: HttpRequest,
account: Account) -> HttpResponseRedirect:
"""The view to delete an account.
Args:
@ -1062,28 +1071,28 @@ def account_delete(request, account):
@require_GET
@login_required
def api_account_list(request):
def api_account_list(request: HttpRequest) -> JsonResponse:
"""The API view to return all the accounts.
Args:
request (HttpRequest): The request.
request: The request.
Returns:
JsonResponse: The response.
The response.
"""
return JsonResponse({x.code: x.title for x in Account.objects.all()})
@require_GET
@login_required
def api_account_options(request):
def api_account_options(request: HttpRequest) -> JsonResponse:
"""The API view to return the account options.
Args:
request (HttpRequest): The request.
request: The request.
Returns:
JsonResponse: The response.
The response.
"""
accounts = Account.objects\
.annotate(children_count=Count("child_set"))\