On calendar and gantt, versions are now clickable and link to the corresponding entry in the roadmap. Since calendar and gantt are now cached, don't forget to empty your cache before restarting the application. git-svn-id: http://redmine.rubyforge.org/svn/trunk@516 e93f8b46-1217-0410-a6f0-8f06a7374b81
245 lines
8.7 KiB
Plaintext
245 lines
8.7 KiB
Plaintext
<% zoom = 1
|
|
@zoom.times { zoom = zoom * 2 }
|
|
|
|
subject_width = 330
|
|
header_heigth = 18
|
|
|
|
headers_height = header_heigth
|
|
show_weeks = false
|
|
show_days = false
|
|
|
|
if @zoom >1
|
|
show_weeks = true
|
|
headers_height = 2*header_heigth
|
|
if @zoom > 2
|
|
show_days = true
|
|
headers_height = 3*header_heigth
|
|
end
|
|
end
|
|
|
|
g_width = (@date_to - @date_from + 1)*zoom
|
|
g_height = [(20 * @events.length + 6)+150, 206].max
|
|
t_height = g_height + headers_height
|
|
%>
|
|
|
|
<% cache(:year => @year_from, :month => @month_from, :months => @months, :zoom => @zoom, :tracker_ids => @selected_tracker_ids, :subprojects => params[:with_subprojects], :lang => current_language) do %>
|
|
<div class="contextual">
|
|
<%= l(:label_export_to) %>
|
|
<%= link_to 'PDF', {:zoom => @zoom, :year => @year_from, :month => @month_from, :months => @months, :tracker_ids => @selected_tracker_ids, :with_subprojects => params[:with_subprojects], :output => 'pdf'}, :class => 'icon icon-pdf' %>
|
|
</div>
|
|
|
|
<h2><%= l(:label_gantt) %></h2>
|
|
|
|
<% form_tag do %>
|
|
<table width="100%">
|
|
<tr>
|
|
<td align="left">
|
|
<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" %>
|
|
</td>
|
|
<td>
|
|
<%= toggle_link l(:label_options), "trackerselect" %>
|
|
<div id="trackerselect" class="rightbox overlay" style="width:140px; display: none;">
|
|
<p><strong><%=l(:label_tracker_plural)%></strong></p>
|
|
<% @trackers.each do |tracker| %>
|
|
<%= check_box_tag "tracker_ids[]", tracker.id, (@selected_tracker_ids.include? tracker.id.to_s) %>
|
|
<%= tracker.name %><br />
|
|
<% end %>
|
|
<% if @project.children.any? %>
|
|
<p><strong><%=l(:label_subproject_plural)%></strong></p>
|
|
<%= check_box_tag "with_subprojects", 1, params[:with_subprojects] %> <%= l(:general_text_Yes) %>
|
|
<% end %>
|
|
<p><center><%= submit_tag l(:button_apply), :class => 'button-small' %></center></p>
|
|
</div>
|
|
</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, :tracker_ids => @selected_tracker_ids, :with_subprojects => params[:with_subprojects]}
|
|
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, :tracker_ids => @selected_tracker_ids, :with_subprojects => params[:with_subprojects]}
|
|
else
|
|
image_tag 'zoom_out_g.png'
|
|
end %>
|
|
</td>
|
|
</tr>
|
|
</table>
|
|
<% end %>
|
|
|
|
<table width="100%" style="border:0; border-collapse: collapse;">
|
|
<tr>
|
|
<td style="width:<%= subject_width %>px;">
|
|
|
|
<div style="position:relative;height:<%= t_height + 24 %>px;width:<%= subject_width + 1 %>px;">
|
|
<div style="right:-2px;width:<%= subject_width %>px;height:<%= headers_height %>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_height + 8
|
|
@events.each do |i| %>
|
|
<div style="position: absolute;line-height:1.2em;height:16px;top:<%= top %>px;left:4px;overflow:hidden;"><small>
|
|
<% if i.is_a? Issue %>
|
|
<%= link_to_issue i %><%= " (#{i.project.name})" unless @project && @project == i.project %>:
|
|
<%=h i.subject %>
|
|
<% else %>
|
|
<%= link_to_version i, :class => "icon icon-package" %>
|
|
<% end %>
|
|
</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_height %>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, :tracker_ids => @selected_tracker_ids, :with_subprojects => params[:with_subprojects] }, :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).first %>
|
|
</div>
|
|
<%
|
|
left = left + width+1
|
|
wday = wday + 1
|
|
wday = 1 if wday > 7
|
|
end
|
|
end %>
|
|
|
|
<%
|
|
#
|
|
# Tasks
|
|
#
|
|
top = headers_height + 10
|
|
@events.each do |i|
|
|
if i.is_a? Issue
|
|
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>
|
|
<% else
|
|
i_left = ((i.start_date - @date_from)*zoom).floor
|
|
%>
|
|
<div style="top:<%= top %>px;left:<%= i_left %>px;width:15px;" class="task milestone"> </div>
|
|
<div style="top:<%= top %>px;left:<%= i_left + 12 %>px;background:#fff;" class="task">
|
|
<strong><%= i.name %></strong>
|
|
</div>
|
|
<% end %>
|
|
<% top = top + 20
|
|
end %>
|
|
|
|
<% end # cache
|
|
%>
|
|
|
|
<%
|
|
#
|
|
# Today red line (excluded from cache)
|
|
#
|
|
if Date.today >= @date_from and Date.today <= @date_to %>
|
|
<div style="position: absolute;height:<%= g_height %>px;top:<%= headers_height + 1 %>px;left:<%= ((Date.today-@date_from+1)*zoom).floor()-1 %>px;width:10px;border-left: 1px dashed red;"> </div>
|
|
<% 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, :tracker_ids => @selected_tracker_ids, :with_subprojects => params[:with_subprojects] %></td>
|
|
<td align="right"><%= link_to (l(:label_next) + ' »'), :year => (@date_from >> @months).year, :month => (@date_from >> @months).month, :zoom => @zoom, :months => @months, :tracker_ids => @selected_tracker_ids, :with_subprojects => params[:with_subprojects] %></td>
|
|
</tr>
|
|
</table>
|