improved filter in account view
Signed-off-by: Stephan Richter <s.richter@srsoftware.de>
This commit is contained in:
@@ -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 @@
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
{#each transactions as transaction, i}
|
||||
{#if checker(transaction.tags,filter)}
|
||||
{#each filtered as transaction, i}
|
||||
<Transaction {account} {addToFilter} {transaction} {users} />
|
||||
{/if}
|
||||
{/each}
|
||||
<tr>
|
||||
<tr class="sums">
|
||||
<td>
|
||||
<br/>
|
||||
{t('sums')}
|
||||
@@ -110,6 +121,7 @@
|
||||
<br/>
|
||||
{sums[0].toFixed(2)} {account.currency}
|
||||
</td>
|
||||
<td colspan="2"></td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
|
||||
Reference in New Issue
Block a user