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

declare
  sweep_automatic_transitions__case_id                alias for $1;  
  sweep_automatic_transitions__journal_id             alias for $2;  
  v_done_p                                            boolean:='f';       
  v_finished_p                                        boolean;       
  task_rec                                            record;
begin

        PERFORM workflow_case__enable_transitions(sweep_automatic_transitions__case_id);
        while v_done_p != 't' loop
            v_done_p := 't';
            v_finished_p := workflow_case__finished_p (
                sweep_automatic_transitions__case_id,
                sweep_automatic_transitions__journal_id);

            if v_finished_p = 'f' then
                for task_rec in 
                    select task_id
                    from   wf_tasks ta, wf_transitions tr
                    where  tr.workflow_key = ta.workflow_key
                    and    tr.transition_key = ta.transition_key
                    and    tr.trigger_type = 'automatic'
                    and    ta.state = 'enabled'
                    and    ta.case_id = sweep_automatic_transitions__case_id
                LOOP
                    PERFORM workflow_case__fire_transition_internal (
                        task_rec.task_id,
                        sweep_automatic_transitions__journal_id
                    );

                    v_done_p := 'f';
                end loop;
                PERFORM workflow_case__enable_transitions(sweep_automatic_transitions__case_id);
            end if;

        end loop;

        return 0; 
end;$$ language plpgsql;