diff --git a/static/js/index.js b/static/js/index.js index 8ca62b4..471a03d 100644 --- a/static/js/index.js +++ b/static/js/index.js @@ -19,7 +19,8 @@ window.app = Vue.createApp({ }, transactionFilter: { user_id: null, // For filtering by user - account_type: null // For filtering by receivable/payable (asset/liability) + account_type: null, // For filtering by receivable/payable (asset/liability) + days: 5 // Number of days to fetch (5, 30, 60, 90) }, accounts: [], currencies: [], @@ -355,6 +356,11 @@ window.app = Vue.createApp({ // Build query params with filters let queryParams = `limit=${limit}&offset=${currentOffset}` + + // Add days filter (default 5) + const days = this.transactionFilter.days || 5 + queryParams += `&days=${days}` + if (this.transactionFilter.user_id) { queryParams += `&filter_user_id=${this.transactionFilter.user_id}` } @@ -389,6 +395,12 @@ window.app = Vue.createApp({ this.transactionPagination.offset = 0 this.loadTransactions(0) }, + setTransactionDays(days) { + // Update days filter and reload from first page + this.transactionFilter.days = days + this.transactionPagination.offset = 0 + this.loadTransactions(0) + }, nextTransactionsPage() { if (this.transactionPagination.has_next) { const newOffset = this.transactionPagination.offset + this.transactionPagination.limit diff --git a/templates/castle/index.html b/templates/castle/index.html index 8d2268d..77c73cb 100644 --- a/templates/castle/index.html +++ b/templates/castle/index.html @@ -336,6 +336,26 @@ + +
+
+
Show transactions from:
+ +
+
+
diff --git a/views_api.py b/views_api.py index 0e79ede..1a87917 100644 --- a/views_api.py +++ b/views_api.py @@ -358,11 +358,15 @@ 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 ) -> dict: """ Get journal entries that affect the current user's accounts from Fava/Beancount. Returns transactions in reverse chronological order with optional filtering. + + Args: + days: Number of days to fetch (default: 5, options: 5, 30, 60, 90) """ from lnbits.settings import settings as lnbits_settings from .fava_client import get_fava_client @@ -377,9 +381,9 @@ 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 (last 30 days for performance) - # This drastically reduces data fetched for users with large ledgers - all_entries = await fava.get_journal_entries(days=30) + # 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) # Filter and transform entries filtered_entries = []