Files
acmcc/supabase/migrations/20260425022542_c547eb5c-0aa7-4c23-8666-8a941722198d.sql
2026-06-01 20:19:26 -04:00

85 lines
3.1 KiB
SQL

-- Per-association check layout settings
CREATE TABLE public.check_layouts (
id UUID NOT NULL DEFAULT gen_random_uuid() PRIMARY KEY,
association_id UUID NOT NULL UNIQUE REFERENCES public.associations(id) ON DELETE CASCADE,
-- Position on page: where the check sits on the 8.5x11 sheet
-- 'top' (default), 'middle', 'bottom'
check_position TEXT NOT NULL DEFAULT 'top',
-- Margins / fine offset (inches)
offset_x NUMERIC NOT NULL DEFAULT 0,
offset_y NUMERIC NOT NULL DEFAULT 0,
-- Logo / payer block
show_payer_block BOOLEAN NOT NULL DEFAULT true,
show_logo BOOLEAN NOT NULL DEFAULT true,
payer_name TEXT,
payer_address TEXT,
-- Signature
show_signature_line BOOLEAN NOT NULL DEFAULT true,
signature_image_url TEXT,
signature_label TEXT,
-- Memo / footer
memo_prefix TEXT,
footer_text TEXT,
created_at TIMESTAMPTZ NOT NULL DEFAULT now(),
updated_at TIMESTAMPTZ NOT NULL DEFAULT now()
);
ALTER TABLE public.check_layouts ENABLE ROW LEVEL SECURITY;
-- Staff (admin/manager) can manage
CREATE POLICY "Staff can view check layouts"
ON public.check_layouts FOR SELECT TO authenticated
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 check layouts"
ON public.check_layouts FOR INSERT TO authenticated
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 check layouts"
ON public.check_layouts FOR UPDATE TO authenticated
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 check layouts"
ON public.check_layouts FOR DELETE TO authenticated
USING (public.has_role(auth.uid(), 'admin'::public.app_role) OR public.has_role(auth.uid(), 'manager'::public.app_role));
-- updated_at trigger
CREATE TRIGGER update_check_layouts_updated_at
BEFORE UPDATE ON public.check_layouts
FOR EACH ROW EXECUTE FUNCTION public.update_updated_at_column();
-- Storage bucket for signature images
INSERT INTO storage.buckets (id, name, public)
VALUES ('check-signatures', 'check-signatures', true)
ON CONFLICT (id) DO NOTHING;
CREATE POLICY "Public can view check signatures"
ON storage.objects FOR SELECT
USING (bucket_id = 'check-signatures');
CREATE POLICY "Staff can upload check signatures"
ON storage.objects FOR INSERT TO authenticated
WITH CHECK (
bucket_id = 'check-signatures'
AND (public.has_role(auth.uid(), 'admin'::public.app_role) OR public.has_role(auth.uid(), 'manager'::public.app_role))
);
CREATE POLICY "Staff can update check signatures"
ON storage.objects FOR UPDATE TO authenticated
USING (
bucket_id = 'check-signatures'
AND (public.has_role(auth.uid(), 'admin'::public.app_role) OR public.has_role(auth.uid(), 'manager'::public.app_role))
);
CREATE POLICY "Staff can delete check signatures"
ON storage.objects FOR DELETE TO authenticated
USING (
bucket_id = 'check-signatures'
AND (public.has_role(auth.uid(), 'admin'::public.app_role) OR public.has_role(auth.uid(), 'manager'::public.app_role))
);