Added the get_balance_sheet_url utility to replace the common codes to retrieve the URL of an income statement.

This commit is contained in:
依瑪貓 2023-03-09 11:37:06 +08:00
parent a65dccac92
commit 140d3c6010
4 changed files with 27 additions and 26 deletions

View File

@ -20,7 +20,7 @@
from decimal import Decimal from decimal import Decimal
import sqlalchemy as sa import sqlalchemy as sa
from flask import url_for, render_template, Response from flask import render_template, Response
from accounting import db from accounting import db
from accounting.locale import gettext from accounting.locale import gettext
@ -30,7 +30,8 @@ from accounting.report.period import Period
from .utils.base_page_params import BasePageParams from .utils.base_page_params import BasePageParams
from .utils.base_report import BaseReport from .utils.base_report import BaseReport
from .utils.csv_export import BaseCSVRow, csv_download, period_spec from .utils.csv_export import BaseCSVRow, csv_download, period_spec
from .utils.get_url import get_ledger_url, get_income_statement_url from .utils.get_url import get_ledger_url, get_balance_sheet_url, \
get_income_statement_url
from .utils.option_link import OptionLink from .utils.option_link import OptionLink
from .utils.period_choosers import BalanceSheetPeriodChooser from .utils.period_choosers import BalanceSheetPeriodChooser
from .utils.report_chooser import ReportChooser from .utils.report_chooser import ReportChooser
@ -346,14 +347,8 @@ class PageParams(BasePageParams):
:return: The currency options. :return: The currency options.
""" """
def get_url(currency: Currency): return self._get_currency_options(
if self.period.is_default: lambda x: get_balance_sheet_url(x, self.period), self.currency)
return url_for("accounting.report.balance-sheet-default",
currency=currency)
return url_for("accounting.report.balance-sheet",
currency=currency, period=self.period)
return self._get_currency_options(get_url, self.currency)
class BalanceSheet(BaseReport): class BalanceSheet(BaseReport):

View File

@ -96,3 +96,17 @@ def get_income_statement_url(currency: Currency, period: Period) -> str:
currency=currency) currency=currency)
return url_for("accounting.report.income-statement", return url_for("accounting.report.income-statement",
currency=currency, period=period) currency=currency, period=period)
def get_balance_sheet_url(currency: Currency, period: Period) -> str:
"""Returns the URL of a balance sheet.
:param currency: The currency.
:param period: The period.
:return: The URL of the balance sheet.
"""
if period.is_default:
return url_for("accounting.report.balance-sheet-default",
currency=currency)
return url_for("accounting.report.balance-sheet",
currency=currency, period=period)

View File

@ -23,15 +23,14 @@ This file is largely taken from the NanoParma ERP project, first written in
from abc import ABC, abstractmethod from abc import ABC, abstractmethod
from datetime import date from datetime import date
from flask import url_for
from accounting.models import Currency, Account, Transaction from accounting.models import Currency, Account, Transaction
from accounting.report.income_expense_account import IncomeExpensesAccount from accounting.report.income_expense_account import IncomeExpensesAccount
from accounting.report.period import YearPeriod, Period, ThisMonth, \ from accounting.report.period import YearPeriod, Period, ThisMonth, \
LastMonth, SinceLastMonth, ThisYear, LastYear, Today, Yesterday, \ LastMonth, SinceLastMonth, ThisYear, LastYear, Today, Yesterday, \
TemplatePeriod TemplatePeriod
from .get_url import get_journal_url, get_ledger_url, \ from .get_url import get_journal_url, get_ledger_url, \
get_income_expenses_url, get_trial_balance_url, get_income_statement_url get_income_expenses_url, get_trial_balance_url, get_income_statement_url, \
get_balance_sheet_url
class PeriodChooser(ABC): class PeriodChooser(ABC):
@ -193,8 +192,4 @@ class BalanceSheetPeriodChooser(PeriodChooser):
super().__init__(None if first is None else first.date) super().__init__(None if first is None else first.date)
def _url_for(self, period: Period) -> str: def _url_for(self, period: Period) -> str:
if period.is_default: return get_balance_sheet_url(self.currency, period)
return url_for("accounting.report.balance-sheet-default",
currency=self.currency)
return url_for("accounting.report.balance-sheet",
currency=self.currency, period=period)

View File

@ -23,7 +23,6 @@ This file is largely taken from the NanoParma ERP project, first written in
import re import re
import typing as t import typing as t
from flask import url_for
from flask_babel import LazyString from flask_babel import LazyString
from accounting import db from accounting import db
@ -33,7 +32,8 @@ from accounting.report.income_expense_account import IncomeExpensesAccount
from accounting.report.period import Period from accounting.report.period import Period
from accounting.template_globals import default_currency_code from accounting.template_globals import default_currency_code
from .get_url import get_journal_url, get_ledger_url, \ from .get_url import get_journal_url, get_ledger_url, \
get_income_expenses_url, get_trial_balance_url, get_income_statement_url get_income_expenses_url, get_trial_balance_url, get_income_statement_url, \
get_balance_sheet_url
from .option_link import OptionLink from .option_link import OptionLink
from .report_type import ReportType from .report_type import ReportType
@ -151,12 +151,9 @@ class ReportChooser:
:return: The balance sheet. :return: The balance sheet.
""" """
url: str = url_for("accounting.report.balance-sheet-default", return OptionLink(gettext("Balance Sheet"),
currency=self.__currency) \ get_balance_sheet_url(self.__currency,
if self.__period.is_default \ self.__period),
else url_for("accounting.report.balance-sheet",
currency=self.__currency, period=self.__period)
return OptionLink(gettext("Balance Sheet"), url,
self.__active_report == ReportType.BALANCE_SHEET, self.__active_report == ReportType.BALANCE_SHEET,
fa_icon="fa-solid fa-scale-balanced") fa_icon="fa-solid fa-scale-balanced")