CREATE FUNCTION apply_billing_stop_function() RETURNS TRIGGER AS $apply_billing_stop_function$ DECLARE result RECORD; BEGIN SELECT route, class, destid, description, init, inc, rate, cost, CEIL(NEW.duration::float / routes.inc) * routes.inc AS billtime, ((CEIL(NEW.duration::float / routes.inc) * routes.inc)::float / 60) * routes.rate AS total INTO result FROM routes WHERE routes.class = (SELECT class FROM clients WHERE prefix = NEW.prefix) AND SUBSTR(NEW.callee, (CASE WHEN (SELECT strip1 FROM providers WHERE destid = routes.destid) AND SUBSTR(NEW.callee, 1, 1) = '1' THEN 2 ELSE 1 END)) LIKE routes.route || '%' AND active ORDER BY routes.route DESC, routes.rate ASC LIMIT 1; IF result.billtime < result.init AND result.billtime > 0 THEN result.billtime := result.init; END IF; NEW.client := (SELECT name FROM clients WHERE prefix = NEW.prefix); NEW.route := result.route; NEW.class := result.class; NEW.description := result.description; NEW.init := result.init; NEW.inc := result.inc; NEW.billtime := result.billtime; NEW.rate := result.rate; NEW.cost := result.cost; NEW.total := result.total; DELETE FROM cdrs_current WHERE channel = NEW.channel; RETURN NEW; END; $apply_billing_stop_function$ LANGUAGE 'plpgsql';