Mercurial > hg > soundsoftware-site
comparison db/migrate/20130215111141_populate_issues_closed_on.rb @ 1298:4f746d8966dd redmine_2.3_integration
Merge from redmine-2.3 branch to create new branch redmine-2.3-integration
author | Chris Cannam |
---|---|
date | Fri, 14 Jun 2013 09:28:30 +0100 |
parents | 622f24f53b42 |
children |
comparison
equal
deleted
inserted
replaced
1297:0a574315af3e | 1298:4f746d8966dd |
---|---|
1 class PopulateIssuesClosedOn < ActiveRecord::Migration | |
2 def up | |
3 closed_status_ids = IssueStatus.where(:is_closed => true).pluck(:id) | |
4 if closed_status_ids.any? | |
5 # First set closed_on for issues that have been closed once | |
6 closed_status_values = closed_status_ids.map {|status_id| "'#{status_id}'"}.join(',') | |
7 subselect = "SELECT MAX(#{Journal.table_name}.created_on)" + | |
8 " FROM #{Journal.table_name}, #{JournalDetail.table_name}" + | |
9 " WHERE #{Journal.table_name}.id = #{JournalDetail.table_name}.journal_id" + | |
10 " AND #{Journal.table_name}.journalized_type = 'Issue' AND #{Journal.table_name}.journalized_id = #{Issue.table_name}.id" + | |
11 " AND #{JournalDetail.table_name}.property = 'attr' AND #{JournalDetail.table_name}.prop_key = 'status_id'" + | |
12 " AND #{JournalDetail.table_name}.old_value NOT IN (#{closed_status_values})" + | |
13 " AND #{JournalDetail.table_name}.value IN (#{closed_status_values})" | |
14 Issue.update_all "closed_on = (#{subselect})" | |
15 | |
16 # Then set closed_on for closed issues that weren't up updated by the above UPDATE | |
17 # No journal was found so we assume that they were closed on creation | |
18 Issue.update_all "closed_on = created_on", {:status_id => closed_status_ids, :closed_on => nil} | |
19 end | |
20 end | |
21 | |
22 def down | |
23 Issue.update_all :closed_on => nil | |
24 end | |
25 end |