feat: cash advance

This commit is contained in:
Efril
2026-08-13 14:38:28 +07:00
parent e6078e3c0b
commit 2c6864147b
36 changed files with 2355 additions and 186 deletions
@@ -0,0 +1,24 @@
-- Spending paid out of a cash advance points back at it. This is how an advance is
-- accounted for: the team's purchases and expenses are the settlement, so the advance
-- itself never carries a copy of what was bought.
-- RESTRICT rather than SET NULL: dropping an advance that still has spending on it
-- would leave that spending looking like it came straight out of the drawer.
ALTER TABLE purchase_orders
ADD COLUMN IF NOT EXISTS cash_advance_id UUID;
ALTER TABLE purchase_orders
ADD CONSTRAINT fk_purchase_orders_cash_advance
FOREIGN KEY (cash_advance_id) REFERENCES cash_advances(id) ON DELETE RESTRICT;
CREATE INDEX IF NOT EXISTS idx_purchase_orders_cash_advance_id
ON purchase_orders(cash_advance_id);
ALTER TABLE expenses
ADD COLUMN IF NOT EXISTS cash_advance_id UUID;
ALTER TABLE expenses
ADD CONSTRAINT fk_expenses_cash_advance
FOREIGN KEY (cash_advance_id) REFERENCES cash_advances(id) ON DELETE RESTRICT;
CREATE INDEX IF NOT EXISTS idx_expenses_cash_advance_id
ON expenses(cash_advance_id);