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, \
JournalEntry
from accounting.report.period import Period
from .utils.base_report import BaseReport
from .utils.csv_export import BaseCSVRow, csv_download
from .utils.option_link import OptionLink
from .utils.page_params import PageParams
@ -371,7 +372,7 @@ class BalanceSheetPageParams(PageParams):
.order_by(Currency.code).all()]
class BalanceSheet:
class BalanceSheet(BaseReport):
"""The balance sheet."""
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.period import Period
from accounting.utils.pagination import Pagination
from .utils.base_report import BaseReport
from .utils.csv_export import BaseCSVRow, csv_download
from .utils.option_link import OptionLink
from .utils.page_params import PageParams
@ -387,7 +388,7 @@ def _populate_entries(entries: list[Entry]) -> None:
entry.account = accounts[entry.entry.account_id]
class IncomeExpenses:
class IncomeExpenses(BaseReport):
"""The income and expenses log."""
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, \
JournalEntry
from accounting.report.period import Period
from .utils.base_report import BaseReport
from .utils.csv_export import BaseCSVRow, csv_download
from .utils.option_link import OptionLink
from .utils.page_params import PageParams
@ -200,7 +201,7 @@ class IncomeStatementPageParams(PageParams):
.order_by(Currency.code).all()]
class IncomeStatement:
class IncomeStatement(BaseReport):
"""The income statement."""
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.report.period import Period
from accounting.utils.pagination import Pagination
from .utils.base_report import BaseReport
from .utils.csv_export import BaseCSVRow, csv_download
from .utils.page_params import PageParams
from .utils.period_choosers import JournalPeriodChooser
@ -172,7 +173,7 @@ def _populate_entries(entries: list[Entry]) -> None:
entry.currency = currencies[entry.entry.currency_code]
class Journal:
class Journal(BaseReport):
"""The journal."""
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.report.period import Period
from accounting.utils.pagination import Pagination
from .utils.base_report import BaseReport
from .utils.csv_export import BaseCSVRow, csv_download
from .utils.option_link import OptionLink
from .utils.page_params import PageParams
@ -342,7 +343,7 @@ def _populate_entries(entries: list[Entry]) -> None:
entry.note = entry.transaction.note
class Ledger:
class Ledger(BaseReport):
"""The ledger."""
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.models import Currency, Account, Transaction, JournalEntry
from accounting.report.period import Period
from .utils.base_report import BaseReport
from .utils.csv_export import BaseCSVRow, csv_download
from .utils.option_link import OptionLink
from .utils.page_params import PageParams
@ -162,7 +163,7 @@ class TrialBalancePageParams(PageParams):
.order_by(Currency.code).all()]
class TrialBalance:
class TrialBalance(BaseReport):
"""The trial balance."""
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.
"""