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:
parent
1eed16b732
commit
2f7b9932a0
@ -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):
|
||||
|
@ -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,
|
||||
|
@ -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):
|
||||
|
@ -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):
|
||||
|
@ -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):
|
||||
|
@ -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):
|
||||
|
40
src/accounting/report/reports/utils/base_report.py
Normal file
40
src/accounting/report/reports/utils/base_report.py
Normal 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.
|
||||
"""
|
Loading…
Reference in New Issue
Block a user