diff options
| author | Xinhui | 2017-03-21 13:41:49 +0100 | 
|---|---|---|
| committer | Xinhui | 2017-03-21 13:48:54 +0100 | 
| commit | faa208a63066e0ac723765ff83c6d8b1df7eaead (patch) | |
| tree | eca0934c330a4d438d101a3fc0c67df2f2cc30d0 /app/controllers | |
| parent | 5f1e3df6e2c3d99740de3e03834a1ed5eba57bd1 (diff) | |
| download | chouette-core-faa208a63066e0ac723765ff83c6d8b1df7eaead.tar.bz2 | |
Refactoring workbench_controller & ransack_associated_lines filter
Refs #2799
Diffstat (limited to 'app/controllers')
| -rw-r--r-- | app/controllers/workbenches_controller.rb | 71 | 
1 files changed, 41 insertions, 30 deletions
diff --git a/app/controllers/workbenches_controller.rb b/app/controllers/workbenches_controller.rb index cbbf1b058..7f108b266 100644 --- a/app/controllers/workbenches_controller.rb +++ b/app/controllers/workbenches_controller.rb @@ -1,27 +1,16 @@  class WorkbenchesController < BreadcrumbController -  defaults :resource_class => Workbench -  respond_to :html, :only => [:show] +  before_action :query_params, only: [:show] + +  defaults resource_class: Workbench +  respond_to :html, only: [:show]    def show -    scope   = Workbench.find(params[:id]) -    scope   = params[:q] ? scope.all_referentials : scope.referentials.ready -    periode = ransack_periode -    scope   = scope.in_periode(periode) if periode -    @q      = scope.ransack(params[:q]) +    scope = params[:q] ? resource.all_referentials : resource.referentials.ready +    scope = ransack_associated_lines(scope) +    @q = ransack_periode(scope).ransack(params[:q])      @q.organisation_name_eq_any ||= current_organisation.name unless params[:q] -    @wbench_refs  = @q.result -    # @wbench_refs = Workbench.find(params[:id]).referentials - -    case sort_column -    when "lines" -      @wbench_refs = @wbench_refs.joins(:metadatas).group("referentials.id").order("sum(array_length(referential_metadata.line_ids,1)) #{sort_direction}") -    else -      @wbench_refs = @wbench_refs.order("#{sort_column} #{sort_direction}") -    end - -    @wbench_refs = @wbench_refs.paginate(page: params[:page], per_page: 30) - +    @wbench_refs = sort_result(@q.result).paginate(page: params[:page], per_page: 30)      show! do        build_breadcrumb :show      end @@ -38,27 +27,49 @@ class WorkbenchesController < BreadcrumbController    end    private -  def sort_column -    (Workbench.find(params[:id]).referentials.column_names + %w{lines}).include?(params[:sort]) ? params[:sort] : 'name' +  def resource +    @workbench = Workbench.find params[:id] +  end + +  def sort_result collection +    col = (Workbench.find(params[:id]).referentials.column_names + %w{lines}).include?(params[:sort]) ? params[:sort] : 'name' +    dir = %w[asc desc].include?(params[:direction]) ?  params[:direction] : 'asc' +    if col == "lines" +      collection.joins(:metadatas).group("referentials.id").order("sum(array_length(referential_metadata.line_ids,1)) #{dir}") +    else +      collection.order("#{col} #{dir}") +    end    end -  def sort_direction -    %w[asc desc].include?(params[:direction]) ?  params[:direction] : 'asc' +  def query_params +    if params[:q].present? +      params[:q].delete_if { |query, value| value.blank? } +    end +  end + +  # Fake ransack filter +  def ransack_associated_lines scope +    if params[:q] && params[:q]['associated_lines_id_eq'] +      scope = scope.include_metadatas_lines([params[:q]['associated_lines_id_eq']]) +      params[:q].delete('associated_lines_id_eq') +    end +    scope    end -  def ransack_periode -    return false unless params[:q] && params[:q]['validity_period'] +  # Fake ransack filter +  def ransack_periode scope +    return scope unless params[:q] && params[:q]['validity_period']      periode = params[:q]['validity_period'] -    return false if periode['end_lteq(1i)'].empty? || periode['begin_gteq(1i)'].empty? +    return scope if periode['end_lteq(1i)'].empty? || periode['begin_gteq(1i)'].empty? -    start_range = Date.civil(periode["begin_gteq(1i)"].to_i, periode["begin_gteq(2i)"].to_i, periode["begin_gteq(3i)"].to_i) +    begin_range = Date.civil(periode["begin_gteq(1i)"].to_i, periode["begin_gteq(2i)"].to_i, periode["begin_gteq(3i)"].to_i)      end_range   = Date.civil(periode["end_lteq(1i)"].to_i, periode["end_lteq(2i)"].to_i, periode["end_lteq(3i)"].to_i) -    if start_range > end_range +    if begin_range > end_range        flash.now[:error] = t('referentials.errors.validity_period') -      false      else -      start_range..end_range +      scope = scope.in_periode(begin_range..end_range)      end +    scope    end  end  | 
