From: Jean-Philippe Lang Date: Sun, 23 Oct 2016 11:31:20 +0000 (+0000) Subject: Add option to set a new version as default directly from New Version page (#24011). X-Git-Tag: 3.4.0~633 X-Git-Url: https://source.dussan.org/?a=commitdiff_plain;h=eb023bdcce2bd6d9ec3b1d37aa09e436c5ee8149;p=redmine.git Add option to set a new version as default directly from New Version page (#24011). git-svn-id: http://svn.redmine.org/redmine/trunk@15922 e93f8b46-1217-0410-a6f0-8f06a7374b81 --- diff --git a/app/models/version.rb b/app/models/version.rb index 98d1c6ac0..2b82f7c5b 100644 --- a/app/models/version.rb +++ b/app/models/version.rb @@ -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 diff --git a/app/views/versions/_form.html.erb b/app/views/versions/_form.html.erb index e723a4e2e..ade741f26 100644 --- a/app/views/versions/_form.html.erb +++ b/app/views/versions/_form.html.erb @@ -10,6 +10,9 @@

<%= f.text_field :wiki_page_title, :label => :label_wiki_page, :size => 60, :disabled => @project.wiki.nil? %>

<%= f.date_field :effective_date, :size => 10 %><%= calendar_for('version_effective_date') %>

<%= f.select :sharing, @version.allowed_sharings.collect {|v| [format_version_sharing(v), v]} %>

+<% if @version.new_record? %> +

<%= f.check_box :default_project_version, :label => :field_default_version %>

+<% end %> <% @version.custom_field_values.each do |value| %>

<%= custom_field_tag_with_label :version, value %>

diff --git a/test/unit/version_test.rb b/test/unit/version_test.rb index 56adc3c4a..470207be2 100644 --- a/test/unit/version_test.rb +++ b/test/unit/version_test.rb @@ -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')