mirror of
https://github.com/renee-png/acmcc.git
synced 2026-06-21 09:50:01 +00:00
183fe0a93c
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
87 lines
3.8 KiB
SQL
87 lines
3.8 KiB
SQL
|
|
-- Company-only bank accounts (separate from association bank_accounts)
|
|
CREATE TABLE IF NOT EXISTS public.company_bank_accounts (
|
|
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
|
|
account_name TEXT NOT NULL,
|
|
account_number TEXT,
|
|
routing_number TEXT,
|
|
bank_name TEXT,
|
|
account_type TEXT DEFAULT 'checking',
|
|
account_category TEXT DEFAULT 'operating',
|
|
current_balance NUMERIC DEFAULT 0,
|
|
next_check_number INTEGER NOT NULL DEFAULT 1001,
|
|
status TEXT NOT NULL DEFAULT 'active',
|
|
created_at TIMESTAMPTZ NOT NULL DEFAULT now(),
|
|
updated_at TIMESTAMPTZ NOT NULL DEFAULT now()
|
|
);
|
|
|
|
ALTER TABLE public.company_bank_accounts ENABLE ROW LEVEL SECURITY;
|
|
|
|
CREATE POLICY "Staff can view company bank accounts"
|
|
ON public.company_bank_accounts FOR SELECT
|
|
USING (public.has_role(auth.uid(), 'admin'::public.app_role) OR public.has_role(auth.uid(), 'manager'::public.app_role));
|
|
|
|
CREATE POLICY "Staff can insert company bank accounts"
|
|
ON public.company_bank_accounts FOR INSERT
|
|
WITH CHECK (public.has_role(auth.uid(), 'admin'::public.app_role) OR public.has_role(auth.uid(), 'manager'::public.app_role));
|
|
|
|
CREATE POLICY "Staff can update company bank accounts"
|
|
ON public.company_bank_accounts FOR UPDATE
|
|
USING (public.has_role(auth.uid(), 'admin'::public.app_role) OR public.has_role(auth.uid(), 'manager'::public.app_role));
|
|
|
|
CREATE POLICY "Staff can delete company bank accounts"
|
|
ON public.company_bank_accounts FOR DELETE
|
|
USING (public.has_role(auth.uid(), 'admin'::public.app_role) OR public.has_role(auth.uid(), 'manager'::public.app_role));
|
|
|
|
CREATE TRIGGER trg_company_bank_accounts_updated
|
|
BEFORE UPDATE ON public.company_bank_accounts
|
|
FOR EACH ROW EXECUTE FUNCTION public.update_updated_at_column();
|
|
|
|
-- Company checks (separate from association checks)
|
|
CREATE TABLE IF NOT EXISTS public.company_checks (
|
|
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
|
|
company_bank_account_id UUID REFERENCES public.company_bank_accounts(id) ON DELETE SET NULL,
|
|
payee TEXT NOT NULL,
|
|
amount NUMERIC NOT NULL DEFAULT 0,
|
|
check_number TEXT,
|
|
memo TEXT,
|
|
check_date DATE,
|
|
status TEXT NOT NULL DEFAULT 'draft',
|
|
printed BOOLEAN NOT NULL DEFAULT false,
|
|
created_by UUID,
|
|
created_at TIMESTAMPTZ NOT NULL DEFAULT now(),
|
|
updated_at TIMESTAMPTZ NOT NULL DEFAULT now()
|
|
);
|
|
|
|
ALTER TABLE public.company_checks ENABLE ROW LEVEL SECURITY;
|
|
|
|
CREATE POLICY "Staff can view company checks"
|
|
ON public.company_checks FOR SELECT
|
|
USING (public.has_role(auth.uid(), 'admin'::public.app_role) OR public.has_role(auth.uid(), 'manager'::public.app_role));
|
|
|
|
CREATE POLICY "Staff can insert company checks"
|
|
ON public.company_checks FOR INSERT
|
|
WITH CHECK (public.has_role(auth.uid(), 'admin'::public.app_role) OR public.has_role(auth.uid(), 'manager'::public.app_role));
|
|
|
|
CREATE POLICY "Staff can update company checks"
|
|
ON public.company_checks FOR UPDATE
|
|
USING (public.has_role(auth.uid(), 'admin'::public.app_role) OR public.has_role(auth.uid(), 'manager'::public.app_role));
|
|
|
|
CREATE POLICY "Staff can delete company checks"
|
|
ON public.company_checks FOR DELETE
|
|
USING (public.has_role(auth.uid(), 'admin'::public.app_role) OR public.has_role(auth.uid(), 'manager'::public.app_role));
|
|
|
|
CREATE TRIGGER trg_company_checks_updated
|
|
BEFORE UPDATE ON public.company_checks
|
|
FOR EACH ROW EXECUTE FUNCTION public.update_updated_at_column();
|
|
|
|
-- Link company bank transactions to a specific company account & optionally a check
|
|
ALTER TABLE public.company_bank_transactions
|
|
ADD COLUMN IF NOT EXISTS company_bank_account_id UUID REFERENCES public.company_bank_accounts(id) ON DELETE SET NULL,
|
|
ADD COLUMN IF NOT EXISTS check_id UUID REFERENCES public.company_checks(id) ON DELETE SET NULL;
|
|
|
|
CREATE INDEX IF NOT EXISTS idx_company_bank_transactions_account
|
|
ON public.company_bank_transactions(company_bank_account_id);
|
|
CREATE INDEX IF NOT EXISTS idx_company_checks_account
|
|
ON public.company_checks(company_bank_account_id);
|