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

declare
  clear_task_assignments__task_id                alias for $1;  
  clear_task_assignments__permanent_p		 alias for $2;
  v_case_id                                      integer;        
  v_transition_key                               varchar;  
  v_role_key					 wf_roles.role_key%TYPE;
  v_workflow_key                                 varchar;  
  v_context_key                                  varchar;  
  v_callback                                     varchar;  
  v_custom_arg                                   varchar; 
begin
        -- get some information

        select ta.case_id, ta.transition_key, tr.role_key, ta.workflow_key, c.context_key
          into v_case_id, v_transition_key, v_role_key, v_workflow_key, v_context_key
          from wf_tasks ta, wf_transitions tr, wf_cases c
         where ta.task_id = clear_task_assignments__task_id
           and tr.workflow_key = ta.workflow_key
           and tr.transition_key = ta.transition_key
           and c.case_id = ta.case_id;

        -- make the unassignment stick as a manual assignment

        if clear_task_assignments__permanent_p = 't' then
            perform workflow_case__clear_manual_assignments (
                v_case_id,
                v_role_key
            );
        end if;

        -- delete the rows


        delete 
        from   wf_task_assignments
        where  task_id = clear_task_assignments__task_id;

        -- fire the unassigned callback

        select unassigned_callback, unassigned_custom_arg
        into   v_callback, v_custom_arg
        from   wf_context_transition_info
        where  workflow_key = v_workflow_key
        and    context_key  = v_context_key
        and    transition_key = v_transition_key;

        PERFORM workflow_case__execute_unassigned_callback (
            v_callback,
            clear_task_assignments__task_id,
            v_custom_arg
        );

        return 0; 
end;$$ language plpgsql;