52 lines
1.7 KiB
PL/PgSQL
52 lines
1.7 KiB
PL/PgSQL
CREATE OR REPLACE FUNCTION card_timelines ()
|
|
RETURNS TRIGGER
|
|
AS $$
|
|
DECLARE
|
|
temp RECORD;
|
|
srow RECORD;
|
|
BEGIN
|
|
IF (TG_OP = 'INSERT') THEN
|
|
IF NEW.virtual_activated_at IS NOT NULL THEN
|
|
RAISE NOTICE 'row % inserted', NEW.sim;
|
|
SELECT
|
|
virtual_order_cards.created_at,
|
|
virtual_packages.service_months,
|
|
virtual_packages.name AS package_name INTO srow
|
|
FROM
|
|
virtual_order_cards
|
|
JOIN virtual_packages ON virtual_order_cards.package_id = virtual_packages.id
|
|
WHERE
|
|
sim = NEW.sim;
|
|
IF FOUND THEN
|
|
SELECT
|
|
* INTO temp
|
|
FROM
|
|
timelines
|
|
WHERE
|
|
sim = NEW.sim
|
|
AND package_type = 0;
|
|
IF FOUND THEN
|
|
DELETE FROM timelines
|
|
WHERE sim = NEW.sim
|
|
AND package_type = 0;
|
|
END IF;
|
|
INSERT INTO timelines (sim, package_type, package_name, starttime, endtime)
|
|
VALUES (NEW.sim, 0, srow.package_name, NEW.virtual_activated_at, NEW.virtual_activated_at + (srow.service_months || ' month')::interval);
|
|
END IF;
|
|
END IF;
|
|
ELSIF (TG_OP = 'UPDATE') THEN
|
|
IF OLD.virtual_activated_at IS NOT NULL OR NEW.virtual_activated_at IS NOT NULL THEN
|
|
IF NEW.virtual_activated_at IS NULL THEN
|
|
RAISE NOTICE 'NEW virtual_activated_at IS NULL';
|
|
ELSE
|
|
RAISE NOTICE 'NEW virtual_activated_at IS NOT NULL';
|
|
END IF;
|
|
END IF;
|
|
ELSIF (TG_OP = 'DELETE') THEN
|
|
END IF;
|
|
RETURN NULL;
|
|
END;
|
|
$$
|
|
LANGUAGE plpgsql;
|
|
|