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

declare
  cancel_task__task_id                alias for $1;  
  cancel_task__journal_id             alias for $2;  
  v_case_id                           integer;
begin
        PERFORM workflow_case__ensure_task_in_state (cancel_task__task_id, 
                                                    'started');
        select case_id into v_case_id 
        from wf_tasks 
        where task_id = cancel_task__task_id;
    
        /* Mark the task canceled */

        update wf_tasks 
        set    state = 'canceled',
               canceled_date =  now()
        where  task_id = cancel_task__task_id;

    
        /* Release our reserved tokens */

        PERFORM workflow_case__release_token (
            cancel_task__task_id,
            cancel_task__journal_id
        );

        /* The workflow state has now changed, so we must run this */
        
        PERFORM workflow_case__sweep_automatic_transitions (
            v_case_id,
            cancel_task__journal_id
        );

        return 0; 
end;$$ language plpgsql;