-- schema version 26 to 27

PRAGMA writable_schema = ON;

ALTER TABLE member RENAME COLUMN family_name TO name;
ALTER TABLE member ADD COLUMN attn TEXT DEFAULT NULL;
ALTER TABLE member ADD COLUMN juridical_pers INTEGER NOT NULL CHECK (juridical_pers IN (TRUE, FALSE)) DEFAULT FALSE;

UPDATE sqlite_schema SET sql = REPLACE(sql, 'given_name       TEXT    NOT NULL', 'given_name       TEXT DEFAULT NULL')
WHERE type = 'table' AND name = 'member';

DROP VIEW v_bki_member;
CREATE VIEW v_bki_member AS
SELECT s.year, m.mgnr, m.lfbis_nr, m.name,
       (COALESCE(m.prefix || ' ', '') || m.given_name || COALESCE(' ' || m.middle_names, '') || COALESCE(' ' || m.suffix, '')) AS other_names,
       a.name AS billing_name, COALESCE(a.address, m.address) AS address,
       COALESCE(a.country, m.country) AS country, COALESCE(a.postal_dest, m.postal_dest) AS postal_dest,
       SUM(IIF(c.year_from <= s.year AND (c.year_to IS NULL OR c.year_to >= s.year), c.area, 0)) AS area
FROM season s, member m
    LEFT JOIN member_billing_address a ON a.mgnr = m.mgnr
    LEFT JOIN area_commitment c ON c.mgnr = m.mgnr
GROUP BY s.year, m.mgnr;

DROP VIEW v_bki_delivery;
CREATE VIEW v_bki_delivery AS
SELECT m.lfbis_nr, m.name, m.other_names, m.billing_name,
       m.address, plz.plz, IIF(INSTR(o.name, ',') = 0, o.name, SUBSTR(o.name, 1, INSTR(o.name, ',') - 1)) AS ort,
       d.date, d.weight, v.type, v.sortid, d.qualid, d.year, d.hkid, d.kmw, d.oe,
       m.area
FROM v_delivery d
    JOIN v_bki_member m ON (m.year, m.mgnr) = (d.year, d.mgnr)
    JOIN postal_dest pd ON (pd.country, pd.id) = (m.country, m.postal_dest)
    LEFT JOIN AT_plz_dest ap ON (ap.country, ap.id) = (pd.country, pd.id)
    LEFT JOIN AT_plz plz ON plz.plz = ap.plz
    LEFT JOIN AT_ort o ON o.okz = ap.okz
    JOIN wine_variety v ON v.sortid = d.sortid
ORDER BY d.date, d.time;

PRAGMA schema_version = 2601;
PRAGMA writable_schema = OFF;

UPDATE member
SET name = a.name, juridical_pers = TRUE
FROM member_billing_address a
WHERE a.mgnr = member.mgnr AND member.name = '';

DELETE FROM member_billing_address
WHERE mgnr IN (SELECT mgnr FROM member WHERE name = member_billing_address.name)