Added the base report class to ensure that the reports can both be shown on the page and downloaded as CSV.

This commit is contained in:
依瑪貓 2023-03-08 00:41:34 +08:00
parent 1eed16b732
commit 2f7b9932a0
7 changed files with 52 additions and 6 deletions

View File

@ -27,6 +27,7 @@ from accounting.locale import gettext
from accounting.models import Currency, BaseAccount, Account, Transaction, \ from accounting.models import Currency, BaseAccount, Account, Transaction, \
JournalEntry JournalEntry
from accounting.report.period import Period from accounting.report.period import Period
from .utils.base_report import BaseReport
from .utils.csv_export import BaseCSVRow, csv_download from .utils.csv_export import BaseCSVRow, csv_download
from .utils.option_link import OptionLink from .utils.option_link import OptionLink
from .utils.page_params import PageParams from .utils.page_params import PageParams
@ -371,7 +372,7 @@ class BalanceSheetPageParams(PageParams):
.order_by(Currency.code).all()] .order_by(Currency.code).all()]
class BalanceSheet: class BalanceSheet(BaseReport):
"""The balance sheet.""" """The balance sheet."""
def __init__(self, currency: Currency, period: Period): def __init__(self, currency: Currency, period: Period):

View File

@ -29,6 +29,7 @@ from accounting.models import Currency, Account, Transaction, JournalEntry
from accounting.report.income_expense_account import IncomeExpensesAccount from accounting.report.income_expense_account import IncomeExpensesAccount
from accounting.report.period import Period from accounting.report.period import Period
from accounting.utils.pagination import Pagination from accounting.utils.pagination import Pagination
from .utils.base_report import BaseReport
from .utils.csv_export import BaseCSVRow, csv_download from .utils.csv_export import BaseCSVRow, csv_download
from .utils.option_link import OptionLink from .utils.option_link import OptionLink
from .utils.page_params import PageParams from .utils.page_params import PageParams
@ -387,7 +388,7 @@ def _populate_entries(entries: list[Entry]) -> None:
entry.account = accounts[entry.entry.account_id] entry.account = accounts[entry.entry.account_id]
class IncomeExpenses: class IncomeExpenses(BaseReport):
"""The income and expenses log.""" """The income and expenses log."""
def __init__(self, currency: Currency, account: IncomeExpensesAccount, def __init__(self, currency: Currency, account: IncomeExpensesAccount,

View File

@ -27,6 +27,7 @@ from accounting.locale import gettext
from accounting.models import Currency, BaseAccount, Account, Transaction, \ from accounting.models import Currency, BaseAccount, Account, Transaction, \
JournalEntry JournalEntry
from accounting.report.period import Period from accounting.report.period import Period
from .utils.base_report import BaseReport
from .utils.csv_export import BaseCSVRow, csv_download from .utils.csv_export import BaseCSVRow, csv_download
from .utils.option_link import OptionLink from .utils.option_link import OptionLink
from .utils.page_params import PageParams from .utils.page_params import PageParams
@ -200,7 +201,7 @@ class IncomeStatementPageParams(PageParams):
.order_by(Currency.code).all()] .order_by(Currency.code).all()]
class IncomeStatement: class IncomeStatement(BaseReport):
"""The income statement.""" """The income statement."""
def __init__(self, currency: Currency, period: Period): def __init__(self, currency: Currency, period: Period):

View File

@ -28,6 +28,7 @@ from accounting.locale import gettext
from accounting.models import Currency, Account, Transaction, JournalEntry from accounting.models import Currency, Account, Transaction, JournalEntry
from accounting.report.period import Period from accounting.report.period import Period
from accounting.utils.pagination import Pagination from accounting.utils.pagination import Pagination
from .utils.base_report import BaseReport
from .utils.csv_export import BaseCSVRow, csv_download from .utils.csv_export import BaseCSVRow, csv_download
from .utils.page_params import PageParams from .utils.page_params import PageParams
from .utils.period_choosers import JournalPeriodChooser from .utils.period_choosers import JournalPeriodChooser
@ -172,7 +173,7 @@ def _populate_entries(entries: list[Entry]) -> None:
entry.currency = currencies[entry.entry.currency_code] entry.currency = currencies[entry.entry.currency_code]
class Journal: class Journal(BaseReport):
"""The journal.""" """The journal."""
def __init__(self, period: Period): def __init__(self, period: Period):

View File

@ -28,6 +28,7 @@ from accounting.locale import gettext
from accounting.models import Currency, Account, Transaction, JournalEntry from accounting.models import Currency, Account, Transaction, JournalEntry
from accounting.report.period import Period from accounting.report.period import Period
from accounting.utils.pagination import Pagination from accounting.utils.pagination import Pagination
from .utils.base_report import BaseReport
from .utils.csv_export import BaseCSVRow, csv_download from .utils.csv_export import BaseCSVRow, csv_download
from .utils.option_link import OptionLink from .utils.option_link import OptionLink
from .utils.page_params import PageParams from .utils.page_params import PageParams
@ -342,7 +343,7 @@ def _populate_entries(entries: list[Entry]) -> None:
entry.note = entry.transaction.note entry.note = entry.transaction.note
class Ledger: class Ledger(BaseReport):
"""The ledger.""" """The ledger."""
def __init__(self, currency: Currency, account: Account, period: Period): def __init__(self, currency: Currency, account: Account, period: Period):

View File

@ -26,6 +26,7 @@ from accounting import db
from accounting.locale import gettext from accounting.locale import gettext
from accounting.models import Currency, Account, Transaction, JournalEntry from accounting.models import Currency, Account, Transaction, JournalEntry
from accounting.report.period import Period from accounting.report.period import Period
from .utils.base_report import BaseReport
from .utils.csv_export import BaseCSVRow, csv_download from .utils.csv_export import BaseCSVRow, csv_download
from .utils.option_link import OptionLink from .utils.option_link import OptionLink
from .utils.page_params import PageParams from .utils.page_params import PageParams
@ -162,7 +163,7 @@ class TrialBalancePageParams(PageParams):
.order_by(Currency.code).all()] .order_by(Currency.code).all()]
class TrialBalance: class TrialBalance(BaseReport):
"""The trial balance.""" """The trial balance."""
def __init__(self, currency: Currency, period: Period): def __init__(self, currency: Currency, period: Period):

View File

@ -0,0 +1,40 @@
# The Mia! Accounting Flask Project.
# Author: imacat@mail.imacat.idv.tw (imacat), 2023/3/8
# Copyright (c) 2023 imacat.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
"""The base report.
"""
from abc import ABC, abstractmethod
from flask import Response
class BaseReport(ABC):
"""The base report class."""
@abstractmethod
def csv(self) -> Response:
"""Returns the report as CSV for download.
:return: The response of the report for download.
"""
@abstractmethod
def html(self) -> str:
"""Composes and returns the report as HTML.
:return: The report as HTML.
"""