Adds custom date range filtering to transactions

Enables users to filter transactions by a custom date range, providing more flexibility in viewing transaction history.

Prioritizes custom date range over preset days for filtering.

Displays a warning if a user attempts to apply a custom date range without selecting both start and end dates.
This commit is contained in:
Padreug 2025-12-14 12:47:23 +01:00
parent f2df2f543b
commit 1d2eb05c36
4 changed files with 162 additions and 23 deletions

View file

@ -399,7 +399,9 @@ async def api_get_user_entries(
offset: int = 0,
filter_user_id: str = None,
filter_account_type: str = None, # 'asset' for receivable, 'liability' for payable
days: int = 5, # Default 5 days, options: 5, 30, 60, 90
days: int = 15, # Default 15 days, options: 15, 30, 60
start_date: str = None, # ISO format: YYYY-MM-DD
end_date: str = None, # ISO format: YYYY-MM-DD
) -> dict:
"""
Get journal entries that affect the current user's accounts from Fava/Beancount.
@ -407,7 +409,12 @@ async def api_get_user_entries(
Returns transactions in reverse chronological order with optional filtering.
Args:
days: Number of days to fetch (default: 5, options: 5, 30, 60, 90)
days: Number of days to fetch (default: 15, options: 15, 30, 60)
start_date: Start date for custom range (YYYY-MM-DD). Requires end_date.
end_date: End date for custom range (YYYY-MM-DD). Requires start_date.
Note:
If both days and start_date/end_date are provided, start_date/end_date takes precedence.
"""
from lnbits.settings import settings as lnbits_settings
from .fava_client import get_fava_client
@ -422,9 +429,13 @@ async def api_get_user_entries(
# Regular user can only see their own entries
target_user_id = wallet.wallet.user
# Get journal entries from Fava (default last 5 days for performance)
# User can request 30, 60, or 90 days via query parameter
all_entries = await fava.get_journal_entries(days=days)
# Get journal entries from Fava
# Priority: custom date range > days > default (5 days)
all_entries = await fava.get_journal_entries(
days=days,
start_date=start_date,
end_date=end_date
)
# Filter and transform entries
filtered_entries = []