--
-- workflow_case__set_task_assignments/3
--
create or replace function workflow_case__set_task_assignments(
integer,
character varying,
character varying
) returns int4 as $$
declare
set_task_assignments__task_id alias for $1;
set_task_assignments__callback alias for $2;
set_task_assignments__custom_arg alias for $3;
v_done_p boolean;
case_assignment_rec record;
context_assignment_rec record;
v_str text;
begin
/* Find out who to assign the given task to.
*
* 1. See if there are rows in wf_case_assignments.
* 2. If not, and a callback is defined, execute that.
* 3. Otherwise, grab the assignment from the workflow context.
*
* (We used to use the callback first, but that makes
* reassignment of tasks difficult.)
*/
v_done_p := 'f';
for case_assignment_rec in select party_id
from wf_case_assignments ca, wf_tasks t, wf_transitions tr
where t.task_id = set_task_assignments__task_id
and ca.case_id = t.case_id
and ca.role_key = tr.role_key
and tr.workflow_key = t.workflow_key
and tr.transition_key = t.transition_key
LOOP
v_done_p := 't';
PERFORM workflow_case__add_task_assignment (
set_task_assignments__task_id,
case_assignment_rec.party_id,
'f'
);
end loop;
if v_done_p != 't' then
if set_task_assignments__callback != '' and set_task_assignments__callback is not null then
v_str := 'select '|| set_task_assignments__callback || '(' ||
set_task_assignments__task_id || ',' ||
coalesce(quote_literal(set_task_assignments__custom_arg),'null') || ')';
execute v_str;
else
for context_assignment_rec in
select party_id
from wf_context_assignments ca, wf_cases c, wf_tasks t, wf_transitions tr
where t.task_id = set_task_assignments__task_id
and c.case_id = t.case_id
and ca.context_key = c.context_key
and ca.workflow_key = t.workflow_key
and ca.role_key = tr.role_key
and tr.workflow_key = t.workflow_key
and tr.transition_key = t.transition_key
LOOP
PERFORM workflow_case__add_task_assignment (
set_task_assignments__task_id,
context_assignment_rec.party_id,
'f'
);
end LOOP;
end if;
end if;
return 0;
end;$$ language plpgsql;