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>
106 lines
3.0 KiB
PL/PgSQL
106 lines
3.0 KiB
PL/PgSQL
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(); |