-- Deploy jmp:insert_charge_for_cdr to pg -- requires: cdr_charge -- requires: cdr_with_charge -- requires: transactions BEGIN; CREATE OR REPLACE FUNCTION insert_charge_for_cdr() RETURNS TRIGGER AS $insert_charge_for_cdr$ DECLARE raw_rate NUMERIC; raw_charge NUMERIC; final_charge NUMERIC; BEGIN SELECT rate, charge INTO raw_rate, raw_charge FROM cdr_with_charge WHERE cdr_id=NEW.cdr_id; final_charge := cdr_charge(NEW.start, NEW.customer_id, raw_rate, raw_charge); IF final_charge > 0.0 THEN INSERT INTO transactions ( customer_id, transaction_id, created_at, amount, note ) VALUES ( NEW.customer_id, 'cdr_charge_for_' || NEW.cdr_id, NEW.start + MAKE_INTERVAL(secs := NEW.billsec), -final_charge, 'Charge for ' || (CEIL(NEW.billsec / 60.0)) || ' minute call' ); END IF; RETURN NEW; END; $insert_charge_for_cdr$ LANGUAGE plpgsql; CREATE TRIGGER insert_charge_for_cdr AFTER INSERT ON cdr FOR EACH ROW EXECUTE PROCEDURE insert_charge_for_cdr(); COMMIT;