]> source.dussan.org Git - redmine.git/commitdiff
Add option to set a new version as default directly from New Version page (#24011).
authorJean-Philippe Lang <jp_lang@yahoo.fr>
Sun, 23 Oct 2016 11:31:20 +0000 (11:31 +0000)
committerJean-Philippe Lang <jp_lang@yahoo.fr>
Sun, 23 Oct 2016 11:31:20 +0000 (11:31 +0000)
git-svn-id: http://svn.redmine.org/redmine/trunk@15922 e93f8b46-1217-0410-a6f0-8f06a7374b81

app/models/version.rb
app/views/versions/_form.html.erb
test/unit/version_test.rb

index 98d1c6ac02748f0e4bd29a09ccac9f817b5b48f1..2b82f7c5b9696e4ec1415f891557d55fcf9f0382 100644 (file)
@@ -19,6 +19,7 @@ class Version < ActiveRecord::Base
   include Redmine::SafeAttributes
 
   after_update :update_issues_from_sharing_change
+  after_save :update_default_project_version
   before_destroy :nullify_projects_default_version
 
   belongs_to :project
@@ -65,6 +66,7 @@ class Version < ActiveRecord::Base
     'wiki_page_title',
     'status',
     'sharing',
+    'default_project_version',
     'custom_field_values',
     'custom_fields'
 
@@ -82,6 +84,12 @@ class Version < ActiveRecord::Base
     project.present? && project.attachments_deletable?(usr)
   end
 
+  alias :base_reload :reload
+  def reload(*args)
+    @default_project_version = nil
+    base_reload(*args)
+  end
+
   def start_date
     @start_date ||= fixed_issues.minimum('start_date')
   end
@@ -263,6 +271,18 @@ class Version < ActiveRecord::Base
     fixed_issues.empty? && !referenced_by_a_custom_field?
   end
 
+  def default_project_version
+    if @default_project_version.nil?
+      project.present? && project.default_version == self
+    else
+      @default_project_version
+    end
+  end
+
+  def default_project_version=(arg)
+    @default_project_version = (arg == '1' || arg == true) 
+  end
+
   private
 
   def load_issue_counts
@@ -291,6 +311,12 @@ class Version < ActiveRecord::Base
     end
   end
 
+  def update_default_project_version
+    if @default_project_version && project.present?
+      project.update_columns :default_version_id => id
+    end
+  end
+
   # Returns the average estimated time of assigned issues
   # or 1 if no issue has an estimated time
   # Used to weight unestimated issues in progress calculation
index e723a4e2e19dacfc49cf370c3bc8f4e8de6f93c7..ade741f26a8418085c3632791b875d791bf4749c 100644 (file)
@@ -10,6 +10,9 @@
 <p><%= f.text_field :wiki_page_title, :label => :label_wiki_page, :size => 60, :disabled => @project.wiki.nil? %></p>
 <p><%= f.date_field :effective_date, :size => 10 %><%= calendar_for('version_effective_date') %></p>
 <p><%= f.select :sharing, @version.allowed_sharings.collect {|v| [format_version_sharing(v), v]} %></p>
+<% if @version.new_record? %>
+<p><%= f.check_box :default_project_version, :label => :field_default_version %></p>
+<% end %>
 
 <% @version.custom_field_values.each do |value| %>
   <p><%= custom_field_tag_with_label :version, value %></p>
index 56adc3c4a4472b27d74785409852c0fb042a2785..470207be228c3b7bfb256c09165f3e48d10fa1d9 100644 (file)
@@ -29,6 +29,22 @@ class VersionTest < ActiveSupport::TestCase
     assert_equal 'none', v.sharing
   end
 
+  def test_create_as_default_project_version
+    project = Project.find(1)
+    v = Version.new(:project => project, :name => '1.1',
+                    :default_project_version => '1')
+    assert v.save
+    assert_equal v, project.reload.default_version
+  end
+
+  def test_create_not_as_default_project_version
+    project = Project.find(1)
+    v = Version.new(:project => project, :name => '1.1',
+                    :default_project_version => '0')
+    assert v.save
+    assert_nil project.reload.default_version
+  end
+
   def test_invalid_effective_date_validation
     v = Version.new(:project => Project.find(1), :name => '1.1',
                     :effective_date => '99999-01-01')