112 lines
3.9 KiB
SQL
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
|