--
-- workflow_case__remove_task_assignment/3
--
create or replace function workflow_case__remove_task_assignment(
integer,
integer,
boolean
) returns int4 as $$
declare
remove_task_assignment__task_id alias for $1;
remove_task_assignment__party_id alias for $2;
remove_task_assignment__permanent_p alias for $3;
v_num_assigned integer;
v_case_id integer;
v_role_key wf_roles.role_key%TYPE;
v_workflow_key varchar;
v_transition_key varchar;
v_context_key varchar;
callback_rec record;
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 = remove_task_assignment__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 same assignment as a manual assignment
if remove_task_assignment__permanent_p = 't' then
perform workflow_case__remove_manual_assignment (
v_case_id,
v_role_key,
remove_task_assignment__party_id
);
end if;
-- now delete the row
delete
from wf_task_assignments
where task_id = remove_task_assignment__task_id
and party_id = remove_task_assignment__party_id;
-- check if the task now became unassigned
select count(*)
into v_num_assigned
from wf_task_assignments
where task_id = remove_task_assignment__task_id;
if v_num_assigned > 0 then
return 0;
end if;
-- yup, the task is now unassigned; fire the callback
select unassigned_callback, unassigned_custom_arg
into callback_rec
from wf_context_transition_info
where workflow_key = v_workflow_key
and context_key = v_context_key
and transition_key = v_transition_key;
if FOUND then
PERFORM workflow_case__execute_unassigned_callback (
callback_rec.unassigned_callback,
remove_task_assignment__task_id,
callback_rec.unassigned_custom_arg
);
end if;
return 0;
end;$$ language plpgsql;