mirror of
https://github.com/renee-png/acmcc.git
synced 2026-06-21 09:50:01 +00:00
Add ACMCC app source, Supabase backend, and project config
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
@@ -0,0 +1,106 @@
|
||||
CREATE OR REPLACE FUNCTION public.create_form_inbox_entry_from_owner_registration_request()
|
||||
RETURNS trigger
|
||||
LANGUAGE plpgsql
|
||||
SECURITY DEFINER
|
||||
SET search_path TO 'public'
|
||||
AS $$
|
||||
DECLARE
|
||||
v_owner_name text;
|
||||
v_owner_email text;
|
||||
v_title text;
|
||||
v_summary text;
|
||||
BEGIN
|
||||
IF NEW.owner_id IS NOT NULL THEN
|
||||
SELECT
|
||||
NULLIF(trim(concat_ws(' ', o.first_name, o.last_name)), ''),
|
||||
o.email
|
||||
INTO v_owner_name, v_owner_email
|
||||
FROM public.owners o
|
||||
WHERE o.id = NEW.owner_id;
|
||||
END IF;
|
||||
|
||||
v_owner_name := COALESCE(v_owner_name, NULLIF(NEW.last_name, ''));
|
||||
v_owner_email := COALESCE(v_owner_email, NEW.email);
|
||||
v_title := 'Registration Request - ' || COALESCE(v_owner_name, NEW.email, 'Homeowner');
|
||||
v_summary := concat_ws(' | ',
|
||||
'Email: ' || NEW.email,
|
||||
CASE WHEN NEW.unit_identifier IS NOT NULL THEN 'Unit: ' || NEW.unit_identifier END,
|
||||
CASE WHEN NEW.account_number IS NOT NULL THEN 'Account: ' || NEW.account_number END,
|
||||
CASE WHEN NEW.status IS NOT NULL THEN 'Status: ' || NEW.status END
|
||||
);
|
||||
|
||||
INSERT INTO public.form_inbox (
|
||||
source_type,
|
||||
source_id,
|
||||
association_id,
|
||||
title,
|
||||
submitter_name,
|
||||
submitter_email,
|
||||
summary
|
||||
)
|
||||
VALUES (
|
||||
'registration_request',
|
||||
NEW.id,
|
||||
NEW.association_id,
|
||||
v_title,
|
||||
v_owner_name,
|
||||
v_owner_email,
|
||||
LEFT(v_summary, 200)
|
||||
);
|
||||
|
||||
RETURN NEW;
|
||||
END;
|
||||
$$;
|
||||
|
||||
CREATE OR REPLACE FUNCTION public.notify_staff_on_owner_registration_request()
|
||||
RETURNS trigger
|
||||
LANGUAGE plpgsql
|
||||
SECURITY DEFINER
|
||||
SET search_path TO 'public'
|
||||
AS $$
|
||||
DECLARE
|
||||
staff_user record;
|
||||
v_display_name text;
|
||||
v_message text;
|
||||
BEGIN
|
||||
v_display_name := COALESCE(NULLIF(NEW.last_name, ''), NEW.email, 'A homeowner');
|
||||
v_message := v_display_name || ' submitted a registration request';
|
||||
|
||||
IF NEW.unit_identifier IS NOT NULL THEN
|
||||
v_message := v_message || ' for unit ' || NEW.unit_identifier;
|
||||
END IF;
|
||||
|
||||
FOR staff_user IN
|
||||
SELECT DISTINCT user_id
|
||||
FROM public.user_roles
|
||||
WHERE role IN ('admin'::public.app_role, 'manager'::public.app_role)
|
||||
AND user_id IS NOT NULL
|
||||
LOOP
|
||||
INSERT INTO public.in_app_notifications
|
||||
(user_id, type, title, message, related_item_id, related_item_type, link)
|
||||
VALUES (
|
||||
staff_user.user_id,
|
||||
'owner_registration_submitted',
|
||||
'New Registration Request',
|
||||
v_message,
|
||||
NEW.id,
|
||||
'owner_registration_request',
|
||||
'/dashboard/form-inbox'
|
||||
);
|
||||
END LOOP;
|
||||
|
||||
RETURN NEW;
|
||||
END;
|
||||
$$;
|
||||
|
||||
DROP TRIGGER IF EXISTS trg_owner_registration_request_form_inbox ON public.owner_registration_requests;
|
||||
CREATE TRIGGER trg_owner_registration_request_form_inbox
|
||||
AFTER INSERT ON public.owner_registration_requests
|
||||
FOR EACH ROW
|
||||
EXECUTE FUNCTION public.create_form_inbox_entry_from_owner_registration_request();
|
||||
|
||||
DROP TRIGGER IF EXISTS trg_owner_registration_request_notify_staff ON public.owner_registration_requests;
|
||||
CREATE TRIGGER trg_owner_registration_request_notify_staff
|
||||
AFTER INSERT ON public.owner_registration_requests
|
||||
FOR EACH ROW
|
||||
EXECUTE FUNCTION public.notify_staff_on_owner_registration_request();
|
||||
Reference in New Issue
Block a user