CREATE FUNCTION billing_internal() RETURNS trigger AS $billing_internal$ BEGIN UPDATE calls SET duration = NEW.duration, billing = NEW.billsec, disposition = NEW.disposition WHERE substr(NEW.channel,6,5) = calls.caller_id AND NEW.calldate BETWEEN calls.created_at - '2 seconds'::interval AND calls.created_at + '2 seconds'::interval; RETURN NEW; END; $billing_internal$ LANGUAGE plpgsql; CREATE TRIGGER billing_system_internal BEFORE INSERT OR UPDATE ON cdr FOR EACH ROW EXECUTE PROCEDURE billing_internal(); CREATE FUNCTION billing_external() RETURNS trigger AS $billing_external$ BEGIN UPDATE calls SET duration = NEW.duration, billing = NEW.billsec, disposition = NEW.disposition WHERE NEW.dst = calls.dialed_number AND NEW.calldate BETWEEN calls.created_at - '2 seconds'::interval AND calls.created_at + '2 seconds'::interval; RETURN NEW; END; $billing_external$ LANGUAGE plpgsql; CREATE TRIGGER billing_system_external BEFORE INSERT OR UPDATE ON cdr FOR EACH ROW EXECUTE PROCEDURE billing_external(); CREATE FUNCTION billing_legacy_external() RETURNS trigger AS $billing_legacy_external$ BEGIN UPDATE calls SET duration = NEW.duration, billing = NEW.billsec, disposition = NEW.disposition WHERE substring(NEW.dstchannel,6,5) = calls.dialed_number AND NEW.src = '40829350' AND NEW.calldate BETWEEN calls.created_at - '2 seconds'::interval AND calls.created_at + '2 seconds'::interval; RETURN NEW; END; $billing_legacy_external$ LANGUAGE plpgsql; CREATE TRIGGER billing_system_legacy_external BEFORE INSERT OR UPDATE ON cdr FOR EACH ROW EXECUTE PROCEDURE billing_legacy_external();