diff options
| author | cedricnjanga | 2018-02-07 12:24:38 -0800 | 
|---|---|---|
| committer | cedricnjanga | 2018-02-07 12:24:38 -0800 | 
| commit | 9d7e4b4bc23ce343a0c6acb7805112d64dd97a1a (patch) | |
| tree | 09e060ec2bd25270ed6a6860dc06e0d8c8276953 | |
| parent | 1a9515637e0f4b45647ccf95e4cdd884bbe56891 (diff) | |
| download | chouette-core-9d7e4b4bc23ce343a0c6acb7805112d64dd97a1a.tar.bz2 | |
Refs #5709 Fix CCSet index table builder sorting & add show button in gear menu link5709_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 | 
