123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426 |
- <% @gantt.view = self %>
- <div class="contextual">
- </div>
-
- <h2><%= @query.new_record? ? l(:label_gantt) : @query.name %></h2>
-
- <%= form_tag({:controller => 'gantts', :action => 'show',
- :project_id => @project, :month => params[:month],
- :year => params[:year], :months => params[:months]},
- :method => :get, :id => 'query_form') do %>
- <%= hidden_field_tag 'set_filter', '1' %>
- <%= hidden_field_tag 'gantt', '1' %>
-
- <div id="query_form_with_buttons" class="hide-when-print">
- <div id="query_form_content">
- <fieldset id="filters" class="collapsible <%= @query.new_record? ? "" : "collapsed" %>">
- <legend onclick="toggleFieldset(this);" class="icon icon-<%= @query.new_record? ? "expanded" : "collapsed" %>"><%= l(:label_filter_plural) %></legend>
- <div style="<%= @query.new_record? ? "" : "display: none;" %>">
- <%= render :partial => 'queries/filters', :locals => {:query => @query} %>
- </div>
- </fieldset>
-
- <fieldset id="options" class="collapsible collapsed">
- <legend onclick="toggleFieldset(this);" class="icon icon-collapsed"><%= l(:label_options) %></legend>
- <div style="display: none;">
- <div>
- <fieldset>
- <legend>
- <%= l(:field_column_names) %>
- </legend>
- <div id="list-definition">
- <div>
- <label for="draw_selected_columns">
- <%= check_box 'query', 'draw_selected_columns', :id => 'draw_selected_columns', 'data-enables' => '#list-definition .query-columns select, #list-definition .query-columns input' %>
- <%= l(:label_display) %>
- </label>
- </div>
- <div>
- <%= render_query_columns_selection(@query) %>
- </div>
- </div>
- </fieldset>
- <fieldset>
- <legend><%= l(:label_related_issues) %></legend>
- <label for="draw_relations">
- <%= check_box 'query', 'draw_relations', :id => 'draw_relations' %>
- <% rels = [IssueRelation::TYPE_BLOCKS, IssueRelation::TYPE_PRECEDES] %>
- <% rels.each do |rel| %>
- <% color = Redmine::Helpers::Gantt::DRAW_TYPES[rel][:color] %>
- <%= content_tag(:span, ' '.html_safe,
- :style => "background-color: #{color}") %>
- <%= l(IssueRelation::TYPES[rel][:name]) %>
- <% end %>
- </label>
- </fieldset>
- <fieldset>
- <legend><%= l(:label_gantt_progress_line) %></legend>
- <label for="draw_progress_line">
- <%= check_box 'query', 'draw_progress_line', :id => 'draw_progress_line' %>
- <%= l(:label_display) %>
- </label>
- </fieldset>
- </div>
- </div>
- </fieldset>
- </div>
-
- <p class="contextual">
- <span>
- <%= gantt_zoom_link(@gantt, :in) %>
- <%= gantt_zoom_link(@gantt, :out) %>
- </span>
- <span>
- <%= link_to_previous_month(@gantt.year_from, @gantt.month_from, :accesskey => accesskey(:previous)) %> | <%= link_to_next_month(@gantt.year_from, @gantt.month_from, :accesskey => accesskey(:next)) %>
- </span>
- </p>
-
- <p class="buttons">
- <%= number_field_tag 'months', @gantt.months, :min => 1, :max => Setting.gantt_months_limit.to_i, :autocomplete => false %>
- <%= l(:label_months_from) %>
- <%= select_month(@gantt.month_from, :prefix => "month", :discard_type => true) %>
- <%= select_year(@gantt.year_from, :prefix => "year", :discard_type => true) %>
- <%= hidden_field_tag 'zoom', @gantt.zoom %>
-
- <%= link_to_function l(:button_apply), '$("#query_form").submit()',
- :class => 'icon icon-checked' %>
- <%= link_to l(:button_clear), { :project_id => @project, :set_filter => 1 },
- :class => 'icon icon-reload' %>
- <% if @query.new_record? && User.current.allowed_to?(:save_queries, @project, :global => true) %>
- <%= link_to_function l(:button_save_object, object_name: l(:label_query).downcase),
- "$('#query_form').attr('action', '#{ @project ? new_project_query_path(@project) : new_query_path }').submit();",
- :class => 'icon icon-save' %>
- <% end %>
- <% if !@query.new_record? && @query.editable_by?(User.current) %>
- <%= link_to l(:button_edit_object, object_name: l(:label_query).downcase), edit_query_path(@query, :gantt => 1), :class => 'icon icon-edit' %>
- <%= delete_link query_path(@query, :gantt => 1), {}, l(:button_delete_object, object_name: l(:label_query).downcase) %>
- <% end %>
- </p>
- </div>
- <% end %>
-
- <%= error_messages_for 'query' %>
- <% if @query.valid? %>
- <%
- zoom = 1
- @gantt.zoom.times { zoom = zoom * 2 }
-
- subject_width = 330
- header_height = 18
-
- headers_height = header_height
- show_weeks = false
- show_days = false
- show_day_num = false
-
- if @gantt.zoom > 1
- show_weeks = true
- headers_height = 2 * header_height
- if @gantt.zoom > 2
- show_days = true
- headers_height = 3 * header_height
- if @gantt.zoom > 3
- show_day_num = true
- headers_height = 4 * header_height
- end
- end
- end
-
- # Width of the entire chart
- g_width = ((@gantt.date_to - @gantt.date_from + 1) * zoom).to_i
- @gantt.render(:top => headers_height + 8,
- :zoom => zoom,
- :g_width => g_width,
- :subject_width => subject_width)
- g_height = [(20 * (@gantt.number_of_rows + 6)) + 150, 206].max
- t_height = g_height + headers_height
- %>
-
- <% if @gantt.truncated %>
- <p class="warning"><%= l(:notice_gantt_chart_truncated, :max => @gantt.max_rows) %></p>
- <% end %>
-
- <table class='gantt-table'>
- <tr>
- <td style="width:<%= @query.draw_selected_columns ? subject_width + 1 : subject_width + 2 %>px;" class="gantt_subjects_column">
- <%
- style = ""
- style += "position:relative;"
- style += "height: #{t_height + 24}px;"
- style += "width: #{subject_width + 1}px;"
- %>
- <%= content_tag(:div, :style => style, :class => "gantt_subjects_container #{'draw_selected_columns' if @query.draw_selected_columns}") do %>
- <%
- style = ""
- style += "width: #{subject_width + 1}px;"
- style += "height: #{headers_height}px;"
- style += 'background: #eee;'
- %>
- <%= content_tag(:div, "", :style => style, :class => "gantt_hdr") %>
- <%
- style = ""
- style += "z-index: 1;"
- style += "width: #{subject_width + 1}px;"
- style += "height: #{t_height}px;"
- style += 'overflow: hidden;'
- %>
- <%= content_tag(:div, "", :style => style, :class => "gantt_hdr") %>
- <%= content_tag(:div, :class => "gantt_subjects") do %>
- <%= form_tag({}, :data => {:cm_url => issues_context_menu_path}) do -%>
- <%= hidden_field_tag 'back_url', url_for(:params => request.query_parameters), :id => nil %>
- <%= @gantt.subjects.html_safe %>
- <% end %>
- <% end %>
- <% end %>
- </td>
- <%
- @query.columns.each do |column|
- next if Redmine::Helpers::Gantt::UNAVAILABLE_COLUMNS.include?(column.name)
- column_name = column.name.to_s.tr('.', '_')
- %>
- <td class="gantt_<%= column_name %>_column gantt_selected_column <%= 'last_gantt_selected_column' if @query.columns.last == column %>" id="<%= column_name %>">
- <%
- style = "position: relative;"
- style += "height: #{t_height + 24}px;"
- %>
- <%= content_tag(:div, :style => style, :class => "gantt_#{column_name}_container gantt_selected_column_container") do %>
- <%
- style = "height: #{t_height}px;"
- style += 'overflow: hidden;'
- %>
- <%= content_tag(:div, '', :style => style, :class => "gantt_hdr") %>
- <%
- style = "height: #{headers_height}px;"
- style += 'background: #eee;'
- %>
- <%= content_tag(:div, content_tag(:p, column.caption, :class => 'gantt_hdr_selected_column_name'), :style => style, :class => "gantt_hdr") %>
- <%= content_tag(:div, :class => "gantt_#{column_name} gantt_selected_column_content") do %>
- <%= @gantt.selected_column_content({:column => column, :top => headers_height + 8, :zoom => zoom, :g_width => g_width}).html_safe %>
- <% end %>
- <% end %>
- </td>
- <% end %>
- <td>
- <div style="position:relative;height:<%= t_height + 24 %>px;overflow:auto;" id="gantt_area">
- <%
- style = ""
- style += "width: #{g_width - 1}px;"
- style += "height: #{headers_height}px;"
- style += 'background: #eee;'
- %>
- <%= content_tag(:div, ' '.html_safe, :style => style, :class => "gantt_hdr") %>
-
- <% ###### Months headers ###### %>
- <%
- month_f = @gantt.date_from
- left = 0
- height = (show_weeks ? header_height : header_height + g_height)
- %>
- <% @gantt.months.times do %>
- <%
- width = (((month_f >> 1) - month_f) * zoom - 1).to_i
- style = ""
- style += "left: #{left}px;"
- style += "width: #{width}px;"
- style += "height: #{height}px;"
- %>
- <%= content_tag(:div, :style => style, :class => "gantt_hdr") do %>
- <%= link_to "#{month_f.year}-#{month_f.month}",
- @gantt.params.merge(:year => month_f.year, :month => month_f.month),
- :title => "#{month_name(month_f.month)} #{month_f.year}" %>
- <% end %>
- <%
- left = left + width + 1
- month_f = month_f >> 1
- %>
- <% end %>
-
- <% ###### Weeks headers ###### %>
- <% if show_weeks %>
- <%
- left = 0
- height = (show_days ? header_height - 1 : header_height - 1 + g_height)
- %>
- <% if @gantt.date_from.cwday == 1 %>
- <%
- # @date_from is monday
- week_f = @gantt.date_from
- %>
- <% else %>
- <%
- # find next monday after @date_from
- week_f = @gantt.date_from + (7 - @gantt.date_from.cwday + 1)
- width = (7 - @gantt.date_from.cwday + 1) * zoom - 1
- style = ""
- style += "left: #{left}px;"
- style += "top: 19px;"
- style += "width: #{width}px;"
- style += "height: #{height}px;"
- %>
- <%= content_tag(:div, ' '.html_safe,
- :style => style, :class => "gantt_hdr") %>
- <% left = left + width + 1 %>
- <% end %>
- <% while week_f <= @gantt.date_to %>
- <%
- width = ((week_f + 6 <= @gantt.date_to) ?
- 7 * zoom - 1 :
- (@gantt.date_to - week_f + 1) * zoom - 1).to_i
- style = ""
- style += "left: #{left}px;"
- style += "top: 19px;"
- style += "width: #{width}px;"
- style += "height: #{height}px;"
- %>
- <%= content_tag(:div, :style => style, :class => "gantt_hdr") do %>
- <%= content_tag(:small) do %>
- <%= week_f.cweek if width >= 16 %>
- <% end %>
- <% end %>
- <%
- left = left + width + 1
- week_f = week_f + 7
- %>
- <% end %>
- <% end %>
-
- <% ###### Day numbers headers ###### %>
- <% if show_day_num %>
- <%
- left = 0
- height = g_height + header_height*2 - 1
- wday = @gantt.date_from.cwday
- day_num = @gantt.date_from
- %>
- <% (@gantt.date_to - @gantt.date_from + 1).to_i.times do %>
- <%
- width = zoom - 1
- style = ""
- style += "left:#{left}px;"
- style += "top:37px;"
- style += "width:#{width}px;"
- style += "height:#{height}px;"
- style += "font-size:0.7em;"
- clss = "gantt_hdr"
- clss << " nwday" if @gantt.non_working_week_days.include?(wday)
- %>
- <%= content_tag(:div, :style => style, :class => clss) do %>
- <%= day_num.day %>
- <% end %>
- <%
- left = left + width+1
- day_num = day_num + 1
- wday = wday + 1
- wday = 1 if wday > 7
- %>
- <% end %>
- <% end %>
-
- <% ###### Days headers ####### %>
- <% if show_days %>
- <%
- left = 0
- height = g_height + header_height - 1
- top = (show_day_num ? 55 : 37)
- %>
- <% (@gantt.date_from..@gantt.date_to).each do |g_date| %>
- <%
- width = zoom - 1
- style = ""
- style += "left: #{left}px;"
- style += "top: #{top}px;"
- style += "width: #{width}px;"
- style += "height: #{height}px;"
- style += "font-size:0.7em;"
- clss = "gantt_hdr"
- clss << " nwday" if @gantt.non_working_week_days.include?(g_date.cwday)
- %>
- <%= content_tag(:div, :style => style, :class => clss) do %>
- <%= day_letter(g_date.cwday) %>
- <% end %>
- <%
- left = left + width + 1
- %>
- <% end %>
- <% end %>
-
- <%= form_tag({}, :data => {:cm_url => issues_context_menu_path}) do -%>
- <%= hidden_field_tag 'back_url', url_for(:params => request.query_parameters), :id => nil %>
- <%= @gantt.lines.html_safe %>
- <% end %>
-
- <% ###### Today red line (excluded from cache) ###### %>
- <% if User.current.today >= @gantt.date_from and User.current.today <= @gantt.date_to %>
- <%
- today_left = (((User.current.today - @gantt.date_from + 1) * zoom).floor() - 1).to_i
- style = ""
- style += "position: absolute;"
- style += "height: #{g_height}px;"
- style += "top: #{headers_height + 1}px;"
- style += "left: #{today_left}px;"
- style += "width:10px;"
- style += "border-left: 1px dashed red;"
- %>
- <%= content_tag(:div, ' '.html_safe, :style => style, :id => 'today_line') %>
- <% end %>
- <%
- style = ""
- style += "position: absolute;"
- style += "height: #{g_height}px;"
- style += "top: #{headers_height + 1}px;"
- style += "left: 0px;"
- style += "width: #{g_width - 1}px;"
- %>
- <%= content_tag(:div, '', :style => style, :id => "gantt_draw_area") %>
- </div>
- </td>
- </tr>
- </table>
-
- <span class="pagination">
- <ul class="pages">
- <li class="previous page">
- <%= link_to("\xc2\xab " + l(:label_previous),
- {:params => request.query_parameters.merge(@gantt.params_previous)},
- :accesskey => accesskey(:previous)) %>
- </li><li class="next page">
- <%= link_to(l(:label_next) + " \xc2\xbb",
- {:params => request.query_parameters.merge(@gantt.params_next)},
- :accesskey => accesskey(:next)) %>
- </li>
- </ul>
- </span>
-
- <% other_formats_links do |f| %>
- <%= f.link_to_with_query_parameters 'PDF', @gantt.params %>
- <%= f.link_to_with_query_parameters('PNG', @gantt.params) if @gantt.respond_to?('to_image') %>
- <% end %>
- <% end # query.valid? %>
-
- <% content_for :sidebar do %>
- <%= render :partial => 'issues/sidebar' %>
- <% end %>
-
- <% html_title(l(:label_gantt)) -%>
-
- <% content_for :header_tags do %>
- <%= javascript_include_tag 'raphael' %>
- <%= javascript_include_tag 'gantt' %>
- <% end %>
-
- <%= javascript_tag do %>
- var issue_relation_type = <%= raw Redmine::Helpers::Gantt::DRAW_TYPES.to_json %>;
- $(function() {
- disable_unavailable_columns('<%= Redmine::Helpers::Gantt::UNAVAILABLE_COLUMNS.map(&:to_s).join(',') %>'.split(','));
- drawGanttHandler();
- resizableSubjectColumn();
- drawSelectedColumns();
- $("#draw_relations, #draw_progress_line, #draw_selected_columns").change(drawGanttHandler);
- $('div.gantt_subjects .expander').on('click', ganttEntryClick);
- });
- $(window).resize(function() {
- drawGanttHandler();
- resizableSubjectColumn();
- });
- <% end %>
- <%= context_menu %>
|