--
-- workflow_case__consume_token/4
--
create or replace function workflow_case__consume_token(
integer,
character varying,
integer,
integer
) returns int4 as $$
declare
consume_token__case_id alias for $1;
consume_token__place_key alias for $2;
consume_token__journal_id alias for $3;
consume_token__task_id alias for $4; -- default null
begin
if consume_token__task_id is null then
update wf_tokens
set state = 'consumed',
consumed_date = now(),
consumed_journal_id = consume_token__journal_id
where token_id = (select token_id
from wf_tokens
where case_id = consume_token__case_id
and place_key = consume_token__place_key
and state = 'free'
limit 1);
else
update wf_tokens
set state = 'consumed',
consumed_date = now(),
consumed_journal_id = consume_token__journal_id
where case_id = consume_token__case_id
and place_key = consume_token__place_key
and state = 'locked'
and locked_task_id = consume_token__task_id;
end if;
return 0;
end;$$ language plpgsql;