37 lines
1.5 KiB
SQL
37 lines
1.5 KiB
SQL
-- name: CreateAccount :one
|
|
INSERT INTO accounts
|
|
(name, budget_id)
|
|
VALUES ($1, $2)
|
|
RETURNING *;
|
|
|
|
-- name: GetAccount :one
|
|
SELECT accounts.* FROM accounts
|
|
WHERE accounts.id = $1;
|
|
|
|
-- name: GetAccounts :many
|
|
SELECT accounts.* FROM accounts
|
|
WHERE accounts.budget_id = $1
|
|
ORDER BY accounts.name;
|
|
|
|
-- name: GetAccountsWithBalance :many
|
|
SELECT accounts.id, accounts.name, accounts.on_budget,
|
|
(SELECT MAX(transactions.date) FROM transactions WHERE transactions.account_id = accounts.id AND transactions.status = 'Reconciled')::date as last_reconciled,
|
|
(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
|
|
WHERE accounts.budget_id = $1
|
|
ORDER BY accounts.name;
|
|
|
|
-- name: SearchAccounts :many
|
|
SELECT accounts.id, accounts.budget_id, accounts.name, 'account' as type FROM accounts
|
|
WHERE accounts.budget_id = @budget_id
|
|
AND accounts.name LIKE @search
|
|
ORDER BY accounts.name;
|
|
|
|
-- name: UpdateAccount :one
|
|
UPDATE accounts
|
|
SET name = $1,
|
|
on_budget = $2
|
|
WHERE accounts.id = $3
|
|
RETURNING *; |