improved filter in account view

Signed-off-by: Stephan Richter <s.richter@srsoftware.de>
This commit is contained in:
2026-04-20 08:48:11 +02:00
parent 82d5a2a58d
commit 9cdf303553
+22 -10
View File
@@ -11,13 +11,15 @@
let account = $state(null); let account = $state(null);
let filter = $state([]); let filter = $state([]);
let transactions = $state([]); let transactions = $state([]);
let filtered = $derived(transactions.filter(t => checker(t.tags,filter)));
let users = {}; let users = {};
let sums = {}; let sums = $derived.by(calcSums);
function calcSums(){ function calcSums(){
let sums = {};
sums[0] = 0; sums[0] = 0;
for (let user of Object.values(users)) sums[user.id] = 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)){ for (let user of Object.values(users)){
if (user.id == transaction.destination.id) sums[user.id] += transaction.amount; if (user.id == transaction.destination.id) sums[user.id] += transaction.amount;
if (user.id == transaction.source.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.destination.id) sums[0] += transaction.amount;
if (!transaction.source.id) sums[0] -= transaction.amount; if (!transaction.source.id) sums[0] -= transaction.amount;
} }
return sums;
} }
function addToFilter(tag){ function addToFilter(tag){
filter.push(tag); filter.push(tag.toLowerCase());
} }
function checker(taglist, filter){ 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){ function dropTag(tag){
filter = filter.filter(x => x != tag); filter = filter.filter(x => x != tag.toLowerCase());
} }
async function load(){ async function load(){
@@ -48,7 +62,6 @@
transactions = json.transactions; transactions = json.transactions;
users = json.user_list; users = json.user_list;
account = json.account; account = json.account;
calcSums();
} else error(res); } else error(res);
} }
@@ -90,12 +103,10 @@
</tr> </tr>
</thead> </thead>
<tbody> <tbody>
{#each transactions as transaction, i} {#each filtered as transaction, i}
{#if checker(transaction.tags,filter)}
<Transaction {account} {addToFilter} {transaction} {users} /> <Transaction {account} {addToFilter} {transaction} {users} />
{/if}
{/each} {/each}
<tr> <tr class="sums">
<td> <td>
<br/> <br/>
{t('sums')} {t('sums')}
@@ -110,6 +121,7 @@
<br/> <br/>
{sums[0].toFixed(2)}&nbsp;{account.currency} {sums[0].toFixed(2)}&nbsp;{account.currency}
</td> </td>
<td colspan="2"></td>
</tr> </tr>
</tbody> </tbody>
</table> </table>