annotate db/migrate/20130215111141_populate_issues_closed_on.rb @ 1524:82fac3dcf466 redmine-2.5-integration

Fix failure to interpret Javascript when autocompleting members for project
author Chris Cannam <chris.cannam@soundsoftware.ac.uk>
date Thu, 11 Sep 2014 10:24:38 +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