bmc_hub/migrations/028_auto_link_tmodule_customers.sql

85 lines
2.7 KiB
MySQL
Raw Permalink Normal View History

-- Link tmodule_customers til Hub customers baseret på navn match
-- Dette script kører automatisk ved opstart og kan også køres manuelt
-- Drop eksisterende funktion hvis den findes
DROP FUNCTION IF EXISTS link_tmodule_customers_to_hub();
-- Funktion til at linke kunder baseret på navn
CREATE OR REPLACE FUNCTION link_tmodule_customers_to_hub()
RETURNS TABLE (
tmodule_id INTEGER,
tmodule_name TEXT,
hub_id INTEGER,
hub_name TEXT,
action TEXT
) AS $$
BEGIN
RETURN QUERY
WITH matches AS (
-- Find eksakte navn matches
SELECT
tc.id as tmodule_id,
tc.name::TEXT as tmodule_name,
c.id as hub_id,
c.name::TEXT as hub_name,
'exact_match'::TEXT as action
FROM tmodule_customers tc
JOIN customers c ON LOWER(TRIM(tc.name)) = LOWER(TRIM(c.name))
WHERE tc.hub_customer_id IS NULL
),
updates AS (
-- Opdater tmodule_customers med hub_customer_id
UPDATE tmodule_customers tc
SET hub_customer_id = m.hub_id,
updated_at = CURRENT_TIMESTAMP
FROM matches m
WHERE tc.id = m.tmodule_id
RETURNING tc.id, tc.name::TEXT, m.hub_id, m.hub_name, m.action
)
SELECT * FROM updates;
END;
$$ LANGUAGE plpgsql;
-- Kør linking
SELECT * FROM link_tmodule_customers_to_hub();
-- Trigger til automatisk linking ved insert/update af tmodule_customers
CREATE OR REPLACE FUNCTION auto_link_tmodule_customer()
RETURNS TRIGGER AS $$
DECLARE
matched_hub_id INTEGER;
BEGIN
-- Hvis hub_customer_id allerede er sat, skip
IF NEW.hub_customer_id IS NOT NULL THEN
RETURN NEW;
END IF;
-- Find matching hub customer baseret på navn
SELECT id INTO matched_hub_id
FROM customers
WHERE LOWER(TRIM(name)) = LOWER(TRIM(NEW.name))
LIMIT 1;
-- Hvis match fundet, sæt hub_customer_id
IF matched_hub_id IS NOT NULL THEN
NEW.hub_customer_id := matched_hub_id;
END IF;
RETURN NEW;
END;
$$ LANGUAGE plpgsql;
-- Drop trigger hvis den eksisterer
DROP TRIGGER IF EXISTS trigger_auto_link_tmodule_customer ON tmodule_customers;
-- Opret trigger der kører før INSERT eller UPDATE
CREATE TRIGGER trigger_auto_link_tmodule_customer
BEFORE INSERT OR UPDATE OF name
ON tmodule_customers
FOR EACH ROW
EXECUTE FUNCTION auto_link_tmodule_customer();
COMMENT ON FUNCTION link_tmodule_customers_to_hub() IS 'Linker eksisterende tmodule_customers til Hub customers baseret på navn match';
COMMENT ON FUNCTION auto_link_tmodule_customer() IS 'Automatisk linker nye/opdaterede tmodule_customers til Hub customers';
COMMENT ON TRIGGER trigger_auto_link_tmodule_customer ON tmodule_customers IS 'Auto-linker tmodule customers til Hub customers ved navn match';