--
-- workflow_case__release_token/2
--
create or replace function workflow_case__release_token(
  integer,
  integer
) returns int4 as $$

declare
  release_token__task_id                alias for $1;  
  release_token__journal_id             alias for $2;  
  token_rec                             record;
begin
        /* Add a new token for each released one */
        for token_rec in 
            select token_id, 
                   case_id, 
                   place_key
            from   wf_tokens
            where  state = 'locked'
            and    locked_task_id = release_token__task_id
        LOOP
            PERFORM workflow_case__add_token (
                token_rec.case_id,
                token_rec.place_key,
                release_token__journal_id
            );
        end loop;

        /* Mark the released ones canceled */
        update wf_tokens
        set    state = 'canceled',
               canceled_date = now(),
               canceled_journal_id = release_token__journal_id
        where  state = 'locked'
        and    locked_task_id = release_token__task_id;

        return 0; 
end;$$ language plpgsql;