diff --git a/frontend/src/routes/accounting/account.svelte b/frontend/src/routes/accounting/account.svelte index 6781f810..54f58237 100644 --- a/frontend/src/routes/accounting/account.svelte +++ b/frontend/src/routes/accounting/account.svelte @@ -11,13 +11,15 @@ let account = $state(null); let filter = $state([]); let transactions = $state([]); + let filtered = $derived(transactions.filter(t => checker(t.tags,filter))); let users = {}; - let sums = {}; + let sums = $derived.by(calcSums); function calcSums(){ + let sums = {}; sums[0] = 0; for (let user of Object.values(users)) sums[user.id] = 0; - for (let transaction of transactions) { + for (let transaction of filtered) { for (let user of Object.values(users)){ if (user.id == transaction.destination.id) sums[user.id] += transaction.amount; if (user.id == transaction.source.id) sums[user.id] -= transaction.amount; @@ -25,18 +27,30 @@ if (!transaction.destination.id) sums[0] += transaction.amount; if (!transaction.source.id) sums[0] -= transaction.amount; } + return sums; } function addToFilter(tag){ - filter.push(tag); + filter.push(tag.toLowerCase()); } function checker(taglist, filter){ - return filter.every(tag => taglist.includes(tag)); + // TODO: make case-insensitive + for (var f of filter){ + var included = false; + for (var t of taglist){ + if (t.toLowerCase() == f) { + included = true; + break; + } + } + if (!included) return false; + } + return true; } function dropTag(tag){ - filter = filter.filter(x => x != tag); + filter = filter.filter(x => x != tag.toLowerCase()); } async function load(){ @@ -48,7 +62,6 @@ transactions = json.transactions; users = json.user_list; account = json.account; - calcSums(); } else error(res); } @@ -90,12 +103,10 @@
- {#each transactions as transaction, i} - {#if checker(transaction.tags,filter)} + {#each filtered as transaction, i}