--
-- workflow_case__start_case/4
--
create or replace function workflow_case__start_case(
  integer,
  integer,
  character varying,
  character varying
) returns int4 as $$

declare
  start_case__case_id                alias for $1;  
  start_case__creation_user          alias for $2;  -- default null  
  start_case__creation_ip            alias for $3;  -- default null
  start_case__msg                    alias for $4;  -- default null
  v_journal_id                       integer;        
begin
        /* Add an entry to the journal */
        v_journal_id := journal_entry__new(
            null, 
            start_case__case_id,
            'case start',
            'Case started',
            now(),
            start_case__creation_user,
            start_case__creation_ip,
            start_case__msg
        );

        update wf_cases 
           set state = 'active' 
         where case_id = start_case__case_id;

        PERFORM workflow_case__add_token (
            start_case__case_id, 
            'start',
            v_journal_id
        );

        -- Turn the wheels
        PERFORM workflow_case__sweep_automatic_transitions (
            start_case__case_id,
            v_journal_id
        );

        return 0; 
end;$$ language plpgsql;