Added the period_spec function to be used to compose the download file name, to replace the spec property of the Period utility.
This commit is contained in:
parent
b0a4a735f3
commit
617dd29f23
@ -28,7 +28,7 @@ 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.base_report import BaseReport
|
||||||
from .utils.csv_export import BaseCSVRow, csv_download
|
from .utils.csv_export import BaseCSVRow, csv_download, period_spec
|
||||||
from .utils.option_link import OptionLink
|
from .utils.option_link import OptionLink
|
||||||
from .utils.page_params import PageParams
|
from .utils.page_params import PageParams
|
||||||
from .utils.period_choosers import BalanceSheetPeriodChooser
|
from .utils.period_choosers import BalanceSheetPeriodChooser
|
||||||
@ -428,7 +428,8 @@ class BalanceSheet(BaseReport):
|
|||||||
:return: The response of the report for download.
|
:return: The response of the report for download.
|
||||||
"""
|
"""
|
||||||
filename: str = "balance-sheet-{currency}-{period}.csv"\
|
filename: str = "balance-sheet-{currency}-{period}.csv"\
|
||||||
.format(currency=self.__currency.code, period=self.__period.spec)
|
.format(currency=self.__currency.code,
|
||||||
|
period=period_spec(self.__period))
|
||||||
return csv_download(filename, self.__get_csv_rows())
|
return csv_download(filename, self.__get_csv_rows())
|
||||||
|
|
||||||
def __get_csv_rows(self) -> list[CSVRow]:
|
def __get_csv_rows(self) -> list[CSVRow]:
|
||||||
|
@ -30,7 +30,7 @@ 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.base_report import BaseReport
|
||||||
from .utils.csv_export import BaseCSVRow, csv_download
|
from .utils.csv_export import BaseCSVRow, csv_download, period_spec
|
||||||
from .utils.option_link import OptionLink
|
from .utils.option_link import OptionLink
|
||||||
from .utils.page_params import PageParams
|
from .utils.page_params import PageParams
|
||||||
from .utils.period_choosers import IncomeExpensesPeriodChooser
|
from .utils.period_choosers import IncomeExpensesPeriodChooser
|
||||||
@ -421,7 +421,7 @@ class IncomeExpenses(BaseReport):
|
|||||||
"""
|
"""
|
||||||
filename: str = "income-expenses-{currency}-{account}-{period}.csv"\
|
filename: str = "income-expenses-{currency}-{account}-{period}.csv"\
|
||||||
.format(currency=self.__currency.code, account=self.__account.code,
|
.format(currency=self.__currency.code, account=self.__account.code,
|
||||||
period=self.__period.spec)
|
period=period_spec(self.__period))
|
||||||
return csv_download(filename, self.__get_csv_rows())
|
return csv_download(filename, self.__get_csv_rows())
|
||||||
|
|
||||||
def __get_csv_rows(self) -> list[CSVRow]:
|
def __get_csv_rows(self) -> list[CSVRow]:
|
||||||
|
@ -28,7 +28,7 @@ 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.base_report import BaseReport
|
||||||
from .utils.csv_export import BaseCSVRow, csv_download
|
from .utils.csv_export import BaseCSVRow, csv_download, period_spec
|
||||||
from .utils.option_link import OptionLink
|
from .utils.option_link import OptionLink
|
||||||
from .utils.page_params import PageParams
|
from .utils.page_params import PageParams
|
||||||
from .utils.period_choosers import IncomeStatementPeriodChooser
|
from .utils.period_choosers import IncomeStatementPeriodChooser
|
||||||
@ -310,7 +310,8 @@ class IncomeStatement(BaseReport):
|
|||||||
:return: The response of the report for download.
|
:return: The response of the report for download.
|
||||||
"""
|
"""
|
||||||
filename: str = "income-statement-{currency}-{period}.csv"\
|
filename: str = "income-statement-{currency}-{period}.csv"\
|
||||||
.format(currency=self.__currency.code, period=self.__period.spec)
|
.format(currency=self.__currency.code,
|
||||||
|
period=period_spec(self.__period))
|
||||||
return csv_download(filename, self.__get_csv_rows())
|
return csv_download(filename, self.__get_csv_rows())
|
||||||
|
|
||||||
def __get_csv_rows(self) -> list[CSVRow]:
|
def __get_csv_rows(self) -> list[CSVRow]:
|
||||||
|
@ -29,7 +29,7 @@ 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.base_report import BaseReport
|
||||||
from .utils.csv_export import BaseCSVRow, csv_download
|
from .utils.csv_export import BaseCSVRow, csv_download, period_spec
|
||||||
from .utils.page_params import PageParams
|
from .utils.page_params import PageParams
|
||||||
from .utils.period_choosers import JournalPeriodChooser
|
from .utils.period_choosers import JournalPeriodChooser
|
||||||
from .utils.report_chooser import ReportChooser
|
from .utils.report_chooser import ReportChooser
|
||||||
@ -208,7 +208,7 @@ class Journal(BaseReport):
|
|||||||
|
|
||||||
:return: The response of the report for download.
|
:return: The response of the report for download.
|
||||||
"""
|
"""
|
||||||
filename: str = f"journal-{self.__period.spec}.csv"
|
filename: str = f"journal-{period_spec(self.__period)}.csv"
|
||||||
return csv_download(filename, self.__get_csv_rows())
|
return csv_download(filename, self.__get_csv_rows())
|
||||||
|
|
||||||
def __get_csv_rows(self) -> list[CSVRow]:
|
def __get_csv_rows(self) -> list[CSVRow]:
|
||||||
|
@ -29,7 +29,7 @@ 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.base_report import BaseReport
|
||||||
from .utils.csv_export import BaseCSVRow, csv_download
|
from .utils.csv_export import BaseCSVRow, csv_download, period_spec
|
||||||
from .utils.option_link import OptionLink
|
from .utils.option_link import OptionLink
|
||||||
from .utils.page_params import PageParams
|
from .utils.page_params import PageParams
|
||||||
from .utils.period_choosers import LedgerPeriodChooser
|
from .utils.period_choosers import LedgerPeriodChooser
|
||||||
@ -375,7 +375,7 @@ class Ledger(BaseReport):
|
|||||||
"""
|
"""
|
||||||
filename: str = "ledger-{currency}-{account}-{period}.csv"\
|
filename: str = "ledger-{currency}-{account}-{period}.csv"\
|
||||||
.format(currency=self.__currency.code, account=self.__account.code,
|
.format(currency=self.__currency.code, account=self.__account.code,
|
||||||
period=self.__period.spec)
|
period=period_spec(self.__period))
|
||||||
return csv_download(filename, self.__get_csv_rows())
|
return csv_download(filename, self.__get_csv_rows())
|
||||||
|
|
||||||
def __get_csv_rows(self) -> list[CSVRow]:
|
def __get_csv_rows(self) -> list[CSVRow]:
|
||||||
|
@ -27,7 +27,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 .utils.base_report import BaseReport
|
from .utils.base_report import BaseReport
|
||||||
from .utils.csv_export import BaseCSVRow, csv_download
|
from .utils.csv_export import BaseCSVRow, csv_download, period_spec
|
||||||
from .utils.option_link import OptionLink
|
from .utils.option_link import OptionLink
|
||||||
from .utils.page_params import PageParams
|
from .utils.page_params import PageParams
|
||||||
from .utils.period_choosers import TrialBalancePeriodChooser
|
from .utils.period_choosers import TrialBalancePeriodChooser
|
||||||
@ -234,7 +234,8 @@ class TrialBalance(BaseReport):
|
|||||||
:return: The response of the report for download.
|
:return: The response of the report for download.
|
||||||
"""
|
"""
|
||||||
filename: str = "trial-balance-{currency}-{period}.csv"\
|
filename: str = "trial-balance-{currency}-{period}.csv"\
|
||||||
.format(currency=self.__currency.code, period=self.__period.spec)
|
.format(currency=self.__currency.code,
|
||||||
|
period=period_spec(self.__period))
|
||||||
return csv_download(filename, self.__get_csv_rows())
|
return csv_download(filename, self.__get_csv_rows())
|
||||||
|
|
||||||
def __get_csv_rows(self) -> list[CSVRow]:
|
def __get_csv_rows(self) -> list[CSVRow]:
|
||||||
|
@ -19,11 +19,14 @@
|
|||||||
"""
|
"""
|
||||||
import csv
|
import csv
|
||||||
from abc import ABC, abstractmethod
|
from abc import ABC, abstractmethod
|
||||||
|
from datetime import timedelta
|
||||||
from decimal import Decimal
|
from decimal import Decimal
|
||||||
from io import StringIO
|
from io import StringIO
|
||||||
|
|
||||||
from flask import Response
|
from flask import Response
|
||||||
|
|
||||||
|
from accounting.report.period import Period
|
||||||
|
|
||||||
|
|
||||||
class BaseCSVRow(ABC):
|
class BaseCSVRow(ABC):
|
||||||
"""The base CSV row."""
|
"""The base CSV row."""
|
||||||
@ -52,3 +55,36 @@ def csv_download(filename: str, rows: list[BaseCSVRow]) -> Response:
|
|||||||
response.headers["Content-Disposition"] \
|
response.headers["Content-Disposition"] \
|
||||||
= f"attachment; filename={filename}"
|
= f"attachment; filename={filename}"
|
||||||
return response
|
return response
|
||||||
|
|
||||||
|
|
||||||
|
def period_spec(period: Period) -> str:
|
||||||
|
"""Constructs the period specification to be used in the filename.
|
||||||
|
|
||||||
|
:param period: The period.
|
||||||
|
:return: The period specification to be used in the filename.
|
||||||
|
"""
|
||||||
|
start: str | None = None
|
||||||
|
if period.start is not None:
|
||||||
|
if period.start.month == 1 and period.start.day == 1:
|
||||||
|
start = str(period.start.year)
|
||||||
|
elif period.start.day == 1:
|
||||||
|
start = period.start.strftime("%Y%m")
|
||||||
|
else:
|
||||||
|
start = period.start.strftime("%Y%m%d")
|
||||||
|
end: str | None = None
|
||||||
|
if period.end is not None:
|
||||||
|
if period.end.month == 12 and period.end.day == 31:
|
||||||
|
end = str(period.end.year)
|
||||||
|
elif (period.end + timedelta(days=1)).day == 1:
|
||||||
|
end = period.end.strftime("%Y%m")
|
||||||
|
else:
|
||||||
|
end = period.end.strftime("%Y%m%d")
|
||||||
|
if start == end:
|
||||||
|
return start
|
||||||
|
if period.start is None and period.end is None:
|
||||||
|
return "all-time"
|
||||||
|
if period.start is None:
|
||||||
|
return f"until-{end}"
|
||||||
|
if period.end is None:
|
||||||
|
return f"since-{start}"
|
||||||
|
return f"{start}-{end}"
|
||||||
|
Loading…
Reference in New Issue
Block a user