--
-- workflow_case__fire_message_transition/1
--
create or replace function workflow_case__fire_message_transition(
  integer
) returns int4 as $$

declare
  fire_message_transition__task_id               alias for $1;  
  v_case_id                                      integer;        
  v_transition_name                              varchar;  
  v_trigger_type                                 varchar;   
  v_journal_id                                   integer;        
begin
        select t.case_id, tr.transition_name, tr.trigger_type 
        into   v_case_id, v_transition_name, v_trigger_type
        from   wf_tasks t, wf_transitions tr
        where  t.task_id = fire_message_transition__task_id
        and    tr.workflow_key = t.workflow_key
        and    tr.transition_key = t.transition_key;

        if v_trigger_type != 'message' then
	    raise EXCEPTION '-20000: Transition "%" is not message triggered',  v_transition_name;
        end if;

        /* Add an entry to the journal */
        v_journal_id := journal_entry__new (
            null,
            v_case_id,
            'task ' || fire_message_transition__task_id || ' fire',
            v_transition_name || ' fired',
            now(),
            null,
            null,
            null
        );
        
        PERFORM workflow_case__fire_transition_internal(
            fire_message_transition__task_id,
            v_journal_id
        );

        PERFORM workflow_case__sweep_automatic_transitions (
            v_case_id,
            v_journal_id
        );

        return 0; 
end;$$ language plpgsql;