Method: WorkflowRule.copy_one

Defined in:
app/models/workflow_rule.rb

.copy_one(source_tracker, source_role, target_tracker, target_role) ⇒ Object

Copies a single set of workflows from source to target



56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
# File 'app/models/workflow_rule.rb', line 56

def self.copy_one(source_tracker, source_role, target_tracker, target_role)
  unless source_tracker.is_a?(Tracker) && !source_tracker.new_record? &&
    source_role.is_a?(Role) && !source_role.new_record? &&
    target_tracker.is_a?(Tracker) && !target_tracker.new_record? &&
    target_role.is_a?(Role) && !target_role.new_record?

    raise ArgumentError.new("arguments can not be nil or unsaved objects")
  end

  if source_tracker == target_tracker && source_role == target_role
    false
  else
    transaction do
      where(:tracker_id => target_tracker.id, :role_id => target_role.id).delete_all
      connection.insert(
        "INSERT INTO #{WorkflowRule.table_name}" \
          " (tracker_id, role_id, old_status_id, new_status_id," \
           " author, assignee, field_name, #{connection.quote_column_name 'rule'}, type)" \
          " SELECT #{target_tracker.id}, #{target_role.id}, old_status_id, new_status_id," \
                  " author, assignee, field_name, #{connection.quote_column_name 'rule'}, type" \
            " FROM #{WorkflowRule.table_name}" \
            " WHERE tracker_id = #{source_tracker.id} AND role_id = #{source_role.id}"
      )
    end
    true
  end
end