diff options
| author | Johan Van Ryseghem | 2018-02-12 09:41:42 +0100 | 
|---|---|---|
| committer | GitHub | 2018-02-12 09:41:42 +0100 | 
| commit | 7f044f8ab9cf9394c4180f3d467a74bd95dcd398 (patch) | |
| tree | 1dbafebd67114d89cbdf7d0093da1dd7d6d18845 | |
| parent | a40bc45dd8d8e8e39bb7929f4d8c8e25babf86c6 (diff) | |
| parent | 9d7e4b4bc23ce343a0c6acb7805112d64dd97a1a (diff) | |
| download | chouette-core-7f044f8ab9cf9394c4180f3d467a74bd95dcd398.tar.bz2 | |
Merge pull request #292 from af83/5709_fix_ccset_sorting
5709 fix ccset sorting
| -rw-r--r-- | app/controllers/compliance_control_sets_controller.rb | 40 | ||||
| -rw-r--r-- | app/decorators/compliance_control_set_decorator.rb | 2 | 
2 files changed, 39 insertions, 3 deletions
| diff --git a/app/controllers/compliance_control_sets_controller.rb b/app/controllers/compliance_control_sets_controller.rb index ae1d01feb..8f9251155 100644 --- a/app/controllers/compliance_control_sets_controller.rb +++ b/app/controllers/compliance_control_sets_controller.rb @@ -7,10 +7,8 @@ class ComplianceControlSetsController < ChouetteController    def index      index! do |format| -      scope = self.ransack_period_range(scope: @compliance_control_sets, error_message: t('imports.filters.error_period_filter'), query: :where_updated_at_between) -      @q_for_form = scope.ransack(params[:q])        format.html { -        @compliance_control_sets = decorate_compliance_control_sets(@q_for_form.result.paginate(page: params[:page], per_page: 30)) +        @compliance_control_sets = decorate_compliance_control_sets(@compliance_control_sets)        }      end    end @@ -37,6 +35,14 @@ class ComplianceControlSetsController < ChouetteController    private +  def collection +    scope = self.ransack_period_range(scope: ComplianceControlSet.all, error_message: t('imports.filters.error_period_filter'), query: :where_updated_at_between) +    @q_for_form = scope.ransack(params[:q]) +    compliance_control_sets = @q_for_form.result +    compliance_control_sets = joins_with_associated_objects(compliance_control_sets).order(sort_column + ' ' + sort_direction) if sort_column && sort_direction +    @compliance_control_sets = compliance_control_sets.paginate(page: params[:page], per_page: 30) +  end +    def decorate_compliance_control_sets(compliance_control_sets)      ComplianceControlSetDecorator.decorate(compliance_control_sets)    end @@ -58,4 +64,32 @@ class ComplianceControlSetsController < ChouetteController      @direct_compliance_controls        = compliance_controls.delete nil      @blocks_to_compliance_controls_map = compliance_controls    end + +  def sort_column +    case params[:sort] +      when 'name' then 'lower(compliance_control_sets.name)' +      when 'owner_jdc' then 'lower(organisations.name)' +      when 'control_numbers' then 'COUNT(compliance_controls.id)' +      else +        ComplianceControlSet.column_names.include?(params[:sort]) ? params[:sort] : 'lower(compliance_control_sets.name)' +    end +  end + +  def joins_with_associated_objects(collection) + +    # dont know if this is the right way to do it but since we need to join table deoending of the params +    # it was to avoid loading associated objects if we don't need them +    case params[:sort] +      when 'owner_jdc' +        collection.joins("LEFT JOIN organisations ON compliance_control_sets.organisation_id = organisations.id") +      when 'control_numbers'  +        collection.joins("LEFT JOIN compliance_controls ON compliance_controls.compliance_control_set_id = compliance_control_sets.id").group(:id) +      else  +        collection +    end +  end + +  def sort_direction +    %w[asc desc].include?(params[:direction]) ?  params[:direction] : 'asc' +  end  end diff --git a/app/decorators/compliance_control_set_decorator.rb b/app/decorators/compliance_control_set_decorator.rb index 387822c67..b16a06886 100644 --- a/app/decorators/compliance_control_set_decorator.rb +++ b/app/decorators/compliance_control_set_decorator.rb @@ -6,6 +6,8 @@ class ComplianceControlSetDecorator < AF83::Decorator    end    with_instance_decorator do |instance_decorator| +    instance_decorator.show_action_link +      instance_decorator.edit_action_link do |l|        l.content t('compliance_control_sets.actions.edit')      end | 
