Mercurial > hg > soundsoftware-site
annotate db/migrate/20130215111141_populate_issues_closed_on.rb @ 1519:afce8026aaeb redmine-2.4-integration
Merge from branch "live"
author | Chris Cannam |
---|---|
date | Tue, 09 Sep 2014 09:34:53 +0100 |
parents | 261b3d9a4903 |
children |
rev | line source |
---|---|
Chris@1464 | 1 class PopulateIssuesClosedOn < ActiveRecord::Migration |
Chris@1464 | 2 def up |
Chris@1464 | 3 closed_status_ids = IssueStatus.where(:is_closed => true).pluck(:id) |
Chris@1464 | 4 if closed_status_ids.any? |
Chris@1464 | 5 # First set closed_on for issues that have been closed once |
Chris@1464 | 6 closed_status_values = closed_status_ids.map {|status_id| "'#{status_id}'"}.join(',') |
Chris@1464 | 7 subselect = "SELECT MAX(#{Journal.table_name}.created_on)" + |
Chris@1464 | 8 " FROM #{Journal.table_name}, #{JournalDetail.table_name}" + |
Chris@1464 | 9 " WHERE #{Journal.table_name}.id = #{JournalDetail.table_name}.journal_id" + |
Chris@1464 | 10 " AND #{Journal.table_name}.journalized_type = 'Issue' AND #{Journal.table_name}.journalized_id = #{Issue.table_name}.id" + |
Chris@1464 | 11 " AND #{JournalDetail.table_name}.property = 'attr' AND #{JournalDetail.table_name}.prop_key = 'status_id'" + |
Chris@1464 | 12 " AND #{JournalDetail.table_name}.old_value NOT IN (#{closed_status_values})" + |
Chris@1464 | 13 " AND #{JournalDetail.table_name}.value IN (#{closed_status_values})" |
Chris@1464 | 14 Issue.update_all "closed_on = (#{subselect})" |
Chris@1464 | 15 |
Chris@1464 | 16 # Then set closed_on for closed issues that weren't up updated by the above UPDATE |
Chris@1464 | 17 # No journal was found so we assume that they were closed on creation |
Chris@1464 | 18 Issue.update_all "closed_on = created_on", {:status_id => closed_status_ids, :closed_on => nil} |
Chris@1464 | 19 end |
Chris@1464 | 20 end |
Chris@1464 | 21 |
Chris@1464 | 22 def down |
Chris@1464 | 23 Issue.update_all :closed_on => nil |
Chris@1464 | 24 end |
Chris@1464 | 25 end |