From 79fd95e1523b2a85789b8d13d267c492bb39276d Mon Sep 17 00:00:00 2001 From: Jan Bader Date: Sun, 27 Feb 2022 15:22:18 +0000 Subject: [PATCH 1/3] Calculate working, cleared and reconciled balance --- postgres/accounts.sql.go | 21 +++++++++++++-------- postgres/queries/accounts.sql | 7 ++++--- 2 files changed, 17 insertions(+), 11 deletions(-) diff --git a/postgres/accounts.sql.go b/postgres/accounts.sql.go index 31f9aa8..dd559fd 100644 --- a/postgres/accounts.sql.go +++ b/postgres/accounts.sql.go @@ -86,19 +86,22 @@ func (q *Queries) GetAccounts(ctx context.Context, budgetID uuid.UUID) ([]Accoun } const getAccountsWithBalance = `-- name: GetAccountsWithBalance :many -SELECT accounts.id, accounts.name, accounts.on_budget, SUM(transactions.amount)::decimal(12,2) as balance +SELECT accounts.id, accounts.name, accounts.on_budget, + (SELECT SUM(transactions.amount) FROM transactions WHERE transactions.account_id = accounts.id AND transactions.date < NOW())::decimal(12,2) as working_balance, + (SELECT SUM(transactions.amount) FROM transactions WHERE transactions.account_id = accounts.id AND transactions.date < NOW() AND transactions.status IN ('Cleared', 'Reconciled'))::decimal(12,2) as cleared_balance, + (SELECT SUM(transactions.amount) FROM transactions WHERE transactions.account_id = accounts.id AND transactions.date < NOW() AND transactions.status = 'Reconciled')::decimal(12,2) as reconciled_balance FROM accounts -LEFT JOIN transactions ON transactions.account_id = accounts.id AND transactions.date < NOW() WHERE accounts.budget_id = $1 -GROUP BY accounts.id, accounts.name ORDER BY accounts.name ` type GetAccountsWithBalanceRow struct { - ID uuid.UUID - Name string - OnBudget bool - Balance numeric.Numeric + ID uuid.UUID + Name string + OnBudget bool + WorkingBalance numeric.Numeric + ClearedBalance numeric.Numeric + ReconciledBalance numeric.Numeric } func (q *Queries) GetAccountsWithBalance(ctx context.Context, budgetID uuid.UUID) ([]GetAccountsWithBalanceRow, error) { @@ -114,7 +117,9 @@ func (q *Queries) GetAccountsWithBalance(ctx context.Context, budgetID uuid.UUID &i.ID, &i.Name, &i.OnBudget, - &i.Balance, + &i.WorkingBalance, + &i.ClearedBalance, + &i.ReconciledBalance, ); err != nil { return nil, err } diff --git a/postgres/queries/accounts.sql b/postgres/queries/accounts.sql index ac291d5..f3a4f74 100644 --- a/postgres/queries/accounts.sql +++ b/postgres/queries/accounts.sql @@ -14,11 +14,12 @@ WHERE accounts.budget_id = $1 ORDER BY accounts.name; -- name: GetAccountsWithBalance :many -SELECT accounts.id, accounts.name, accounts.on_budget, SUM(transactions.amount)::decimal(12,2) as balance +SELECT accounts.id, accounts.name, accounts.on_budget, + (SELECT SUM(transactions.amount) FROM transactions WHERE transactions.account_id = accounts.id AND transactions.date < NOW())::decimal(12,2) as working_balance, + (SELECT SUM(transactions.amount) FROM transactions WHERE transactions.account_id = accounts.id AND transactions.date < NOW() AND transactions.status IN ('Cleared', 'Reconciled'))::decimal(12,2) as cleared_balance, + (SELECT SUM(transactions.amount) FROM transactions WHERE transactions.account_id = accounts.id AND transactions.date < NOW() AND transactions.status = 'Reconciled')::decimal(12,2) as reconciled_balance FROM accounts -LEFT JOIN transactions ON transactions.account_id = accounts.id AND transactions.date < NOW() WHERE accounts.budget_id = $1 -GROUP BY accounts.id, accounts.name ORDER BY accounts.name; -- name: SearchAccounts :many From c4995bcbafb05ee8357c1d66a1c14dcc90658956 Mon Sep 17 00:00:00 2001 From: Jan Bader Date: Sun, 27 Feb 2022 15:22:54 +0000 Subject: [PATCH 2/3] Show cleared balance by default --- web/src/pages/BudgetSidebar.vue | 4 ++-- web/src/stores/budget-account.ts | 8 +++++--- 2 files changed, 7 insertions(+), 5 deletions(-) diff --git a/web/src/pages/BudgetSidebar.vue b/web/src/pages/BudgetSidebar.vue index 9ae0fa7..ae6a4e2 100644 --- a/web/src/pages/BudgetSidebar.vue +++ b/web/src/pages/BudgetSidebar.vue @@ -36,7 +36,7 @@ const OffBudgetAccountsBalance = computed(() => accountStore.OffBudgetAccountsBa
{{account.Name}} - +
  • @@ -46,7 +46,7 @@ const OffBudgetAccountsBalance = computed(() => accountStore.OffBudgetAccountsBa
    {{account.Name}} - +
  • diff --git a/web/src/stores/budget-account.ts b/web/src/stores/budget-account.ts index db0cd12..8f0fe0f 100644 --- a/web/src/stores/budget-account.ts +++ b/web/src/stores/budget-account.ts @@ -31,7 +31,9 @@ export interface Account { ID: string Name: string OnBudget: boolean - Balance: number + ClearedBalance: number + WorkingBalance: number + ReconciledBalance: number Transactions: string[] } @@ -95,13 +97,13 @@ export const useAccountStore = defineStore("budget/account", { return [...state.Accounts.values()].filter(x => x.OnBudget); }, OnBudgetAccountsBalance(state): number { - return this.OnBudgetAccounts.reduce((prev, curr) => prev + Number(curr.Balance), 0); + return this.OnBudgetAccounts.reduce((prev, curr) => prev + Number(curr.ClearedBalance), 0); }, OffBudgetAccounts(state) { return [...state.Accounts.values()].filter(x => !x.OnBudget); }, OffBudgetAccountsBalance(state): number { - return this.OffBudgetAccounts.reduce((prev, curr) => prev + Number(curr.Balance), 0); + return this.OffBudgetAccounts.reduce((prev, curr) => prev + Number(curr.ClearedBalance), 0); }, TransactionsList(state) : Transaction[] { return this.CurrentAccount!.Transactions.map(x => { From 422a74704b05a6aa15fd6b649a41ea5ddfbbe865 Mon Sep 17 00:00:00 2001 From: Jan Bader Date: Sun, 27 Feb 2022 18:32:00 +0000 Subject: [PATCH 3/3] Show all balances in Account view --- web/src/pages/Account.vue | 18 ++++++++++++++---- 1 file changed, 14 insertions(+), 4 deletions(-) diff --git a/web/src/pages/Account.vue b/web/src/pages/Account.vue index a4a20e1..2738214 100644 --- a/web/src/pages/Account.vue +++ b/web/src/pages/Account.vue @@ -19,12 +19,22 @@ const TransactionsList = computed(() => accountStore.TransactionsList);