From b62f31d3857f049aaf82ee2e732699c6b761e9e6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E4=BE=9D=E7=91=AA=E8=B2=93?= Date: Thu, 9 Mar 2023 11:26:35 +0800 Subject: [PATCH] Added the get_income_statement_url utility to replace the common codes to retrieve the URL of an income statement. --- .../report/reports/balance_sheet.py | 19 +++++++++---------- .../report/reports/income_statement.py | 15 +++++---------- .../report/reports/utils/get_url.py | 14 ++++++++++++++ .../report/reports/utils/period_choosers.py | 9 +++------ .../report/reports/utils/report_chooser.py | 12 +++++------- 5 files changed, 36 insertions(+), 33 deletions(-) diff --git a/src/accounting/report/reports/balance_sheet.py b/src/accounting/report/reports/balance_sheet.py index cf1fe59..0ac3b16 100644 --- a/src/accounting/report/reports/balance_sheet.py +++ b/src/accounting/report/reports/balance_sheet.py @@ -30,7 +30,7 @@ from accounting.report.period import Period from .utils.base_page_params import BasePageParams from .utils.base_report import BaseReport from .utils.csv_export import BaseCSVRow, csv_download, period_spec -from .utils.get_url import get_ledger_url +from .utils.get_url import get_ledger_url, get_income_statement_url from .utils.option_link import OptionLink from .utils.period_choosers import BalanceSheetPeriodChooser from .utils.report_chooser import ReportChooser @@ -165,11 +165,10 @@ class AccountCollector: :return: None. """ - amount: Decimal | None = self.__query_accumulated() - url: str = url_for("accounting.report.income-statement", - currency=self.__currency, - period=self.__period.before) - self.__add_owner_s_equity(Account.ACCUMULATED_CHANGE_CODE, amount, url) + self.__add_owner_s_equity( + Account.ACCUMULATED_CHANGE_CODE, + self.__query_accumulated(), + get_income_statement_url(self.__currency, self.__period.before)) def __query_accumulated(self) -> Decimal | None: """Queries and returns the accumulated profit or loss. @@ -188,10 +187,10 @@ class AccountCollector: :return: None. """ - amount: Decimal | None = self.__query_currency_period() - url: str = url_for("accounting.report.income-statement", - currency=self.__currency, period=self.__period) - self.__add_owner_s_equity(Account.NET_CHANGE_CODE, amount, url) + self.__add_owner_s_equity( + Account.NET_CHANGE_CODE, + self.__query_currency_period(), + get_income_statement_url(self.__currency, self.__period)) def __query_currency_period(self) -> Decimal | None: """Queries and returns the net income or loss for current period. diff --git a/src/accounting/report/reports/income_statement.py b/src/accounting/report/reports/income_statement.py index 865180b..f053d03 100644 --- a/src/accounting/report/reports/income_statement.py +++ b/src/accounting/report/reports/income_statement.py @@ -20,7 +20,7 @@ from decimal import Decimal import sqlalchemy as sa -from flask import url_for, render_template, Response +from flask import render_template, Response from accounting import db from accounting.locale import gettext @@ -30,7 +30,7 @@ from accounting.report.period import Period from .utils.base_page_params import BasePageParams from .utils.base_report import BaseReport from .utils.csv_export import BaseCSVRow, csv_download, period_spec -from .utils.get_url import get_ledger_url +from .utils.get_url import get_ledger_url, get_income_statement_url from .utils.option_link import OptionLink from .utils.period_choosers import IncomeStatementPeriodChooser from .utils.report_chooser import ReportChooser @@ -187,14 +187,9 @@ class PageParams(BasePageParams): :return: The currency options. """ - def get_url(currency: Currency): - if self.period.is_default: - return url_for("accounting.report.income-statement-default", - currency=currency) - return url_for("accounting.report.income-statement", - currency=currency, period=self.period) - - return self._get_currency_options(get_url, self.currency) + return self._get_currency_options( + lambda x: get_income_statement_url(x, self.period), + self.currency) class IncomeStatement(BaseReport): diff --git a/src/accounting/report/reports/utils/get_url.py b/src/accounting/report/reports/utils/get_url.py index 4828d05..cf959e9 100644 --- a/src/accounting/report/reports/utils/get_url.py +++ b/src/accounting/report/reports/utils/get_url.py @@ -56,3 +56,17 @@ def get_income_expenses_url(currency: Currency, account: IncomeExpensesAccount, return url_for("accounting.report.income-expenses", currency=currency, account=account, period=period) + + +def get_income_statement_url(currency: Currency, period: Period) -> str: + """Returns the URL of an income statement. + + :param currency: The currency. + :param period: The period. + :return: The URL of the income statement. + """ + if period.is_default: + return url_for("accounting.report.income-statement-default", + currency=currency) + return url_for("accounting.report.income-statement", + currency=currency, period=period) diff --git a/src/accounting/report/reports/utils/period_choosers.py b/src/accounting/report/reports/utils/period_choosers.py index eb468a7..0f9545f 100644 --- a/src/accounting/report/reports/utils/period_choosers.py +++ b/src/accounting/report/reports/utils/period_choosers.py @@ -30,7 +30,8 @@ from accounting.report.income_expense_account import IncomeExpensesAccount from accounting.report.period import YearPeriod, Period, ThisMonth, \ LastMonth, SinceLastMonth, ThisYear, LastYear, Today, Yesterday, \ TemplatePeriod -from .get_url import get_ledger_url, get_income_expenses_url +from .get_url import get_ledger_url, get_income_expenses_url, \ + get_income_statement_url class PeriodChooser(ABC): @@ -183,11 +184,7 @@ class IncomeStatementPeriodChooser(PeriodChooser): super().__init__(None if first is None else first.date) def _url_for(self, period: Period) -> str: - if period.is_default: - return url_for("accounting.report.income-statement-default", - currency=self.currency) - return url_for("accounting.report.income-statement", - currency=self.currency, period=period) + return get_income_statement_url(self.currency, period) class BalanceSheetPeriodChooser(PeriodChooser): diff --git a/src/accounting/report/reports/utils/report_chooser.py b/src/accounting/report/reports/utils/report_chooser.py index b741ac5..e45a914 100644 --- a/src/accounting/report/reports/utils/report_chooser.py +++ b/src/accounting/report/reports/utils/report_chooser.py @@ -32,7 +32,8 @@ from accounting.models import Currency, Account from accounting.report.income_expense_account import IncomeExpensesAccount from accounting.report.period import Period from accounting.template_globals import default_currency_code -from .get_url import get_ledger_url, get_income_expenses_url +from .get_url import get_ledger_url, get_income_expenses_url, \ + get_income_statement_url from .option_link import OptionLink from .report_type import ReportType @@ -144,12 +145,9 @@ class ReportChooser: :return: The income statement. """ - url: str = url_for("accounting.report.income-statement-default", - currency=self.__currency) \ - if self.__period.is_default \ - else url_for("accounting.report.income-statement", - currency=self.__currency, period=self.__period) - return OptionLink(gettext("Income Statement"), url, + return OptionLink(gettext("Income Statement"), + get_income_statement_url(self.__currency, + self.__period), self.__active_report == ReportType.INCOME_STATEMENT, fa_icon="fa-solid fa-file-invoice-dollar")