diff options
Diffstat (limited to 'app/views/projects/gantt.rhtml')
-rw-r--r-- | app/views/projects/gantt.rhtml | 428 |
1 files changed, 214 insertions, 214 deletions
diff --git a/app/views/projects/gantt.rhtml b/app/views/projects/gantt.rhtml index 18e025f22..a846507aa 100644 --- a/app/views/projects/gantt.rhtml +++ b/app/views/projects/gantt.rhtml @@ -1,215 +1,215 @@ -<div class="contextual">
-<%= l(:label_export_to) %>
-<%= link_to 'PDF', {:zoom => @zoom, :year => @year_from, :month => @month_from, :months => @months, :output => 'pdf'}, :class => 'icon icon-pdf' %>
-</div>
-
-<h2><%= l(:label_gantt) %></h2>
-
-<table width="100%">
-<tr>
-<td align="left">
-<% form_tag do %>
-<p>
-<input type="text" name="months" size="2" value="<%= @months %>" />
-<%= l(:label_months_from) %>
-<%= select_month(@month_from, :prefix => "month", :discard_type => true) %>
-<%= select_year(@year_from, :prefix => "year", :discard_type => true) %>
-<%= hidden_field_tag 'zoom', @zoom %>
-<%= submit_tag l(:button_submit), :class => "button-small" %>
-</p>
-<% end %>
-</td>
-<td align="right">
-<%= if @zoom < 4
- link_to image_tag('zoom_in.png'), {:zoom => (@zoom+1), :year => @year_from, :month => @month_from, :months => @months}
- else
- image_tag 'zoom_in_g.png'
- end %>
-<%= if @zoom > 1
- link_to image_tag('zoom_out.png'), :zoom => (@zoom-1), :year => @year_from, :month => @month_from, :months => @months
- else
- image_tag 'zoom_out_g.png'
- end %>
-</td>
-</tr>
-</table>
-<br />
-
-<% zoom = 1
-@zoom.times { zoom = zoom * 2 }
-
-subject_width = 260
-header_heigth = 18
-
-headers_heigth = header_heigth
-show_weeks = false
-show_days = false
-
-if @zoom >1
- show_weeks = true
- headers_heigth = 2*header_heigth
- if @zoom > 2
- show_days = true
- headers_heigth = 3*header_heigth
- end
-end
-
-g_width = (@date_to - @date_from + 1)*zoom
-g_height = [(20 * @issues.length + 6)+150, 206].max
-t_height = g_height + headers_heigth
-%>
-
-<table width="100%" style="border:0; border-collapse: collapse;">
-<tr>
-<td style="width:260px;">
-
-<div style="position:relative;height:<%= t_height + 24 %>px;width:<%= subject_width + 1 %>px;">
-<div style="right:-2px;width:<%= subject_width %>px;height:<%= headers_heigth %>px;background: #eee;" class="gantt_hdr"></div>
-<div style="right:-2px;width:<%= subject_width %>px;height:<%= t_height %>px;border-left: 1px solid #c0c0c0;overflow:hidden;" class="gantt_hdr"></div>
-<%
-#
-# Tasks subjects
-#
-top = headers_heigth + 8
-@issues.each do |i| %>
- <div style="position: absolute;line-height:1.2em;height:16px;top:<%= top %>px;left:4px;overflow:hidden;">
- <small><%= link_to "#{i.tracker.name} ##{i.id}", { :controller => 'issues', :action => 'show', :id => i }, :title => "#{i.subject}" %>:
- <%=h i.subject.sub(/^(.{30}[^\s]*\s).*$/, '\1 (...)') %></small>
- </div>
-<% top = top + 20
-end %>
-</div>
-</td>
-<td>
-
-<div style="position:relative;height:<%= t_height + 24 %>px;overflow:auto;">
-<div style="width:<%= g_width-1 %>px;height:<%= headers_heigth %>px;background: #eee;" class="gantt_hdr"> </div>
-<%
-#
-# Months headers
-#
-month_f = @date_from
-left = 0
-height = (show_weeks ? header_heigth : header_heigth + g_height)
-@months.times do
- width = ((month_f >> 1) - month_f) * zoom - 1
- %>
- <div style="left:<%= left %>px;width:<%= width %>px;height:<%= height %>px;" class="gantt_hdr">
- <%= link_to "#{month_f.year}-#{month_f.month}", { :year => month_f.year, :month => month_f.month, :zoom => @zoom, :months => @months }, :title => "#{month_name(month_f.month)} #{month_f.year}"%>
- </div>
- <%
- left = left + width + 1
- month_f = month_f >> 1
-end %>
-
-<%
-#
-# Weeks headers
-#
-if show_weeks
- left = 0
- height = (show_days ? header_heigth-1 : header_heigth-1 + g_height)
- if @date_from.cwday == 1
- # @date_from is monday
- week_f = @date_from
- else
- # find next monday after @date_from
- week_f = @date_from + (7 - @date_from.cwday + 1)
- width = (7 - @date_from.cwday + 1) * zoom-1
- %>
- <div style="left:<%= left %>px;top:19px;width:<%= width %>px;height:<%= height %>px;" class="gantt_hdr"> </div>
- <%
- left = left + width+1
- end %>
- <%
- while week_f <= @date_to
- width = (week_f + 6 <= @date_to) ? 7 * zoom -1 : (@date_to - week_f + 1) * zoom-1
- %>
- <div style="left:<%= left %>px;top:19px;width:<%= width %>px;height:<%= height %>px;" class="gantt_hdr">
- <small><%= week_f.cweek if width >= 16 %></small>
- </div>
- <%
- left = left + width+1
- week_f = week_f+7
- end
-end %>
-
-<%
-#
-# Days headers
-#
-if show_days
- left = 0
- height = g_height + header_heigth - 1
- wday = @date_from.cwday
- (@date_to - @date_from + 1).to_i.times do
- width = zoom - 1
- %>
- <div style="left:<%= left %>px;top:37px;width:<%= width %>px;height:<%= height %>px;font-size:0.7em;<%= "background:#f1f1f1;" if wday > 5 %>" class="gantt_hdr">
- <%= day_name(wday)[0,1] %>
- </div>
- <%
- left = left + width+1
- wday = wday + 1
- wday = 1 if wday > 7
- end
-end %>
-
-<%
-#
-# Today red line
-#
-if Date.today >= @date_from and Date.today <= @date_to %>
- <div style="position: absolute;height:<%= g_height %>px;top:<%= headers_heigth + 1 %>px;left:<%= ((Date.today-@date_from+1)*zoom).floor()-1 %>px;width:10px;border-left: 1px dashed red;"> </div>
-<% end %>
-
-<%
-#
-# Tasks
-#
-top = headers_heigth + 10
-@issues.each do |i| %>
- <%
- i_start_date = (i.start_date >= @date_from ? i.start_date : @date_from )
- i_end_date = (i.due_date <= @date_to ? i.due_date : @date_to )
-
- i_done_date = i.start_date + ((i.due_date - i.start_date+1)*i.done_ratio/100).floor
- i_done_date = (i_done_date <= @date_from ? @date_from : i_done_date )
- i_done_date = (i_done_date >= @date_to ? @date_to : i_done_date )
-
- i_late_date = [i_end_date, Date.today].min if i_start_date < Date.today
-
- i_left = ((i_start_date - @date_from)*zoom).floor
- i_width = ((i_end_date - i_start_date + 1)*zoom).floor - 2 # total width of the issue (- 2 for left and right borders)
- d_width = ((i_done_date - i_start_date)*zoom).floor - 2 # done width
- l_width = i_late_date ? ((i_late_date - i_start_date+1)*zoom).floor - 2 : 0 # delay width
- %>
- <div style="top:<%= top %>px;left:<%= i_left %>px;width:<%= i_width %>px;" class="task task_todo"> </div>
- <% if l_width > 0 %>
- <div style="top:<%= top %>px;left:<%= i_left %>px;width:<%= l_width %>px;" class="task task_late"> </div>
- <% end %>
- <% if d_width > 0 %>
- <div style="top:<%= top %>px;left:<%= i_left %>px;width:<%= d_width %>px;" class="task task_done"> </div>
- <% end %>
- <div style="top:<%= top %>px;left:<%= i_left + i_width + 5 %>px;background:#fff;" class="task">
- <%= i.status.name %>
- <%= (i.done_ratio).to_i %>%
- </div>
- <% # === tooltip === %>
- <div class="tooltip" style="position: absolute;top:<%= top %>px;left:<%= i_left %>px;width:<%= i_width %>px;height:12px;">
- <span class="tip">
- <%= render :partial => "issues/tooltip", :locals => { :issue => i }%>
- </span></div>
- <% top = top + 20
-end %>
-</div>
-</td>
-</tr>
-</table>
-
-<table width="100%">
-<tr>
-<td align="left"><%= link_to ('« ' + l(:label_previous)), :year => (@date_from << @months).year, :month => (@date_from << @months).month, :zoom => @zoom, :months => @months %></td>
-<td align="right"><%= link_to (l(:label_next) + ' »'), :year => (@date_from >> @months).year, :month => (@date_from >> @months).month, :zoom => @zoom, :months => @months %></td>
-</tr>
+<div class="contextual"> +<%= l(:label_export_to) %> +<%= link_to 'PDF', {:zoom => @zoom, :year => @year_from, :month => @month_from, :months => @months, :output => 'pdf'}, :class => 'icon icon-pdf' %> +</div> + +<h2><%= l(:label_gantt) %></h2> + +<table width="100%"> +<tr> +<td align="left"> +<% form_tag do %> +<p> +<input type="text" name="months" size="2" value="<%= @months %>" /> +<%= l(:label_months_from) %> +<%= select_month(@month_from, :prefix => "month", :discard_type => true) %> +<%= select_year(@year_from, :prefix => "year", :discard_type => true) %> +<%= hidden_field_tag 'zoom', @zoom %> +<%= submit_tag l(:button_submit), :class => "button-small" %> +</p> +<% end %> +</td> +<td align="right"> +<%= if @zoom < 4 + link_to image_tag('zoom_in.png'), {:zoom => (@zoom+1), :year => @year_from, :month => @month_from, :months => @months} + else + image_tag 'zoom_in_g.png' + end %> +<%= if @zoom > 1 + link_to image_tag('zoom_out.png'), :zoom => (@zoom-1), :year => @year_from, :month => @month_from, :months => @months + else + image_tag 'zoom_out_g.png' + end %> +</td> +</tr> +</table> +<br /> + +<% zoom = 1 +@zoom.times { zoom = zoom * 2 } + +subject_width = 260 +header_heigth = 18 + +headers_heigth = header_heigth +show_weeks = false +show_days = false + +if @zoom >1 + show_weeks = true + headers_heigth = 2*header_heigth + if @zoom > 2 + show_days = true + headers_heigth = 3*header_heigth + end +end + +g_width = (@date_to - @date_from + 1)*zoom +g_height = [(20 * @issues.length + 6)+150, 206].max +t_height = g_height + headers_heigth +%> + +<table width="100%" style="border:0; border-collapse: collapse;"> +<tr> +<td style="width:260px;"> + +<div style="position:relative;height:<%= t_height + 24 %>px;width:<%= subject_width + 1 %>px;"> +<div style="right:-2px;width:<%= subject_width %>px;height:<%= headers_heigth %>px;background: #eee;" class="gantt_hdr"></div> +<div style="right:-2px;width:<%= subject_width %>px;height:<%= t_height %>px;border-left: 1px solid #c0c0c0;overflow:hidden;" class="gantt_hdr"></div> +<% +# +# Tasks subjects +# +top = headers_heigth + 8 +@issues.each do |i| %> + <div style="position: absolute;line-height:1.2em;height:16px;top:<%= top %>px;left:4px;overflow:hidden;"> + <small><%= link_to "#{i.tracker.name} ##{i.id}", { :controller => 'issues', :action => 'show', :id => i }, :title => "#{i.subject}" %>: + <%=h i.subject.sub(/^(.{30}[^\s]*\s).*$/, '\1 (...)') %></small> + </div> +<% top = top + 20 +end %> +</div> +</td> +<td> + +<div style="position:relative;height:<%= t_height + 24 %>px;overflow:auto;"> +<div style="width:<%= g_width-1 %>px;height:<%= headers_heigth %>px;background: #eee;" class="gantt_hdr"> </div> +<% +# +# Months headers +# +month_f = @date_from +left = 0 +height = (show_weeks ? header_heigth : header_heigth + g_height) +@months.times do + width = ((month_f >> 1) - month_f) * zoom - 1 + %> + <div style="left:<%= left %>px;width:<%= width %>px;height:<%= height %>px;" class="gantt_hdr"> + <%= link_to "#{month_f.year}-#{month_f.month}", { :year => month_f.year, :month => month_f.month, :zoom => @zoom, :months => @months }, :title => "#{month_name(month_f.month)} #{month_f.year}"%> + </div> + <% + left = left + width + 1 + month_f = month_f >> 1 +end %> + +<% +# +# Weeks headers +# +if show_weeks + left = 0 + height = (show_days ? header_heigth-1 : header_heigth-1 + g_height) + if @date_from.cwday == 1 + # @date_from is monday + week_f = @date_from + else + # find next monday after @date_from + week_f = @date_from + (7 - @date_from.cwday + 1) + width = (7 - @date_from.cwday + 1) * zoom-1 + %> + <div style="left:<%= left %>px;top:19px;width:<%= width %>px;height:<%= height %>px;" class="gantt_hdr"> </div> + <% + left = left + width+1 + end %> + <% + while week_f <= @date_to + width = (week_f + 6 <= @date_to) ? 7 * zoom -1 : (@date_to - week_f + 1) * zoom-1 + %> + <div style="left:<%= left %>px;top:19px;width:<%= width %>px;height:<%= height %>px;" class="gantt_hdr"> + <small><%= week_f.cweek if width >= 16 %></small> + </div> + <% + left = left + width+1 + week_f = week_f+7 + end +end %> + +<% +# +# Days headers +# +if show_days + left = 0 + height = g_height + header_heigth - 1 + wday = @date_from.cwday + (@date_to - @date_from + 1).to_i.times do + width = zoom - 1 + %> + <div style="left:<%= left %>px;top:37px;width:<%= width %>px;height:<%= height %>px;font-size:0.7em;<%= "background:#f1f1f1;" if wday > 5 %>" class="gantt_hdr"> + <%= day_name(wday)[0,1] %> + </div> + <% + left = left + width+1 + wday = wday + 1 + wday = 1 if wday > 7 + end +end %> + +<% +# +# Today red line +# +if Date.today >= @date_from and Date.today <= @date_to %> + <div style="position: absolute;height:<%= g_height %>px;top:<%= headers_heigth + 1 %>px;left:<%= ((Date.today-@date_from+1)*zoom).floor()-1 %>px;width:10px;border-left: 1px dashed red;"> </div> +<% end %> + +<% +# +# Tasks +# +top = headers_heigth + 10 +@issues.each do |i| %> + <% + i_start_date = (i.start_date >= @date_from ? i.start_date : @date_from ) + i_end_date = (i.due_date <= @date_to ? i.due_date : @date_to ) + + i_done_date = i.start_date + ((i.due_date - i.start_date+1)*i.done_ratio/100).floor + i_done_date = (i_done_date <= @date_from ? @date_from : i_done_date ) + i_done_date = (i_done_date >= @date_to ? @date_to : i_done_date ) + + i_late_date = [i_end_date, Date.today].min if i_start_date < Date.today + + i_left = ((i_start_date - @date_from)*zoom).floor + i_width = ((i_end_date - i_start_date + 1)*zoom).floor - 2 # total width of the issue (- 2 for left and right borders) + d_width = ((i_done_date - i_start_date)*zoom).floor - 2 # done width + l_width = i_late_date ? ((i_late_date - i_start_date+1)*zoom).floor - 2 : 0 # delay width + %> + <div style="top:<%= top %>px;left:<%= i_left %>px;width:<%= i_width %>px;" class="task task_todo"> </div> + <% if l_width > 0 %> + <div style="top:<%= top %>px;left:<%= i_left %>px;width:<%= l_width %>px;" class="task task_late"> </div> + <% end %> + <% if d_width > 0 %> + <div style="top:<%= top %>px;left:<%= i_left %>px;width:<%= d_width %>px;" class="task task_done"> </div> + <% end %> + <div style="top:<%= top %>px;left:<%= i_left + i_width + 5 %>px;background:#fff;" class="task"> + <%= i.status.name %> + <%= (i.done_ratio).to_i %>% + </div> + <% # === tooltip === %> + <div class="tooltip" style="position: absolute;top:<%= top %>px;left:<%= i_left %>px;width:<%= i_width %>px;height:12px;"> + <span class="tip"> + <%= render :partial => "issues/tooltip", :locals => { :issue => i }%> + </span></div> + <% top = top + 20 +end %> +</div> +</td> +</tr> +</table> + +<table width="100%"> +<tr> +<td align="left"><%= link_to ('« ' + l(:label_previous)), :year => (@date_from << @months).year, :month => (@date_from << @months).month, :zoom => @zoom, :months => @months %></td> +<td align="right"><%= link_to (l(:label_next) + ' »'), :year => (@date_from >> @months).year, :month => (@date_from >> @months).month, :zoom => @zoom, :months => @months %></td> +</tr> </table>
\ No newline at end of file |