aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJohan Van Ryseghem2018-02-12 09:41:42 +0100
committerGitHub2018-02-12 09:41:42 +0100
commit7f044f8ab9cf9394c4180f3d467a74bd95dcd398 (patch)
tree1dbafebd67114d89cbdf7d0093da1dd7d6d18845
parenta40bc45dd8d8e8e39bb7929f4d8c8e25babf86c6 (diff)
parent9d7e4b4bc23ce343a0c6acb7805112d64dd97a1a (diff)
downloadchouette-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.rb40
-rw-r--r--app/decorators/compliance_control_set_decorator.rb2
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