Actions
Feature #11989
openAllow done ratios to be affected by status AND field
Status:
New
Priority:
Normal
Assignee:
-
Category:
Issues workflow
Target version:
-
Start date:
Due date:
% Done:
50%
Estimated time:
Resolution:
Description
Consider a situation where a defect can be re-opened, or a defect can be moved to the 'resolved'/'released' state, but requires verification before it can be closed. It'd be nice to have the 'resolved'/'released' status the done ratio to 100%, but, if you do that, then you lose the capability to track progress during the 'in progress' state.
Here's a fix that allows for both (version 2.1.0):
diff -rupN redmine-2.1.0/app/models/issue.rb redmine-2.1.0-modified/app/models/issue.rb --- redmine-2.1.0/app/models/issue.rb 2012-09-16 06:54:11.000000000 -0600 +++ redmine-2.1.0-modified/app/models/issue.rb 2012-09-28 11:16:32.479809960 -0600 @@ -49,7 +49,7 @@ class Issue < ActiveRecord::Base acts_as_activity_provider :find_options => {:include => [:project, :author, :tracker]}, :author_key => :author_id - DONE_RATIO_OPTIONS = %w(issue_field issue_status) + DONE_RATIO_OPTIONS = %w(issue_field issue_status issue_field_and_status) attr_reader :current_journal @@ -494,6 +496,10 @@ class Issue < ActiveRecord::Base def self.use_field_for_done_ratio? Setting.issue_done_ratio == 'issue_field' end + + def use_field_for_done_ratio? + Setting.issue_done_ratio == 'issue_field' || (Setting.issue_done_ratio == 'issue_field_or_status' && status && status.default_done_ratio.nil?) + end def validate_issue if self.due_date.nil? && @attributes['due_date'] && !@attributes['due_date'].empty? diff -rupN redmine-2.1.0/app/views/context_menus/issues.html.erb redmine-2.1.0-modified/app/views/context_menus/issues.html.erb --- redmine-2.1.0/app/views/context_menus/issues.html.erb 2012-09-16 06:54:12.000000000 -0600 +++ redmine-2.1.0-modified/app/views/context_menus/issues.html.erb 2012-09-28 11:11:07.979813055 -0600 @@ -91,7 +91,7 @@ </li> <% end -%> - <% if @safe_attributes.include?('done_ratio') && Issue.use_field_for_done_ratio? %> + <% if @safe_attributes.include?('done_ratio') && @issue.use_field_for_done_ratio %> <li class="folder"> <a href="#" class="submenu"><%= l(:field_done_ratio) %></a> <ul> diff -rupN redmine-2.1.0/app/views/issues/_attributes.html.erb redmine-2.1.0-modified/app/views/issues/_attributes.html.erb --- redmine-2.1.0/app/views/issues/_attributes.html.erb 2012-09-16 06:54:13.000000000 -0600 +++ redmine-2.1.0-modified/app/views/issues/_attributes.html.erb 2012-09-28 11:10:31.103813406 -0600 @@ -58,7 +58,7 @@ <p><%= f.text_field :estimated_hours, :size => 3, :disabled => !@issue.leaf?, :required => @issue.required_attribute?('estimated_hours') %> <%= l(:field_hours) %></p> <% end %> -<% if @issue.safe_attribute?('done_ratio') && @issue.leaf? && Issue.use_field_for_done_ratio? %> +<% if @issue.safe_attribute?('done_ratio') && @issue.leaf? && @issue.use_field_for_done_ratio? %> <p><%= f.select :done_ratio, ((0..10).to_a.collect {|r| ["#{r*10} %", r*10] }), :required => @issue.required_attribute?('done_ratio') %></p> <% end %> </div> diff -rupN redmine-2.1.0/app/views/issue_statuses/_form.html.erb redmine-2.1.0-modified/app/views/issue_statuses/_form.html.erb --- redmine-2.1.0/app/views/issue_statuses/_form.html.erb 2012-09-16 06:54:12.000000000 -0600 +++ redmine-2.1.0-modified/app/views/issue_statuses/_form.html.erb 2012-09-28 11:18:48.535808664 -0600 @@ -2,7 +2,7 @@ <div class="box tabular"> <p><%= f.text_field :name, :required => true %></p> -<% if Issue.use_status_for_done_ratio? %> +<% if not Issue.use_field_for_done_ratio? %> <p><%= f.select :default_done_ratio, ((0..10).to_a.collect {|r| ["#{r*10} %", r*10] }), :include_blank => true, :label => :field_done_ratio %></p> <% end %> <p><%= f.check_box :is_closed %></p> diff -rupN redmine-2.1.0/app/views/issue_statuses/index.html.erb redmine-2.1.0-modified/app/views/issue_statuses/index.html.erb --- redmine-2.1.0/app/views/issue_statuses/index.html.erb 2012-09-16 06:54:12.000000000 -0600 +++ redmine-2.1.0-modified/app/views/issue_statuses/index.html.erb 2012-09-28 11:19:39.799808172 -0600 @@ -1,6 +1,6 @@ <div class="contextual"> <%= link_to l(:label_issue_status_new), new_issue_status_path, :class => 'icon icon-add' %> -<%= link_to(l(:label_update_issue_done_ratios), update_issue_done_ratio_issue_statuses_path, :class => 'icon icon-multiple', :method => 'post', :data => {:confirm => l(:text_are_you_sure)}) if Issue.use_status_for_done_ratio? %> +<%= link_to(l(:label_update_issue_done_ratios), update_issue_done_ratio_issue_statuses_path, :class => 'icon icon-multiple', :method => 'post', :data => {:confirm => l(:text_are_you_sure)}) if not Issue.use_field_for_done_ratio? %> </div> <h2><%=l(:label_issue_status_plural)%></h2> @@ -8,7 +8,7 @@ <table class="list"> <thead><tr> <th><%=l(:field_status)%></th> - <% if Issue.use_status_for_done_ratio? %> + <% if not Issue.use_field_for_done_ratio? %> <th><%=l(:field_done_ratio)%></th> <% end %> <th><%=l(:field_is_default)%></th> @@ -20,7 +20,7 @@ <% for status in @issue_statuses %> <tr class="<%= cycle("odd", "even") %>"> <td><%= link_to h(status.name), edit_issue_status_path(status) %></td> - <% if Issue.use_status_for_done_ratio? %> + <% if not Issue.use_field_for_done_ratio? %> <td align="center"><%= h status.default_done_ratio %></td> <% end %> <td align="center"><%= checked_image status.is_default? %></td> diff -rupN redmine-2.1.0/config/locales/en.yml redmine-2.1.0-modified/config/locales/en.yml --- redmine-2.1.0/config/locales/en.yml 2012-09-16 06:54:19.000000000 -0600 +++ redmine-2.1.0-modified/config/locales/en.yml 2012-09-28 11:13:35.371811650 -0600 @@ -382,6 +382,7 @@ en: setting_issue_done_ratio: Calculate the issue done ratio with setting_issue_done_ratio_issue_field: Use the issue field setting_issue_done_ratio_issue_status: Use the issue status + setting_issue_done_ratio_issue_field_and_status: Use the issue field and status
Actions