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 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)} {account.currency}
|
{sums[0].toFixed(2)} {account.currency}
|
||||||
</td>
|
</td>
|
||||||
|
<td colspan="2"></td>
|
||||||
</tr>
|
</tr>
|
||||||
</tbody>
|
</tbody>
|
||||||
</table>
|
</table>
|
||||||
|
|||||||
Reference in New Issue
Block a user