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