summaryrefslogtreecommitdiffstats
path: root/db/migrate/20150725112753_insert_allowed_statuses_for_new_issues.rb
blob: f86d54f47e0a9f4012dbf1970dd0e5b7905f682e (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
class InsertAllowedStatusesForNewIssues < ActiveRecord::Migration[4.2]
  def self.up
    # Adds the default status for all trackers and roles
    sql = "INSERT INTO #{WorkflowTransition.table_name} (tracker_id, old_status_id, new_status_id, role_id, type)" +
      " SELECT t.id, 0, t.default_status_id, r.id, 'WorkflowTransition'" +
      " FROM #{Tracker.table_name} t, #{Role.table_name} r"
    WorkflowTransition.connection.execute(sql)

    # Adds other statuses that are reachable with one transition
    # to preserve previous behaviour as default
    sql = "INSERT INTO #{WorkflowTransition.table_name} (tracker_id, old_status_id, new_status_id, role_id, type)" +
      " SELECT t.id, 0, w.new_status_id, w.role_id, 'WorkflowTransition'" +
      " FROM #{Tracker.table_name} t" +
      " JOIN #{IssueStatus.table_name} s on s.id = t.default_status_id" +
      " JOIN #{WorkflowTransition.table_name} w on w.tracker_id = t.id and w.old_status_id = s.id and w.type = 'WorkflowTransition'" +
      " WHERE w.new_status_id <> t.default_status_id"
    WorkflowTransition.connection.execute(sql)
  end

  def self.down
    WorkflowTransition.where(:old_status_id => 0).delete_all
  end
end