-- Complete migration: Add all custom/enhanced fields to m_savings_product table -- Uses IF NOT EXISTS to safely handle columns that may already exist DO $$ BEGIN -- Scalar custom columns IF NOT EXISTS (SELECT 1 FROM information_schema.columns WHERE table_name='m_savings_product' AND column_name='account_type') THEN ALTER TABLE m_savings_product ADD COLUMN account_type VARCHAR(50) DEFAULT NULL; END IF; IF NOT EXISTS (SELECT 1 FROM information_schema.columns WHERE table_name='m_savings_product' AND column_name='customer_segment') THEN ALTER TABLE m_savings_product ADD COLUMN customer_segment VARCHAR(50) DEFAULT NULL; END IF; IF NOT EXISTS (SELECT 1 FROM information_schema.columns WHERE table_name='m_savings_product' AND column_name='product_code') THEN ALTER TABLE m_savings_product ADD COLUMN product_code VARCHAR(20) DEFAULT NULL; END IF; IF NOT EXISTS (SELECT 1 FROM information_schema.columns WHERE table_name='m_savings_product' AND column_name='effective_date') THEN ALTER TABLE m_savings_product ADD COLUMN effective_date DATE DEFAULT NULL; END IF; IF NOT EXISTS (SELECT 1 FROM information_schema.columns WHERE table_name='m_savings_product' AND column_name='effective_to') THEN ALTER TABLE m_savings_product ADD COLUMN effective_to DATE DEFAULT NULL; END IF; IF NOT EXISTS (SELECT 1 FROM information_schema.columns WHERE table_name='m_savings_product' AND column_name='end_date') THEN ALTER TABLE m_savings_product ADD COLUMN end_date DATE DEFAULT NULL; END IF; IF NOT EXISTS (SELECT 1 FROM information_schema.columns WHERE table_name='m_savings_product' AND column_name='introducer_required') THEN ALTER TABLE m_savings_product ADD COLUMN introducer_required BOOLEAN DEFAULT FALSE; END IF; IF NOT EXISTS (SELECT 1 FROM information_schema.columns WHERE table_name='m_savings_product' AND column_name='share_linking_enabled') THEN ALTER TABLE m_savings_product ADD COLUMN share_linking_enabled BOOLEAN DEFAULT FALSE; END IF; IF NOT EXISTS (SELECT 1 FROM information_schema.columns WHERE table_name='m_savings_product' AND column_name='nomination_facility') THEN ALTER TABLE m_savings_product ADD COLUMN nomination_facility BOOLEAN DEFAULT FALSE; END IF; IF NOT EXISTS (SELECT 1 FROM information_schema.columns WHERE table_name='m_savings_product' AND column_name='dormancy_alert') THEN ALTER TABLE m_savings_product ADD COLUMN dormancy_alert BOOLEAN DEFAULT FALSE; END IF; IF NOT EXISTS (SELECT 1 FROM information_schema.columns WHERE table_name='m_savings_product' AND column_name='interest_calculate_selector') THEN ALTER TABLE m_savings_product ADD COLUMN interest_calculate_selector INT DEFAULT NULL; END IF; IF NOT EXISTS (SELECT 1 FROM information_schema.columns WHERE table_name='m_savings_product' AND column_name='average_period') THEN ALTER TABLE m_savings_product ADD COLUMN average_period VARCHAR(20) DEFAULT NULL; END IF; IF NOT EXISTS (SELECT 1 FROM information_schema.columns WHERE table_name='m_savings_product' AND column_name='auto_post') THEN ALTER TABLE m_savings_product ADD COLUMN auto_post BOOLEAN DEFAULT FALSE; END IF; IF NOT EXISTS (SELECT 1 FROM information_schema.columns WHERE table_name='m_savings_product' AND column_name='frequency_fix_day') THEN ALTER TABLE m_savings_product ADD COLUMN frequency_fix_day INT DEFAULT NULL; END IF; IF NOT EXISTS (SELECT 1 FROM information_schema.columns WHERE table_name='m_savings_product' AND column_name='last_interest_date') THEN ALTER TABLE m_savings_product ADD COLUMN last_interest_date DATE DEFAULT NULL; END IF; IF NOT EXISTS (SELECT 1 FROM information_schema.columns WHERE table_name='m_savings_product' AND column_name='enable_lockin_period') THEN ALTER TABLE m_savings_product ADD COLUMN enable_lockin_period BOOLEAN DEFAULT FALSE; END IF; IF NOT EXISTS (SELECT 1 FROM information_schema.columns WHERE table_name='m_savings_product' AND column_name='balance_frequency') THEN ALTER TABLE m_savings_product ADD COLUMN balance_frequency VARCHAR(50) DEFAULT NULL; END IF; IF NOT EXISTS (SELECT 1 FROM information_schema.columns WHERE table_name='m_savings_product' AND column_name='account_closed_zero_balance_in_day_closing') THEN ALTER TABLE m_savings_product ADD COLUMN account_closed_zero_balance_in_day_closing BOOLEAN DEFAULT FALSE; END IF; END $$; -- Add comments for documentation (safe to run multiple times) COMMENT ON COLUMN m_savings_product.account_type IS 'Account type classification'; COMMENT ON COLUMN m_savings_product.customer_segment IS 'Customer segment classification'; COMMENT ON COLUMN m_savings_product.product_code IS 'Unique product code identifier'; COMMENT ON COLUMN m_savings_product.effective_date IS 'Date from which the product becomes effective'; COMMENT ON COLUMN m_savings_product.effective_to IS 'Date until which the product is effective'; COMMENT ON COLUMN m_savings_product.end_date IS 'Product end/expiry date'; COMMENT ON COLUMN m_savings_product.introducer_required IS 'Whether an introducer is required for this product'; COMMENT ON COLUMN m_savings_product.share_linking_enabled IS 'Whether share linking is enabled for this product'; COMMENT ON COLUMN m_savings_product.nomination_facility IS 'Whether nomination facility is available'; COMMENT ON COLUMN m_savings_product.dormancy_alert IS 'Whether dormancy alerts are enabled'; COMMENT ON COLUMN m_savings_product.interest_calculate_selector IS 'Interest calculation selector type'; COMMENT ON COLUMN m_savings_product.average_period IS 'Average period for calculations'; COMMENT ON COLUMN m_savings_product.auto_post IS 'Whether auto posting of interest is enabled'; COMMENT ON COLUMN m_savings_product.frequency_fix_day IS 'Fixed day for frequency calculations'; COMMENT ON COLUMN m_savings_product.last_interest_date IS 'Last date interest was calculated'; COMMENT ON COLUMN m_savings_product.enable_lockin_period IS 'Whether lock-in period is enabled'; COMMENT ON COLUMN m_savings_product.balance_frequency IS 'Frequency for balance calculation (e.g., Daily, Monthly, Quarterly)'; COMMENT ON COLUMN m_savings_product.account_closed_zero_balance_in_day_closing IS 'Flag to indicate if account should be closed when balance reaches zero at day end';