Feature #9994 » timelog_report_links_patch.1.5.diff
.gitignore | ||
---|---|---|
32 | 32 |
/Gemfile.lock |
33 | 33 |
/Gemfile.local |
34 | 34 | |
35 |
/nbproject/private/ |
app/helpers/timelog_helper.rb | ||
---|---|---|
129 | 129 |
export |
130 | 130 |
end |
131 | 131 | |
132 |
def format_criteria_value(criteria_options, value) |
|
132 |
def format_criteria_value(criteria_options, value, links = false)
|
|
133 | 133 |
if value.blank? |
134 | 134 |
"[#{l(:label_none)}]" |
135 | 135 |
elsif k = criteria_options[:klass] |
136 | 136 |
obj = k.find_by_id(value.to_i) |
137 |
if obj.is_a?(Issue)
|
|
138 |
obj.visible? ? "#{obj.tracker} ##{obj.id}: #{obj.subject}" : "##{obj.id}"
|
|
137 |
if links && (obj.respond_to?('visible?') && obj.visible? || obj.is_a?(User))
|
|
138 |
link_to(h(obj.to_s), obj)
|
|
139 | 139 |
else |
140 | 140 |
obj |
141 | 141 |
end |
... | ... | |
143 | 143 |
format_value(value, criteria_options[:format]) |
144 | 144 |
end |
145 | 145 |
end |
146 |
|
|
147 |
def criteria_date_range(period, value) |
|
148 |
from, to = nil, nil |
|
149 |
case period |
|
150 |
when 'day' |
|
151 |
from = to = value |
|
152 |
when 'week' |
|
153 |
from = Date.commercial(value.split('-')[0].to_f, value.split('-')[1].to_f, 1); to = from + 6 |
|
154 |
when 'month' |
|
155 |
from = Date.civil(value.split('-')[0].to_f, value.split('-')[1].to_f, 1); to = (from >> 1) - 1 |
|
156 |
when 'year' |
|
157 |
from = Date.civil(value.split('-')[0].to_f, 1, 1); to = Date.civil(value.split('-')[0].to_f, 12, 31) |
|
158 |
end |
|
159 |
from = params[:from].to_s.to_date if !params[:from].blank? && params[:from].to_s.to_date > from.to_date |
|
160 |
to = params[:to].to_s.to_date if !params[:to].blank? && params[:to].to_s.to_date < to.to_date |
|
161 |
return {:from => from, :to => to} |
|
162 |
end |
|
146 | 163 | |
147 | 164 |
def report_to_csv(report) |
148 | 165 |
decimal_separator = l(:general_csv_decimal_separator) |
app/views/timelog/_report_criteria.html.erb | ||
---|---|---|
1 | 1 |
<% @report.hours.collect {|h| h[criterias[level]].to_s}.uniq.each do |value| %> |
2 |
<% hours_for_value = select_hours(hours, criterias[level], value) -%> |
|
2 |
<% hours_for_value = grand_total ? hours: select_hours(hours, criterias[level], value) -%>
|
|
3 | 3 |
<% next if hours_for_value.empty? -%> |
4 |
<tr class="<%= cycle('odd', 'even') %> <%= criterias.length > level+1 ? 'subtotal' : 'last-level' %>">
|
|
4 |
<tr class="<%= cycle('odd', 'even') %> <%= grand_total ? 'total' : criterias.length > level+1 ? 'subtotal' : 'last-level' %> <%= 'current-users-row' if criterias[level] == 'member' && User.current.try(:id) == value.to_i %>">
|
|
5 | 5 |
<%= ("<td></td>" * level).html_safe %> |
6 |
<td><%= h(format_criteria_value(@report.available_criteria[criterias[level]], value)) %></td>
|
|
6 |
<td><%= grand_total ? l(:label_total) : h(format_criteria_value(@report.available_criteria[criterias[level]], value, true)) %></td>
|
|
7 | 7 |
<%= ("<td></td>" * (criterias.length - level - 1)).html_safe -%> |
8 |
<% total = 0 -%> |
|
8 |
<% total = 0; criteria_values = {} if level == 0 -%> |
|
9 |
<% criteria_level_values = criteria_values.merge({criterias[level].to_sym => value}) -%> |
|
9 | 10 |
<% @report.periods.each do |period| -%> |
10 | 11 |
<% sum = sum_hours(select_hours(hours_for_value, @report.columns, period.to_s)); total += sum -%> |
11 |
<td class="hours"><%= html_hours("%.2f" % sum) if sum > 0 %></td>
|
|
12 |
<td class="hours"><%= link_to html_hours("%.2f" % sum), {:controller => 'timelog', :action => 'index'}.merge(criteria_level_values).merge(criteria_date_range(@report.columns.to_s, period)) if sum > 0 %></td>
|
|
12 | 13 |
<% end -%> |
13 |
<td class="hours"><%= html_hours("%.2f" % total) if total > 0 %></td>
|
|
14 |
<td class="hours"><%= (link_to html_hours("%.2f" % total), {:controller => 'timelog', :action => 'index', :period => params[:period], :from => @from, :to => @to}.merge(criteria_level_values)) if total > 0 %></td>
|
|
14 | 15 |
</tr> |
16 |
<% break if grand_total %> |
|
15 | 17 |
<% if criterias.length > level+1 -%> |
16 |
<%= render(:partial => 'report_criteria', :locals => {:criterias => criterias, :hours => hours_for_value, :level => (level + 1)}) %>
|
|
18 |
<%= render(:partial => 'report_criteria', :locals => {:criterias => criterias, :criteria_values => criteria_level_values.merge({criterias[level].to_sym => value}), :hours => hours_for_value, :level => (level + 1), :grand_total => false}) %>
|
|
17 | 19 |
<% end -%> |
18 | 20 | |
19 | 21 |
<% end %> |
app/views/timelog/report.html.erb | ||
---|---|---|
49 | 49 |
</tr> |
50 | 50 |
</thead> |
51 | 51 |
<tbody> |
52 |
<%= render :partial => 'report_criteria', :locals => {:criterias => @report.criteria, :hours => @report.hours, :level => 0} %> |
|
53 |
<tr class="total"> |
|
54 |
<td><%= l(:label_total) %></td> |
|
55 |
<%= ('<td></td>' * (@report.criteria.size - 1)).html_safe %> |
|
56 |
<% total = 0 -%> |
|
57 |
<% @report.periods.each do |period| -%> |
|
58 |
<% sum = sum_hours(select_hours(@report.hours, @report.columns, period.to_s)); total += sum -%> |
|
59 |
<td class="hours"><%= html_hours("%.2f" % sum) if sum > 0 %></td> |
|
60 |
<% end -%> |
|
61 |
<td class="hours"><%= html_hours("%.2f" % total) if total > 0 %></td> |
|
62 |
</tr> |
|
52 |
<%= render :partial => 'report_criteria', :locals => {:criterias => @report.criteria, :hours => @report.hours, :level => 0, :grand_total => false} %> |
|
53 |
<%= render :partial => 'report_criteria', :locals => {:criterias => @report.criteria, :hours => @report.hours, :level => 0, :grand_total => true} %> |
|
63 | 54 |
</tbody> |
64 | 55 |
</table> |
65 | 56 |
</div> |
lib/redmine/helpers/time_report.rb | ||
---|---|---|
98 | 98 |
end |
99 | 99 | |
100 | 100 |
def load_available_criteria |
101 |
@available_criteria = { 'project' => {:sql => "#{TimeEntry.table_name}.project_id", |
|
101 |
@available_criteria = { 'project_id' => {:sql => "#{TimeEntry.table_name}.project_id",
|
|
102 | 102 |
:klass => Project, |
103 | 103 |
:label => :label_project}, |
104 |
'status' => {:sql => "#{Issue.table_name}.status_id", |
|
104 |
'status_id' => {:sql => "#{Issue.table_name}.status_id",
|
|
105 | 105 |
:klass => IssueStatus, |
106 | 106 |
:label => :field_status}, |
107 |
'version' => {:sql => "#{Issue.table_name}.fixed_version_id", |
|
107 |
'version_id' => {:sql => "#{Issue.table_name}.fixed_version_id",
|
|
108 | 108 |
:klass => Version, |
109 | 109 |
:label => :label_version}, |
110 |
'category' => {:sql => "#{Issue.table_name}.category_id", |
|
110 |
'category_id' => {:sql => "#{Issue.table_name}.category_id",
|
|
111 | 111 |
:klass => IssueCategory, |
112 | 112 |
:label => :field_category}, |
113 |
'user' => {:sql => "#{TimeEntry.table_name}.user_id", |
|
113 |
'user_id' => {:sql => "#{TimeEntry.table_name}.user_id",
|
|
114 | 114 |
:klass => User, |
115 | 115 |
:label => :label_user}, |
116 |
'tracker' => {:sql => "#{Issue.table_name}.tracker_id", |
|
116 |
'tracker_id' => {:sql => "#{Issue.table_name}.tracker_id",
|
|
117 | 117 |
:klass => Tracker, |
118 | 118 |
:label => :label_tracker}, |
119 |
'activity' => {:sql => "#{TimeEntry.table_name}.activity_id", |
|
119 |
'activity_id' => {:sql => "#{TimeEntry.table_name}.activity_id",
|
|
120 | 120 |
:klass => TimeEntryActivity, |
121 | 121 |
:label => :label_activity}, |
122 |
'issue' => {:sql => "#{TimeEntry.table_name}.issue_id", |
|
122 |
'issue_id' => {:sql => "#{TimeEntry.table_name}.issue_id",
|
|
123 | 123 |
:klass => Issue, |
124 | 124 |
:label => :label_issue} |
125 | 125 |
} |
- « Previous
- 1
- …
- 5
- 6
- 7
- Next »