-- -- workflow_case__cancel/4 -- create or replace function workflow_case__cancel( integer, integer, character varying, character varying ) returns int4 as $$ declare cancel__case_id alias for $1; cancel__user_id alias for $2; -- default null cancel__ip_address alias for $3; -- default null cancel__msg alias for $4; -- default null v_state varchar; v_journal_id integer; begin select state into v_state from wf_cases where case_id = cancel__case_id; if v_state != 'active' and v_state != 'suspended' then raise EXCEPTION '-20000: Only active or suspended cases can be canceled'; end if; /* Add an entry to the journal */ v_journal_id := journal_entry__new( null, cancel__case_id, 'case cancel', 'Case canceled', now(), cancel__user_id, cancel__ip_address, cancel__msg ); update wf_cases set state = 'canceled' where case_id = cancel__case_id; return 0; end;$$ language plpgsql;