mirror of
https://github.com/renee-png/acmcc.git
synced 2026-06-21 01:40:01 +00:00
183fe0a93c
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
50 lines
1.6 KiB
PL/PgSQL
50 lines
1.6 KiB
PL/PgSQL
ALTER TABLE public.arc_committee_members
|
|
ADD COLUMN IF NOT EXISTS start_date date,
|
|
ADD COLUMN IF NOT EXISTS end_date date;
|
|
|
|
CREATE OR REPLACE FUNCTION public.sync_committee_member_active_from_dates()
|
|
RETURNS trigger
|
|
LANGUAGE plpgsql
|
|
SET search_path TO 'public'
|
|
AS $$
|
|
DECLARE
|
|
today date := (now() AT TIME ZONE 'America/New_York')::date;
|
|
BEGIN
|
|
IF (NEW.start_date IS NOT NULL AND NEW.start_date > today)
|
|
OR (NEW.end_date IS NOT NULL AND NEW.end_date < today) THEN
|
|
NEW.is_active := false;
|
|
ELSE
|
|
NEW.is_active := true;
|
|
END IF;
|
|
RETURN NEW;
|
|
END;
|
|
$$;
|
|
|
|
DROP TRIGGER IF EXISTS sync_committee_member_active ON public.arc_committee_members;
|
|
CREATE TRIGGER sync_committee_member_active
|
|
BEFORE INSERT OR UPDATE OF start_date, end_date ON public.arc_committee_members
|
|
FOR EACH ROW EXECUTE FUNCTION public.sync_committee_member_active_from_dates();
|
|
|
|
-- Daily refresh: deactivate expired / activate current term members
|
|
CREATE OR REPLACE FUNCTION public.refresh_committee_member_active_status()
|
|
RETURNS void
|
|
LANGUAGE plpgsql
|
|
SECURITY DEFINER
|
|
SET search_path TO 'public'
|
|
AS $$
|
|
DECLARE
|
|
today date := (now() AT TIME ZONE 'America/New_York')::date;
|
|
BEGIN
|
|
UPDATE public.arc_committee_members
|
|
SET is_active = false, updated_at = now()
|
|
WHERE is_active = true
|
|
AND ((start_date IS NOT NULL AND start_date > today)
|
|
OR (end_date IS NOT NULL AND end_date < today));
|
|
|
|
UPDATE public.arc_committee_members
|
|
SET is_active = true, updated_at = now()
|
|
WHERE is_active = false
|
|
AND (start_date IS NULL OR start_date <= today)
|
|
AND (end_date IS NULL OR end_date >= today);
|
|
END;
|
|
$$; |