Implement summing per category group
All checks were successful
continuous-integration/drone/push Build is passing
continuous-integration/drone/pr Build is passing

This commit is contained in:
Jan Bader 2022-03-05 22:23:41 +00:00
parent 97de326527
commit b176ce26ba
2 changed files with 27 additions and 10 deletions

View File

@ -96,9 +96,13 @@ function assignedChanged(e : Event, category : Category){
<span class="hidden sm:block text-right">Available</span> <span class="hidden sm:block text-right">Available</span>
<template v-for="group in GroupsForMonth"> <template v-for="group in GroupsForMonth">
<a <a
class="text-lg font-bold col-span-2 sm:col-span-4 lg:col-span-5" class="text-lg font-bold"
@click="toggleGroup(group)" @click="toggleGroup(group)"
>{{ (getGroupState(group) ? "" : "+") + " " + group.Name }}</a> >{{ (getGroupState(group) ? "" : "+") + " " + group.Name }}</a>
<Currency :value="group.AvailableLastMonth" class="hidden lg:block" />
<Currency :value="group.Assigned" class="hidden sm:block mx-2 text-right" />
<Currency :value="group.Activity" class="hidden sm:block" />
<Currency :value="group.Available" />
<template v-for="category in GetCategories(group.Name)" v-if="getGroupState(group)"> <template v-for="category in GetCategories(group.Name)" v-if="getGroupState(group)">
<span class="whitespace-nowrap overflow-hidden">{{ category.Name }}</span> <span class="whitespace-nowrap overflow-hidden">{{ category.Name }}</span>
<Currency :value="category.AvailableLastMonth" class="hidden lg:block" /> <Currency :value="category.AvailableLastMonth" class="hidden lg:block" />

View File

@ -51,7 +51,7 @@ export const useAccountStore = defineStore("budget/account", {
return [...monthMap?.values() || []]; return [...monthMap?.values() || []];
}, },
GetCategoryAvailable(state) { GetCategoryAvailable(state) {
return (category : Category) : number => { return (category: Category): number => {
return category.AvailableLastMonth + Number(category.Assigned) + category.Activity; return category.AvailableLastMonth + Number(category.Assigned) + category.Activity;
} }
}, },
@ -62,7 +62,7 @@ export const useAccountStore = defineStore("budget/account", {
GetIncomeAvailable(state) { GetIncomeAvailable(state) {
return (year: number, month: number) => { return (year: number, month: number) => {
const IncomeCategoryID = this.GetIncomeCategoryID; const IncomeCategoryID = this.GetIncomeCategoryID;
if(IncomeCategoryID == null) if (IncomeCategoryID == null)
return 0; return 0;
const categories = this.AllCategoriesForMonth(year, month); const categories = this.AllCategoriesForMonth(year, month);
@ -80,13 +80,26 @@ export const useAccountStore = defineStore("budget/account", {
for (const category of categories) { for (const category of categories) {
if (category.ID == this.GetIncomeCategoryID) if (category.ID == this.GetIncomeCategoryID)
continue; continue;
if (category.Group != prev) if (prev == undefined || category.Group != prev.Name) {
categoryGroups.push({ prev = {
Name: category.Group, Name: category.Group,
Expand: category.Group != "Hidden Categories", Available: this.GetCategoryAvailable(category),
AvailableLastMonth: category.AvailableLastMonth,
Activity: category.Activity,
Assigned: category.Assigned,
}
categoryGroups.push({
...prev,
Expand: prev.Name != "Hidden Categories",
}); });
prev = category.Group; } else {
categoryGroups[categoryGroups.length-1].Available += this.GetCategoryAvailable(category);
categoryGroups[categoryGroups.length-1].AvailableLastMonth += category.AvailableLastMonth;
categoryGroups[categoryGroups.length-1].Activity += category.Activity;
categoryGroups[categoryGroups.length-1].Assigned += category.Assigned;
continue;
}
} }
return categoryGroups; return categoryGroups;
} }
@ -142,7 +155,7 @@ export const useAccountStore = defineStore("budget/account", {
account.Transactions = transactions; account.Transactions = transactions;
}, },
async FetchMonthBudget(budgetid: string, year: number, month: number) { async FetchMonthBudget(budgetid: string, year: number, month: number) {
const result = await GET("/budget/" + budgetid + "/" + year + "/" + (month+1)); const result = await GET("/budget/" + budgetid + "/" + year + "/" + (month + 1));
const response = await result.json(); const response = await result.json();
if (response.Categories == undefined || response.Categories.length <= 0) if (response.Categories == undefined || response.Categories.length <= 0)
return; return;
@ -153,7 +166,7 @@ export const useAccountStore = defineStore("budget/account", {
const response = await result.json(); const response = await result.json();
useBudgetsStore().MergeBudgetingData(response); useBudgetsStore().MergeBudgetingData(response);
if(!isOpen) { if (!isOpen) {
this.Accounts.delete(accountid); this.Accounts.delete(accountid);
} }
}, },