Class: Wf::CaseCommand::FinishWorkitem

Inherits:
Object
  • Object
show all
Includes:
SimpleCommand
Defined in:
app/models/wf/case_command/finish_workitem.rb

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(workitem) ⇒ FinishWorkitem

Returns a new instance of FinishWorkitem.



7
8
9
# File 'app/models/wf/case_command/finish_workitem.rb', line 7

def initialize(workitem)
  @workitem = workitem
end

Instance Attribute Details

#workitemObject (readonly)

Returns the value of attribute workitem.



6
7
8
# File 'app/models/wf/case_command/finish_workitem.rb', line 6

def workitem
  @workitem
end

Instance Method Details

#callObject



11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
# File 'app/models/wf/case_command/finish_workitem.rb', line 11

def call
  Wf::ApplicationRecord.transaction do
    if workitem.forked?
      workitem.update!(finished_at: Time.zone.now, state: :finished)
      Wf::Workitem.increment_counter(:children_finished_count, workitem.parent_id)
      if parent = workitem.parent
        if (parent.children_finished_count >= parent.children_count) || workitem.transition.finish_condition.constantize.new.perform(workitem)
          parent.children.where(state: %i[started enabled]).find_each do |wi|
            wi.update!(overridden_at: Time.zone.now, state: :overridden)
          end
          FireTransitionInternal.call(parent)
          SweepAutomaticTransitions.call(parent.case)
        end
      end
    else
      FireTransitionInternal.call(workitem)
      SweepAutomaticTransitions.call(workitem.case)
    end
  end
end