From abe04070866c6d1ffe0a01314d0e15f91f277df7 Mon Sep 17 00:00:00 2001 From: magdev Date: Sun, 3 Dec 2023 17:52:05 +0100 Subject: [PATCH] fixed filter buttons --- app/views/gantts/show.html.erb | 430 +++++++++++++++++++++++++++++++++ 1 file changed, 430 insertions(+) create mode 100644 app/views/gantts/show.html.erb diff --git a/app/views/gantts/show.html.erb b/app/views/gantts/show.html.erb new file mode 100644 index 0000000..7159d8f --- /dev/null +++ b/app/views/gantts/show.html.erb @@ -0,0 +1,430 @@ +<% @gantt.view = self %> +
+
+ +

<%= @query.new_record? ? l(:label_gantt) : @query.name %>

+ +<%= 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' %> + +
+
+
"> + "><%= l(:label_filter_plural) %> +
"> + <%= render :partial => 'queries/filters', :locals => {:query => @query} %> +
+
+ + +
+ +

+ + <%= gantt_zoom_link(@gantt, :in) %> + <%= gantt_zoom_link(@gantt, :out) %> + + + <%= 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)) %> + +

+ +

+ <%= 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)), + "$('#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)), 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)) %> +<% end %> +

+
+<% 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 %> +

<%= l(:notice_gantt_chart_truncated, :max => @gantt.max_rows) %>

+<% end %> + + + + +<% + @query.columns.each do |column| + next if Redmine::Helpers::Gantt::UNAVAILABLE_COLUMNS.include?(column.name) + column_name = column.name.to_s.tr('.', '_') +%> + +<% end %> + + +
+ <% + 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 %> + + <% + 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 %> + +
+<% + 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") %> +
+
+ + + + + +<% 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 %>