Added the default report view as the income and expenses log with the default currency, default account and default period. Changed the previous default journal links to the current default.

This commit is contained in:
依瑪貓 2023-03-09 20:37:39 +08:00
parent ec257a4b57
commit 05ac5158f8
11 changed files with 56 additions and 12 deletions

View File

@ -19,6 +19,8 @@
""" """
import typing as t import typing as t
from flask import current_app
from accounting.locale import gettext from accounting.locale import gettext
from accounting.models import Account from accounting.models import Account
@ -62,3 +64,23 @@ class IncomeExpensesAccount:
account.title = gettext("current assets and liabilities") account.title = gettext("current assets and liabilities")
account.str = account.title account.str = account.title
return account return account
def default_io_account_code() -> str:
"""Returns the default account code for the income and expenses log.
:return: The default account code for the income and expenses log.
"""
with current_app.app_context():
return current_app.config.get("DEFAULT_IO_ACCOUNT", Account.CASH_CODE)
def default_io_account() -> IncomeExpensesAccount:
"""Returns the default account for the income and expenses log.
:return: The default account for the income and expenses log.
"""
code: str = default_io_account_code()
if code == IncomeExpensesAccount.CURRENT_AL_CODE:
return IncomeExpensesAccount.current_assets_and_liabilities()
return IncomeExpensesAccount(Account.find_by_code(code))

View File

@ -21,7 +21,9 @@ from flask import url_for
from accounting.models import Currency, Account from accounting.models import Currency, Account
from accounting.report.period import Period from accounting.report.period import Period
from .income_expense_account import IncomeExpensesAccount from accounting.template_globals import default_currency_code
from .income_expense_account import IncomeExpensesAccount, \
default_io_account_code
def journal_url(period: Period) \ def journal_url(period: Period) \
@ -62,6 +64,10 @@ def income_expenses_url(currency: Currency, account: IncomeExpensesAccount,
:param period: The period. :param period: The period.
:return: The URL of the income and expenses log. :return: The URL of the income and expenses log.
""" """
if currency.code == default_currency_code() \
and account.code == default_io_account_code() \
and period.is_default:
return url_for("accounting.report.default")
if period.is_default: if period.is_default:
return url_for("accounting.report.income-expenses-default", return url_for("accounting.report.income-expenses-default",
currency=currency, account=account) currency=currency, account=account)

View File

@ -19,19 +19,35 @@
""" """
from flask import Blueprint, request, Response from flask import Blueprint, request, Response
from accounting import db
from accounting.models import Currency, Account from accounting.models import Currency, Account
from accounting.report.period import Period, get_period from accounting.report.period import Period, get_period
from accounting.template_globals import default_currency_code
from accounting.utils.permission import has_permission, can_view from accounting.utils.permission import has_permission, can_view
from .reports import Journal, Ledger, IncomeExpenses, TrialBalance, \ from .reports import Journal, Ledger, IncomeExpenses, TrialBalance, \
IncomeStatement, BalanceSheet, Search IncomeStatement, BalanceSheet, Search
from .template_filters import format_amount from .template_filters import format_amount
from .utils.income_expense_account import IncomeExpensesAccount from .utils.income_expense_account import IncomeExpensesAccount, \
default_io_account
bp: Blueprint = Blueprint("report", __name__) bp: Blueprint = Blueprint("report", __name__)
"""The view blueprint for the reports.""" """The view blueprint for the reports."""
bp.add_app_template_filter(format_amount, "accounting_report_format_amount") bp.add_app_template_filter(format_amount, "accounting_report_format_amount")
@bp.get("", endpoint="default")
@has_permission(can_view)
def get_default_report() -> str | Response:
"""Returns the income and expenses log in the default period.
:return: The income and expenses log in the default period.
"""
return __get_income_expenses_list(
db.session.get(Currency, default_currency_code()),
default_io_account(),
get_period())
@bp.get("journal", endpoint="journal-default") @bp.get("journal", endpoint="journal-default")
@has_permission(can_view) @has_permission(can_view)
def get_default_journal_list() -> str | Response: def get_default_journal_list() -> str | Response:

View File

@ -28,7 +28,7 @@ First written: 2023/1/26
</span> </span>
<ul class="dropdown-menu"> <ul class="dropdown-menu">
<li> <li>
<a class="dropdown-item {% if request.endpoint.startswith("accounting.report.") %} active {% endif %}" href="{{ url_for("accounting.report.journal-default") }}"> <a class="dropdown-item {% if request.endpoint.startswith("accounting.report.") %} active {% endif %}" href="{{ url_for("accounting.report.default") }}">
<i class="fa-solid fa-book"></i> <i class="fa-solid fa-book"></i>
{{ A_("Reports") }} {{ A_("Reports") }}
</a> </a>

View File

@ -23,6 +23,6 @@ First written: 2023/2/25
{% block header %}{% block title %}{{ A_("Add a New Cash Expense Transaction") }}{% endblock %}{% endblock %} {% block header %}{% block title %}{{ A_("Add a New Cash Expense Transaction") }}{% endblock %}{% endblock %}
{% block back_url %}{{ request.args.get("next") or url_for("accounting.report.journal-default") }}{% endblock %} {% block back_url %}{{ request.args.get("next") or url_for("accounting.report.default") }}{% endblock %}
{% block action_url %}{{ url_for("accounting.transaction.store", txn_type=txn_type) }}{% endblock %} {% block action_url %}{{ url_for("accounting.transaction.store", txn_type=txn_type) }}{% endblock %}

View File

@ -26,7 +26,7 @@ First written: 2023/2/26
{% block content %} {% block content %}
<div class="btn-group mb-3"> <div class="btn-group mb-3">
<a class="btn btn-primary" href="{{ url_for("accounting.report.journal-default")|accounting_or_next }}"> <a class="btn btn-primary" href="{{ url_for("accounting.report.default")|accounting_or_next }}">
<i class="fa-solid fa-circle-chevron-left"></i> <i class="fa-solid fa-circle-chevron-left"></i>
{{ A_("Back") }} {{ A_("Back") }}
</a> </a>

View File

@ -23,6 +23,6 @@ First written: 2023/2/25
{% block header %}{% block title %}{{ A_("Add a New Cash Income Transaction") }}{% endblock %}{% endblock %} {% block header %}{% block title %}{{ A_("Add a New Cash Income Transaction") }}{% endblock %}{% endblock %}
{% block back_url %}{{ request.args.get("next") or url_for("accounting.report.journal-default") }}{% endblock %} {% block back_url %}{{ request.args.get("next") or url_for("accounting.report.default") }}{% endblock %}
{% block action_url %}{{ url_for("accounting.transaction.store", txn_type=txn_type) }}{% endblock %} {% block action_url %}{{ url_for("accounting.transaction.store", txn_type=txn_type) }}{% endblock %}

View File

@ -31,7 +31,7 @@ First written: 2023/2/26
{% block content %} {% block content %}
<div class="btn-group mb-3"> <div class="btn-group mb-3">
<a class="btn btn-primary" href="{{ url_for("accounting.report.journal-default")|accounting_or_next }}"> <a class="btn btn-primary" href="{{ url_for("accounting.report.default")|accounting_or_next }}">
<i class="fa-solid fa-circle-chevron-left"></i> <i class="fa-solid fa-circle-chevron-left"></i>
{{ A_("Back") }} {{ A_("Back") }}
</a> </a>

View File

@ -23,6 +23,6 @@ First written: 2023/2/25
{% block header %}{% block title %}{{ A_("Add a New Transfer Transaction") }}{% endblock %}{% endblock %} {% block header %}{% block title %}{{ A_("Add a New Transfer Transaction") }}{% endblock %}{% endblock %}
{% block back_url %}{{ request.args.get("next") or url_for("accounting.report.journal-default") }}{% endblock %} {% block back_url %}{{ request.args.get("next") or url_for("accounting.report.default") }}{% endblock %}
{% block action_url %}{{ url_for("accounting.transaction.store", txn_type=txn_type) }}{% endblock %} {% block action_url %}{{ url_for("accounting.transaction.store", txn_type=txn_type) }}{% endblock %}

View File

@ -163,7 +163,7 @@ def delete_transaction(txn: Transaction) -> redirect:
sort_transactions_in(txn.date, txn.id) sort_transactions_in(txn.date, txn.id)
db.session.commit() db.session.commit()
flash(lazy_gettext("The transaction is deleted successfully."), "success") flash(lazy_gettext("The transaction is deleted successfully."), "success")
return redirect(or_next(url_for("accounting.report.journal-default"))) return redirect(or_next(url_for("accounting.report.default")))
@bp.get("/dates/<date:txn_date>", endpoint="order") @bp.get("/dates/<date:txn_date>", endpoint="order")
@ -194,10 +194,10 @@ def sort_transactions(txn_date: date) -> redirect:
form.save_order() form.save_order()
if not form.is_modified: if not form.is_modified:
flash(lazy_gettext("The order was not modified."), "success") flash(lazy_gettext("The order was not modified."), "success")
return redirect(or_next(url_for("accounting.report.journal-default"))) return redirect(or_next(url_for("accounting.report.default")))
db.session.commit() db.session.commit()
flash(lazy_gettext("The order is updated successfully."), "success") flash(lazy_gettext("The order is updated successfully."), "success")
return redirect(or_next(url_for("accounting.report.journal-default"))) return redirect(or_next(url_for("accounting.report.default")))
def __get_detail_uri(txn: Transaction) -> str: def __get_detail_uri(txn: Transaction) -> str:

View File

@ -35,7 +35,7 @@ from testlib_txn import Accounts, get_add_form, get_unchanged_update_form, \
PREFIX: str = "/accounting/transactions" PREFIX: str = "/accounting/transactions"
"""The URL prefix for the transaction management.""" """The URL prefix for the transaction management."""
RETURN_TO_URI: str = "/accounting/reports/journal" RETURN_TO_URI: str = "/accounting/reports"
"""The URL to return to after the operation.""" """The URL to return to after the operation."""