-- : SKIP -- v3.9_supplier_catalog_prices.sql -- Per-tenant supplier pricing for items in the master supplier_catalog. -- This table lives in the master DB and is joined by tenant_id. -- Apply manually to the master database. CREATE TABLE IF NOT EXISTS supplier_catalog_prices ( id SERIAL PRIMARY KEY, tenant_id INTEGER NOT NULL REFERENCES tenants(id) ON DELETE CASCADE, catalog_id INTEGER NOT NULL REFERENCES supplier_catalog(id) ON DELETE CASCADE, price NUMERIC(12,2) NOT NULL, currency VARCHAR(3) DEFAULT 'MXN', effective_from DATE DEFAULT CURRENT_DATE, effective_to DATE, is_active BOOLEAN DEFAULT TRUE, created_at TIMESTAMPTZ DEFAULT NOW(), updated_at TIMESTAMPTZ DEFAULT NOW(), UNIQUE(tenant_id, catalog_id, effective_from) ); CREATE INDEX IF NOT EXISTS idx_supplier_catalog_prices_tenant_catalog ON supplier_catalog_prices(tenant_id, catalog_id, effective_from DESC) WHERE is_active = true; -- Index for quick "latest active price" lookups per tenant+item. CREATE INDEX IF NOT EXISTS idx_supplier_catalog_prices_lookup ON supplier_catalog_prices(tenant_id, catalog_id, effective_from DESC, is_active); -- Trigger to keep updated_at current on row changes. CREATE OR REPLACE FUNCTION update_supplier_catalog_prices_updated_at() RETURNS TRIGGER AS $$ BEGIN NEW.updated_at = NOW(); RETURN NEW; END; $$ LANGUAGE plpgsql; DROP TRIGGER IF EXISTS trg_supplier_catalog_prices_updated_at ON supplier_catalog_prices; CREATE TRIGGER trg_supplier_catalog_prices_updated_at BEFORE UPDATE ON supplier_catalog_prices FOR EACH ROW EXECUTE FUNCTION update_supplier_catalog_prices_updated_at();