I am trying to store the gantt months_from, and year_from in the session

Added by Shivam Barthwal 3 months ago

I want to store the gantt months from, year in the session when we hit apply to view the gantt. Currently in Redmine 4.1, when we select the months and year in the gantt view and later visit the gantt page the year and month selection is not stored to the value we selected on previous visit to the gantt page, instead it hovers back to the default. So I was trying to store it on the session, but I do not have any success. Can someone help me. Here is my code

Gantt controller

class GanttsController < ApplicationController
  menu_item :gantt
  before_action :find_optional_project

  rescue_from Query::StatementInvalid, :with => :query_statement_invalid

  helper :gantt
  helper :issues
  helper :projects
  helper :queries
  include QueriesHelper
  include Redmine::Export::PDF

  def show
    @gantt = Redmine::Helpers::Gantt.new(params)
    set_gantt_dates(@gantt)
    @gantt.project = @project    
    retrieve_query
    @query.group_by = nil
    @gantt.query = @query if @query.valid?

    basename = (@project ? "#{@project.identifier}-" : '') + 'gantt'

    respond_to do |format|
      format.html { render :action => "show", :layout => !request.xhr? }
      format.png  { send_data(@gantt.to_image, :disposition => 'inline', :type => 'image/png', :filename => "#{basename}.png") } if @gantt.respond_to?('to_image')
      format.pdf  { send_data(@gantt.to_pdf, :type => 'application/pdf', :filename => "#{basename}.pdf") }
    end
  end
end

I implemented a method in application controller where I pass the gantt variable to the method to store the month and year in session as below.

  def set_gantt_dates(gantt)
    session[:user_id] = User.current.id
    session[:month_from] = gantt.month_from
    session[:year_from] = gantt.year_from
    session[:months] = gantt.months 
  end
  helper_method :set_gantt_dates

I am accessing this helper method in my show view page gantt, but it does not make any difference

<p class="buttons">
  <% set_gantt_dates(@gantt) %>
  <%= number_field_tag 'months', @gantt.months, :min => 1, :max => Setting.gantt_months_limit.to_i, :autocomplete => false %>
  <%= l(:label_months_from) %>
  <%= select_month(session[:month_from], :prefix => "month", :discard_type => true) %>
  <%= select_year(session[: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' %> !-->
  <%= button_tag "Apply", :class => 'icon icon-checked', :onclick => "submitQuery()" %>
  <%= 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),
                         "$('#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), edit_query_path(@query, :gantt => 1), :class => 'icon icon-edit' %>
  <%= delete_link query_path(@query, :gantt => 1) %>
<% end %>
</p>
</div>
<% end %>

Please help