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
'wiki_page_title',
'status',
'sharing',
+ 'default_project_version',
'custom_field_values',
'custom_fields'
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
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
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
<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>
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')