Files
SUST/sustApp/cut_members_from_spouse..sql
T
2026-06-25 11:19:08 +02:00

112 lines
3.9 KiB
SQL

-- 2. Migrate spouse data to new member records
INSERT INTO sust.members (
member_count, member_firstname, member_surname, member_suffix,
member_street, member_streetnumber, member_email, member_zip,
member_city, member_active, member_gender, member_died, member_printed,
member_coordinates, member_geo_latitude, member_geo_longitude,
member_membership_start, member_phone, current_state_code,
current_state_changed_at, spouse_id
)
SELECT
1, member_firstname_spouse, member_surname, member_suffix,
member_street, member_streetnumber,
member_email || '_partner' as member_email,
member_zip, member_city, member_active, 'female', member_died,
member_printed, member_coordinates, member_geo_latitude,
member_geo_longitude, member_membership_start,
member_phone || '_partner' as member_phone,
current_state_code, current_state_changed_at, id
FROM sust.members
WHERE member_firstname_spouse IS NOT NULL AND member_firstname_spouse != '' and members.id = 93
RETURNING id, spouse_id;
-- 3. Copy section memberships to new spouse members
INSERT INTO sust.member_sections (member_id, section_id)
SELECT
new_spouse.id, ms.section_id
FROM sust.member_sections ms
JOIN sust.members orig ON ms.member_id = orig.id
JOIN sust.members new_spouse ON new_spouse.spouse_id = orig.id
WHERE new_spouse.spouse_id IS NOT NULL
ON CONFLICT (member_id, section_id) DO NOTHING;
-- 5. Update primary members with spouse links
UPDATE sust.members m1
SET spouse_id = m2.id
FROM sust.members m2
WHERE m2.spouse_id = m1.id and m2.id = 93;
-- Add ONLY spouses of members ALREADY in event_attends for this event
INSERT INTO sust.event_attends (event_id, member_id, notes)
SELECT 1, m.spouse_id, 'Spouse of event attendee - all 3 days (Sylvia)'
FROM sust.members m
JOIN sust.event_attends ea ON m.id = ea.member_id
WHERE m.spouse_id IS NOT NULL
AND ea.event_id = 1
AND NOT EXISTS (
SELECT 1 FROM sust.event_attends ea2
WHERE ea2.event_id = 1 AND ea2.member_id = m.spouse_id
);
-- Check primary vs spouse attendees for event
SELECT
ea.notes,
COUNT(*) as count,
string_agg(m.member_firstname || ' ' || m.member_surname, ', ' ORDER BY m.member_surname) as names
FROM sust.event_attends ea
JOIN sust.members m ON ea.member_id = m.id
WHERE ea.event_id = 1
GROUP BY ea.notes
ORDER BY ea.notes;
-- Add birthday column to members table
ALTER TABLE sust.members
ADD COLUMN member_birthday date NULL;
-- Add index for birthday queries
CREATE INDEX ix_members_member_birthday ON sust.members USING btree (member_birthday);
-- Optional: Add check constraint for valid dates
ALTER TABLE sust.members
ADD CONSTRAINT members_birthday_check
CHECK (member_birthday IS NULL OR member_birthday < CURRENT_DATE);
-- Much simpler: List households with attendee count + email
SELECT
MIN(m.member_firstname || ' ' || m.member_surname) AS household_representative,
MIN(m.member_surname) AS surname,
COUNT(DISTINCT ea.member_id) AS attendees,
STRING_AGG(
DISTINCT
CASE
WHEN m.member_birthday IS NOT NULL
THEN m.member_firstname || ' (' || TO_CHAR(m.member_birthday, 'DD.MM.YYYY') || ')'
ELSE m.member_firstname
END,
', '
) AS attendees_birthdays,
MIN(
TRIM(
COALESCE(m.member_street, '') || ' ' || COALESCE(m.member_streetnumber, '') ||
', ' || COALESCE(m.member_zip::text, '') || ' ' || COALESCE(m.member_city, '')
)
) AS address,
MIN(m.member_email) AS email -- household email (one per household)
FROM sust.event_attends ea
JOIN sust.members m ON ea.member_id = m.id
WHERE ea.event_id = 1
GROUP BY
LEAST(
m.id,
COALESCE(
(SELECT spouse_id FROM sust.members WHERE id = m.id),
m.id
)
),
m.member_surname
ORDER BY m.member_surname;
update members set member_primary = false where id in (217,221);
select * from payments where member_id = 119