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, \
|
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):
|
||||||
|
@ -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,
|
||||||
|
@ -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):
|
||||||
|
@ -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):
|
||||||
|
@ -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):
|
||||||
|
@ -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):
|
||||||
|
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