Feature #5490 » issue_no_parent_updates-2.3-stable.diff
app/models/issue.rb | ||
---|---|---|
1201 | 1201 |
def recalculate_attributes_for(issue_id) |
1202 | 1202 |
if issue_id && p = Issue.find_by_id(issue_id) |
1203 | 1203 |
# priority = highest priority of children |
1204 |
if priority_position = p.children.maximum("#{IssuePriority.table_name}.position", :joins => :priority) |
|
1205 |
p.priority = IssuePriority.find_by_position(priority_position) |
|
1206 |
end |
|
1204 |
#Disabled |
|
1205 |
#if priority_position = p.children.maximum("#{IssuePriority.table_name}.position", :joins => :priority) |
|
1206 |
# p.priority = IssuePriority.find_by_position(priority_position) |
|
1207 |
#end |
|
1207 | 1208 | |
1208 | 1209 |
# start/due dates = lowest/highest dates of children |
1209 |
p.start_date = p.children.minimum(:start_date) |
|
1210 |
p.due_date = p.children.maximum(:due_date) |
|
1211 |
if p.start_date && p.due_date && p.due_date < p.start_date |
|
1212 |
p.start_date, p.due_date = p.due_date, p.start_date |
|
1213 |
end |
|
1210 |
#p.start_date = p.children.minimum(:start_date)
|
|
1211 |
#p.due_date = p.children.maximum(:due_date)
|
|
1212 |
#if p.start_date && p.due_date && p.due_date < p.start_date
|
|
1213 |
# p.start_date, p.due_date = p.due_date, p.start_date
|
|
1214 |
#end
|
|
1214 | 1215 | |
1215 | 1216 |
# done ratio = weighted average ratio of leaves |
1216 |
unless Issue.use_status_for_done_ratio? && p.status && p.status.default_done_ratio |
|
1217 |
leaves_count = p.leaves.count |
|
1218 |
if leaves_count > 0 |
|
1219 |
average = p.leaves.average(:estimated_hours).to_f |
|
1220 |
if average == 0 |
|
1221 |
average = 1 |
|
1222 |
end |
|
1223 |
done = p.leaves.sum("COALESCE(estimated_hours, #{average}) * (CASE WHEN is_closed = #{connection.quoted_true} THEN 100 ELSE COALESCE(done_ratio, 0) END)", :joins => :status).to_f |
|
1224 |
progress = done / (average * leaves_count) |
|
1225 |
p.done_ratio = progress.round |
|
1226 |
end |
|
1227 |
end |
|
1217 |
#Disabled |
|
1218 |
#unless Issue.use_status_for_done_ratio? && p.status && p.status.default_done_ratio |
|
1219 |
# leaves_count = p.leaves.count |
|
1220 |
# if leaves_count > 0 |
|
1221 |
# average = p.leaves.average(:estimated_hours).to_f |
|
1222 |
# if average == 0 |
|
1223 |
# average = 1 |
|
1224 |
# end |
|
1225 |
# done = p.leaves.sum("COALESCE(estimated_hours, #{average}) * (CASE WHEN is_closed = #{connection.quoted_true} THEN 100 ELSE COALESCE(done_ratio, 0) END)", :joins => :status).to_f |
|
1226 |
# progress = done / (average * leaves_count) |
|
1227 |
# p.done_ratio = progress.round |
|
1228 |
# end |
|
1229 |
#end |
|
1228 | 1230 | |
1229 | 1231 |
# estimate = sum of leaves estimates |
1230 |
p.estimated_hours = p.leaves.sum(:estimated_hours).to_f |
|
1231 |
p.estimated_hours = nil if p.estimated_hours == 0.0 |
|
1232 |
#Disabled |
|
1233 |
#p.estimated_hours = p.leaves.sum(:estimated_hours).to_f |
|
1234 |
#p.estimated_hours = nil if p.estimated_hours == 0.0 |
|
1232 | 1235 | |
1233 | 1236 |
# ancestors will be recursively updated |
1234 | 1237 |
p.save(:validate => false) |
app/views/issues/_attributes.html.erb | ||
---|---|---|
11 | 11 |
<% end %> |
12 | 12 | |
13 | 13 |
<% if @issue.safe_attribute? 'priority_id' %> |
14 |
<p><%= f.select :priority_id, (@priorities.collect {|p| [p.name, p.id]}), {:required => true}, :disabled => !@issue.leaf? %></p>
|
|
14 |
<p><%= f.select :priority_id, (@priorities.collect {|p| [p.name, p.id]}), {:required => true}, :disabled => false %></p>
|
|
15 | 15 |
<% end %> |
16 | 16 | |
17 | 17 |
<% if @issue.safe_attribute? 'assigned_to_id' %> |
... | ... | |
47 | 47 |
<% end %> |
48 | 48 | |
49 | 49 |
<% if @issue.safe_attribute? 'start_date' %> |
50 |
<p><%= f.text_field :start_date, :size => 10, :disabled => !@issue.leaf?, :required => @issue.required_attribute?('start_date') %><%= calendar_for('issue_start_date') if @issue.leaf? %></p>
|
|
50 |
<p><%= f.text_field :start_date, :size => 10, :disabled => false, :required => @issue.required_attribute?('start_date') %><%= calendar_for('issue_start_date') %></p>
|
|
51 | 51 |
<% end %> |
52 | 52 | |
53 | 53 |
<% if @issue.safe_attribute? 'due_date' %> |
54 |
<p><%= f.text_field :due_date, :size => 10, :disabled => !@issue.leaf?, :required => @issue.required_attribute?('due_date') %><%= calendar_for('issue_due_date') if @issue.leaf? %></p>
|
|
54 |
<p><%= f.text_field :due_date, :size => 10, :disabled => false, :required => @issue.required_attribute?('due_date') %><%= calendar_for('issue_due_date') %></p>
|
|
55 | 55 |
<% end %> |
56 | 56 | |
57 | 57 |
<% if @issue.safe_attribute? 'estimated_hours' %> |
58 |
<p><%= f.text_field :estimated_hours, :size => 3, :disabled => !@issue.leaf?, :required => @issue.required_attribute?('estimated_hours') %> <%= l(:field_hours) %></p>
|
|
58 |
<p><%= f.text_field :estimated_hours, :size => 3, :disabled => false, :required => @issue.required_attribute?('estimated_hours') %> <%= l(:field_hours) %></p>
|
|
59 | 59 |
<% end %> |
60 | 60 | |
61 |
<% if @issue.safe_attribute?('done_ratio') && @issue.leaf? && Issue.use_field_for_done_ratio? %>
|
|
61 |
<% if @issue.safe_attribute?('done_ratio') && Issue.use_field_for_done_ratio? %> |
|
62 | 62 |
<p><%= f.select :done_ratio, ((0..10).to_a.collect {|r| ["#{r*10} %", r*10] }), :required => @issue.required_attribute?('done_ratio') %></p> |
63 | 63 |
<% end %> |
64 | 64 |
</div> |